From 165a135988a2ca393b721186f8aaca6874641ade Mon Sep 17 00:00:00 2001 From: Muhammad Azad Date: Fri, 22 Mar 2024 12:05:23 +0300 Subject: [PATCH 01/44] Add Package.swift for SPM; refactor module structure --- .gitignore | 5 + .../contents.xcworkspacedata | 7 + MuslimData/.swiftformat | 10 -- MuslimData/.swiftlint.yml | 12 -- MuslimData/Assets/.gitkeep | 0 MuslimData/Classes/.gitkeep | 0 Package.resolved | 24 +++ Package.swift | 31 ++++ .../MuslimData}/DB Helper/DBHelper.swift | 2 +- .../Extensions/DateExtensions.swift | 0 .../Extensions/String+Extensions.swift | 0 .../Models/Azkars/AzkarCategory.swift | 0 .../Models/Azkars/AzkarChapter.swift | 0 .../MuslimData}/Models/Azkars/AzkarItem.swift | 0 .../Models/Location/Location.swift | 0 .../MuslimData}/Models/Names/Language.swift | 0 .../MuslimData}/Models/Names/Name.swift | 0 .../Models/PrayerTimes/Prayer.swift | 0 .../Models/PrayerTimes/PrayerAttribute.swift | 0 .../Models/PrayerTimes/PrayerTime.swift | 0 .../Models/PrayerTimes/TimeFormat.swift | 0 .../Repository/MuslimRepository.swift | 0 .../MuslimData}/Repository/Repository.swift | 0 .../MuslimData/Resources}/CHANGELOG.md | 0 .../MuslimData/Resources}/muslim_db_v2.0.0.db | Bin Tests/MuslimDataTests/AzkarTests.swift | 155 ++++++++++++++++++ Tests/MuslimDataTests/Info.plist | 24 +++ Tests/MuslimDataTests/LocationTests.swift | 102 ++++++++++++ Tests/MuslimDataTests/NamesTest.swift | 50 ++++++ Tests/MuslimDataTests/PrayerTests.swift | 57 +++++++ 30 files changed, 456 insertions(+), 23 deletions(-) create mode 100644 .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata delete mode 100755 MuslimData/.swiftformat delete mode 100755 MuslimData/.swiftlint.yml delete mode 100755 MuslimData/Assets/.gitkeep delete mode 100755 MuslimData/Classes/.gitkeep create mode 100644 Package.resolved create mode 100644 Package.swift rename {MuslimData/Classes => Sources/MuslimData}/DB Helper/DBHelper.swift (98%) rename {MuslimData/Classes => Sources/MuslimData}/Extensions/DateExtensions.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Extensions/String+Extensions.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/Azkars/AzkarCategory.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/Azkars/AzkarChapter.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/Azkars/AzkarItem.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/Location/Location.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/Names/Language.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/Names/Name.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/PrayerTimes/Prayer.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/PrayerTimes/PrayerAttribute.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/PrayerTimes/PrayerTime.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Models/PrayerTimes/TimeFormat.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Repository/MuslimRepository.swift (100%) rename {MuslimData/Classes => Sources/MuslimData}/Repository/Repository.swift (100%) rename {MuslimData/Assets => Sources/MuslimData/Resources}/CHANGELOG.md (100%) rename {MuslimData/Assets => Sources/MuslimData/Resources}/muslim_db_v2.0.0.db (100%) create mode 100755 Tests/MuslimDataTests/AzkarTests.swift create mode 100755 Tests/MuslimDataTests/Info.plist create mode 100755 Tests/MuslimDataTests/LocationTests.swift create mode 100755 Tests/MuslimDataTests/NamesTest.swift create mode 100755 Tests/MuslimDataTests/PrayerTests.swift diff --git a/.gitignore b/.gitignore index 93c86d3..95f17a1 100755 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,11 @@ DerivedData Carthage/Build +### SwiftPackageManager ### +Packages +xcuserdata +*.xcodeproj + # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/MuslimData/.swiftformat b/MuslimData/.swiftformat deleted file mode 100755 index 3fa3cc7..0000000 --- a/MuslimData/.swiftformat +++ /dev/null @@ -1,10 +0,0 @@ -# format options! ---swiftversion 5.1 - -# file options ---exclude Pods - -# rules ---disable trailingCommas,unusedArguments ---disable wrapMultilineStatementBraces - diff --git a/MuslimData/.swiftlint.yml b/MuslimData/.swiftlint.yml deleted file mode 100755 index 8a425c0..0000000 --- a/MuslimData/.swiftlint.yml +++ /dev/null @@ -1,12 +0,0 @@ -excluded: - - Pods - - ../MuslimData/Classes/Models/PrayerTimes/Prayer.swift -included: - - ../MuslimData -identifier_name: - excluded: - - id - - en - - ar - - fa - - ru diff --git a/MuslimData/Assets/.gitkeep b/MuslimData/Assets/.gitkeep deleted file mode 100755 index e69de29..0000000 diff --git a/MuslimData/Classes/.gitkeep b/MuslimData/Classes/.gitkeep deleted file mode 100755 index e69de29..0000000 diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 0000000..2a0b594 --- /dev/null +++ b/Package.resolved @@ -0,0 +1,24 @@ +{ + "originHash" : "6b5e8dea1dfb4220663d356a716f5ce2511b938bcd3b8cd4b5e578593240140e", + "pins" : [ + { + "identity" : "csqlite", + "kind" : "remoteSourceControl", + "location" : "https://github.com/groue/CSQLite.git", + "state" : { + "revision" : "3a405d0ebd8bf07d4c41a8b05a203e4d03415b5b", + "version" : "0.3.0" + } + }, + { + "identity" : "grdb.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/groue/GRDB.swift.git", + "state" : { + "revision" : "49a7b2091c84e8e695e78ada1840eda022e5dc11", + "version" : "4.0.1" + } + } + ], + "version" : 3 +} diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..f758c71 --- /dev/null +++ b/Package.swift @@ -0,0 +1,31 @@ +// swift-tools-version: 5.10 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "muslim-data-ios", + products: [ + // Products define the executables and libraries a package produces, making them visible to other packages. + .library( + name: "MuslimData", + targets: ["MuslimData"]), + ], + dependencies: [ + .package(url: "https://github.com/groue/GRDB.swift.git", exact: "4.0.1") + ], + targets: [ + // Targets are the basic building blocks of a package, defining a module or a test suite. + // Targets can depend on other targets in this package and products from dependencies. + .target( + name: "MuslimData", + dependencies: [ + .product(name: "GRDB", package: "GRDB.swift") + ], + resources: [.process("Resources")] + ), + .testTarget( + name: "MuslimDataTests", + dependencies: ["MuslimData"]), + ] +) diff --git a/MuslimData/Classes/DB Helper/DBHelper.swift b/Sources/MuslimData/DB Helper/DBHelper.swift similarity index 98% rename from MuslimData/Classes/DB Helper/DBHelper.swift rename to Sources/MuslimData/DB Helper/DBHelper.swift index fabe807..4fa7a77 100755 --- a/MuslimData/Classes/DB Helper/DBHelper.swift +++ b/Sources/MuslimData/DB Helper/DBHelper.swift @@ -19,7 +19,7 @@ class DBHelper { private init() { var configuration = Configuration() configuration.readonly = true - let databaseURL = Bundle(for: DBHelper.self).path(forResource: "muslim_db_v2.0.0", ofType: "db")! + let databaseURL = Bundle.module.path(forResource: "muslim_db_v2.0.0", ofType: "db")! dbPool = try? DatabasePool(path: databaseURL, configuration: configuration) // Be a nice iOS citizen, and don’t consume too much memory diff --git a/MuslimData/Classes/Extensions/DateExtensions.swift b/Sources/MuslimData/Extensions/DateExtensions.swift similarity index 100% rename from MuslimData/Classes/Extensions/DateExtensions.swift rename to Sources/MuslimData/Extensions/DateExtensions.swift diff --git a/MuslimData/Classes/Extensions/String+Extensions.swift b/Sources/MuslimData/Extensions/String+Extensions.swift similarity index 100% rename from MuslimData/Classes/Extensions/String+Extensions.swift rename to Sources/MuslimData/Extensions/String+Extensions.swift diff --git a/MuslimData/Classes/Models/Azkars/AzkarCategory.swift b/Sources/MuslimData/Models/Azkars/AzkarCategory.swift similarity index 100% rename from MuslimData/Classes/Models/Azkars/AzkarCategory.swift rename to Sources/MuslimData/Models/Azkars/AzkarCategory.swift diff --git a/MuslimData/Classes/Models/Azkars/AzkarChapter.swift b/Sources/MuslimData/Models/Azkars/AzkarChapter.swift similarity index 100% rename from MuslimData/Classes/Models/Azkars/AzkarChapter.swift rename to Sources/MuslimData/Models/Azkars/AzkarChapter.swift diff --git a/MuslimData/Classes/Models/Azkars/AzkarItem.swift b/Sources/MuslimData/Models/Azkars/AzkarItem.swift similarity index 100% rename from MuslimData/Classes/Models/Azkars/AzkarItem.swift rename to Sources/MuslimData/Models/Azkars/AzkarItem.swift diff --git a/MuslimData/Classes/Models/Location/Location.swift b/Sources/MuslimData/Models/Location/Location.swift similarity index 100% rename from MuslimData/Classes/Models/Location/Location.swift rename to Sources/MuslimData/Models/Location/Location.swift diff --git a/MuslimData/Classes/Models/Names/Language.swift b/Sources/MuslimData/Models/Names/Language.swift similarity index 100% rename from MuslimData/Classes/Models/Names/Language.swift rename to Sources/MuslimData/Models/Names/Language.swift diff --git a/MuslimData/Classes/Models/Names/Name.swift b/Sources/MuslimData/Models/Names/Name.swift similarity index 100% rename from MuslimData/Classes/Models/Names/Name.swift rename to Sources/MuslimData/Models/Names/Name.swift diff --git a/MuslimData/Classes/Models/PrayerTimes/Prayer.swift b/Sources/MuslimData/Models/PrayerTimes/Prayer.swift similarity index 100% rename from MuslimData/Classes/Models/PrayerTimes/Prayer.swift rename to Sources/MuslimData/Models/PrayerTimes/Prayer.swift diff --git a/MuslimData/Classes/Models/PrayerTimes/PrayerAttribute.swift b/Sources/MuslimData/Models/PrayerTimes/PrayerAttribute.swift similarity index 100% rename from MuslimData/Classes/Models/PrayerTimes/PrayerAttribute.swift rename to Sources/MuslimData/Models/PrayerTimes/PrayerAttribute.swift diff --git a/MuslimData/Classes/Models/PrayerTimes/PrayerTime.swift b/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift similarity index 100% rename from MuslimData/Classes/Models/PrayerTimes/PrayerTime.swift rename to Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift diff --git a/MuslimData/Classes/Models/PrayerTimes/TimeFormat.swift b/Sources/MuslimData/Models/PrayerTimes/TimeFormat.swift similarity index 100% rename from MuslimData/Classes/Models/PrayerTimes/TimeFormat.swift rename to Sources/MuslimData/Models/PrayerTimes/TimeFormat.swift diff --git a/MuslimData/Classes/Repository/MuslimRepository.swift b/Sources/MuslimData/Repository/MuslimRepository.swift similarity index 100% rename from MuslimData/Classes/Repository/MuslimRepository.swift rename to Sources/MuslimData/Repository/MuslimRepository.swift diff --git a/MuslimData/Classes/Repository/Repository.swift b/Sources/MuslimData/Repository/Repository.swift similarity index 100% rename from MuslimData/Classes/Repository/Repository.swift rename to Sources/MuslimData/Repository/Repository.swift diff --git a/MuslimData/Assets/CHANGELOG.md b/Sources/MuslimData/Resources/CHANGELOG.md similarity index 100% rename from MuslimData/Assets/CHANGELOG.md rename to Sources/MuslimData/Resources/CHANGELOG.md diff --git a/MuslimData/Assets/muslim_db_v2.0.0.db b/Sources/MuslimData/Resources/muslim_db_v2.0.0.db similarity index 100% rename from MuslimData/Assets/muslim_db_v2.0.0.db rename to Sources/MuslimData/Resources/muslim_db_v2.0.0.db diff --git a/Tests/MuslimDataTests/AzkarTests.swift b/Tests/MuslimDataTests/AzkarTests.swift new file mode 100755 index 0000000..6a887af --- /dev/null +++ b/Tests/MuslimDataTests/AzkarTests.swift @@ -0,0 +1,155 @@ +// +// AzkarTests.swift +// MuslimData_Tests +// +// Created by Kosrat D. Ahmad on 10/13/18. +// Copyright © 2018 CocoaPods. All rights reserved. +// + +@testable import MuslimData +import XCTest + +class AzkarTests: XCTestCase { + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testEnAzkarCategories() async throws { + let categories = try await MuslimRepository().getAzkarCategories(language: .en) + assesAzkarCategories(categories: categories) + } + + func testArAzkarCategories() async throws { + let categories = try await MuslimRepository().getAzkarCategories(language: .ar) + assesAzkarCategories(categories: categories) + } + + func testCkbAzkarCategories() async throws { + let categories = try await MuslimRepository().getAzkarCategories(language: .ckb) + assesAzkarCategories(categories: categories) + } + + func testFaAzkarCategories() async throws { + let categories = try await MuslimRepository().getAzkarCategories(language: .fa) + assesAzkarCategories(categories: categories) + } + + func testRuAzkarCategories() async throws { + let categories = try await MuslimRepository().getAzkarCategories(language: .ru) + assesAzkarCategories(categories: categories) + } + + private func assesAzkarCategories(categories: [AzkarCategory]?) { + XCTAssertNotNil(categories) + XCTAssertEqual(categories!.count, 11) + XCTAssertNotNil(categories![Int.random(in: 0 ..< 11)].name) + } + + func testEnAzkarChapters() async throws { + let chapters = try await MuslimRepository().getAzkarChapters(language: .en) + assesAzkarChapters(chapters: chapters) + } + + func testArAzkarChapters() async throws { + let chapters = try await MuslimRepository().getAzkarChapters(language: .ar) + assesAzkarChapters(chapters: chapters) + } + + func testCkbAzkarChapters() async throws { + let chapters = try await MuslimRepository().getAzkarChapters(language: .ckb) + assesAzkarChapters(chapters: chapters) + } + + func testFaAzkarChapters() async throws { + let chapters = try await MuslimRepository().getAzkarChapters(language: .fa) + assesAzkarChapters(chapters: chapters) + } + + func testRuAzkarChapters() async throws { + let chapters = try await MuslimRepository().getAzkarChapters(language: .ru) + assesAzkarChapters(chapters: chapters) + } + + private func assesAzkarChapters(chapters: [AzkarChapter]?) { + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 133) + } + + func testAzkarChaptersByCategory() async throws { + // Test English azkar chapters for category id = 1 + var chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 1) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 7) + + // Test English azkar chapters for category id = 2 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 2) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 14) + + // Test English azkar chapters for category id = 3 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 3) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 7) + + // Test English azkar chapters for category id = 4 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 4) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 15) + + // Test English azkar chapters for category id = 5 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 5) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 11) + + // Test English azkar chapters for category id = 6 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 6) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 19) + + // Test English azkar chapters for category id = 7 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 7) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 9) + + // Test English azkar chapters for category id = 8 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 8) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 8) + + // Test English azkar chapters for category id = 9 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 9) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 20) + + // Test English azkar chapters for category id = 10 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 10) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 10) + + // Test English azkar chapters for category id = 11 + chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 11) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 13) + } + + func testAzkarItems() async throws { + // Test English azkar items for chapter id = 1 + var items = try await MuslimRepository().getAzkarItems(language: .en, chapterId: 1) + XCTAssertNotNil(items) + XCTAssertEqual(items!.count, 4) + + // Test English azkar items for chapter id = 10 + items = try await MuslimRepository().getAzkarItems(language: .en, chapterId: 10) + XCTAssertNotNil(items) + XCTAssertEqual(items!.count, 2) + + // Test English azkar items for chapter id = 100 + items = try await MuslimRepository().getAzkarItems(language: .en, chapterId: 100) + XCTAssertNotNil(items) + XCTAssertEqual(items!.count, 1) + } +} diff --git a/Tests/MuslimDataTests/Info.plist b/Tests/MuslimDataTests/Info.plist new file mode 100755 index 0000000..ba72822 --- /dev/null +++ b/Tests/MuslimDataTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Tests/MuslimDataTests/LocationTests.swift b/Tests/MuslimDataTests/LocationTests.swift new file mode 100755 index 0000000..dc9414f --- /dev/null +++ b/Tests/MuslimDataTests/LocationTests.swift @@ -0,0 +1,102 @@ +// +// LocationTests.swift +// MuslimData_Tests +// +// Created by Kosrat D. Ahmad on 10/6/18. +// Copyright © 2018 CocoaPods. All rights reserved. +// + +@testable import MuslimData +import XCTest + +class LocationTests: XCTestCase { + override func setUp() { + super.setUp() + } + + override func tearDown() { + super.tearDown() + } + + func testLondonGBGeocod() async throws { + // Test (London, GB) which has fixed prayer times. + let location = try await MuslimRepository().geocoder(countryCode: "GB", locationName: "London") + XCTAssertNotNil(location) + XCTAssertEqual(location!.latitude, 51.50853) + XCTAssertEqual(location!.longitude, -0.12574) + XCTAssertEqual(location!.hasFixedPrayerTime, true) + } + + func testUnknownGeocode() async throws { + // Test Nil. + let location = try await MuslimRepository().geocoder(countryCode: "abc", locationName: "Unknown") + XCTAssertNil(location) + } + + func testTehranIRGeocode() async throws { + // Test (Tahran, IR) which hasn't fixed prayer times. + let location = try await MuslimRepository().geocoder(countryCode: "IR", locationName: "Tehran") + XCTAssertNotNil(location) + XCTAssertEqual(location!.latitude, 35.69439) + XCTAssertEqual(location!.longitude, 51.42151) + XCTAssertEqual(location!.hasFixedPrayerTime, false) + } + + func testSoranIQGeocode() async throws { + // Test (Soran, IQ) which has fixed prayer times. + let location = try await MuslimRepository().geocoder(countryCode: "IQ", locationName: "Soran") + XCTAssertNotNil(location) + XCTAssertEqual(location!.latitude, 36.652686) + XCTAssertEqual(location!.longitude, 44.541427) + XCTAssertEqual(location!.hasFixedPrayerTime, true) + } + + func testQasreIQGeocode() async throws { + // Test (Qasre, IQ) which has fixed prayer times. + let location = try await MuslimRepository().geocoder(countryCode: "IQ", locationName: "Qasre") + XCTAssertNotNil(location) + XCTAssertEqual(location!.latitude, 36.557804) + XCTAssertEqual(location!.longitude, 44.827805) + XCTAssertEqual(location!.hasFixedPrayerTime, true) + } + + func testLondonGBReverseGeocode() async throws { + // Test (London, GB) which has fixed prayer times. + let location = try await MuslimRepository().reverseGeocoder(latitude: 51.50853, longitude: -0.12574) + XCTAssertNotNil(location) + XCTAssertEqual(location!.name, "London") + XCTAssertEqual(location!.countryCode, "GB") + XCTAssertEqual(location!.countryName, "United Kingdom") + XCTAssertEqual(location!.hasFixedPrayerTime, true) + } + + func testTehranIRReverseGeocode() async throws { + // Test (Tahran, IR) which hasn't fixed prayer times. + let location = try await MuslimRepository().reverseGeocoder(latitude: 35.69439, longitude: 51.42151) + XCTAssertNotNil(location) + XCTAssertEqual(location!.name, "Tehran") + XCTAssertEqual(location!.countryCode, "IR") + XCTAssertEqual(location!.countryName, "Iran") + XCTAssertEqual(location!.hasFixedPrayerTime, false) + } + + func testSoranIQReverseGeocode() async throws { + // Test (Soran, IQ) which has fixed prayer times. + let location = try await MuslimRepository().reverseGeocoder(latitude: 36.652686, longitude: 44.541427) + XCTAssertNotNil(location) + XCTAssertEqual(location!.name, "Soran") + XCTAssertEqual(location!.countryCode, "IQ") + XCTAssertEqual(location!.countryName, "Iraq") + XCTAssertEqual(location!.hasFixedPrayerTime, true) + } + + func testQasreIQReverseGeocode() async throws { + // Test (Qasre, IQ) which has fixed prayer times. + let location = try await MuslimRepository().reverseGeocoder(latitude: 36.557804, longitude: 44.827805) + XCTAssertNotNil(location) + XCTAssertEqual(location!.name, "Qasre") + XCTAssertEqual(location!.countryCode, "IQ") + XCTAssertEqual(location!.countryName, "Iraq") + XCTAssertEqual(location!.hasFixedPrayerTime, true) + } +} diff --git a/Tests/MuslimDataTests/NamesTest.swift b/Tests/MuslimDataTests/NamesTest.swift new file mode 100755 index 0000000..4e245b1 --- /dev/null +++ b/Tests/MuslimDataTests/NamesTest.swift @@ -0,0 +1,50 @@ +// +// NamesTest.swift +// MuslimData_Tests +// +// Created by Kosrat D. Ahmad on 10/12/18. +// Copyright © 2018 CocoaPods. All rights reserved. +// + +@testable import MuslimData +import XCTest + +class NamesTest: XCTestCase { + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testEnglishNames() async throws { + let names = try await MuslimRepository().getNamesOfAllah(language: .en) + assesNames(names: names) + } + + func testArabicNames() async throws { + let names = try await MuslimRepository().getNamesOfAllah(language: .ar) + assesNames(names: names) + } + + func testKurdishNames() async throws { + let names = try await MuslimRepository().getNamesOfAllah(language: .ckb) + assesNames(names: names) + } + + func testFarsiNames() async throws { + let names = try await MuslimRepository().getNamesOfAllah(language: .fa) + assesNames(names: names) + } + + func testRussianNames() async throws { + let names = try await MuslimRepository().getNamesOfAllah(language: .ru) + assesNames(names: names) + } + + private func assesNames(names: [Name]?) { + XCTAssertNotNil(names) + XCTAssertEqual(names!.count, 99) + } +} diff --git a/Tests/MuslimDataTests/PrayerTests.swift b/Tests/MuslimDataTests/PrayerTests.swift new file mode 100755 index 0000000..bd2d23b --- /dev/null +++ b/Tests/MuslimDataTests/PrayerTests.swift @@ -0,0 +1,57 @@ +// +// PrayerTests.swift +// MuslimData_Tests +// +// Created by Kosrat D. Ahmad on 10/8/18. +// Copyright © 2018 CocoaPods. All rights reserved. +// + +@testable import MuslimData +import XCTest + +class PrayerTests: XCTestCase { + var attributes: PrayerAttribute! + var date: Date! + var offsets: [Double]! + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + date = Date(timeIntervalSince1970: 1_538_956_800) // 2018/10/08 + offsets = [1, 1, 1, -1, -1, -1] + attributes = PrayerAttribute(method: .makkah, asrMethod: .shafii, adjustAngle: .angleBased, offsets: offsets) + } + + override func tearDown() { + date = nil + attributes = nil + super.tearDown() + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testAllFixedPrayerTimes() async throws { + let locations = try await MuslimRepository().getAllFixedPrayerLocations() + let date = Date(timeIntervalSince1970: 1_709_206_718) // 2024/02/29 + for location in locations! { + print(location) + let prayerTimes = try await MuslimRepository().getPrayerTimes(location: location, date: date, attributes: attributes) + XCTAssertNotNil(prayerTimes) + } + } + + func testCalculatedPrayer() async throws { + // Test calculated prayer times for Mecca, Saudi Arabia + let mecca = Location(id: 119_496, name: "Mecca", latitude: 21.42664, longitude: 39.82563, countryCode: "SA", + countryName: "Saudi Arabia", hasFixedPrayerTime: false, prayerDependentId: nil) + let prayer = try await MuslimRepository().getPrayerTimes(location: mecca, date: date, attributes: attributes) + + XCTAssertNotNil(prayer) + let stringPrayer = prayer!.formatPrayers(.time24) + XCTAssertEqual(stringPrayer[0], "04:59") + XCTAssertEqual(stringPrayer[1], "06:15") + XCTAssertEqual(stringPrayer[2], "12:09") + XCTAssertEqual(stringPrayer[3], "15:30") + XCTAssertEqual(stringPrayer[4], "18:01") + XCTAssertEqual(stringPrayer[5], "19:31") + } +} From ad250aae1a7d99765c7571953a9bade7a37d76bb Mon Sep 17 00:00:00 2001 From: Muhammad Azad Date: Fri, 22 Mar 2024 12:30:23 +0300 Subject: [PATCH 02/44] Change cocopods source file path --- Example/MuslimData.xcodeproj/project.pbxproj | 2 +- Example/Podfile.lock | 10 +- .../Local Podspecs/MuslimData.podspec.json | 17 +- Example/Pods/Manifest.lock | 10 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 2087 +++++++++-------- .../GRDB.swift/GRDB.swift-Info.plist | 2 +- .../GRDB.swift/GRDB.swift.debug.xcconfig | 15 + .../GRDB.swift/GRDB.swift.release.xcconfig | 15 + .../MuslimData/MuslimData-Info.plist | 4 +- .../MuslimData/MuslimData.debug.xcconfig | 16 + .../MuslimData/MuslimData.release.xcconfig | 16 + .../Pods-MuslimData_Example-Info.plist | 2 +- ...slimData_Example-acknowledgements.markdown | 220 +- ...-MuslimData_Example-acknowledgements.plist | 220 +- .../Pods-MuslimData_Example-frameworks.sh | 93 +- .../Pods-MuslimData_Example.debug.xcconfig | 6 +- .../Pods-MuslimData_Example.release.xcconfig | 6 +- .../Pods-MuslimData_Tests-Info.plist | 2 +- .../Pods-MuslimData_Tests.debug.xcconfig | 4 +- .../Pods-MuslimData_Tests.release.xcconfig | 4 +- MuslimData.podspec | 8 +- Sources/MuslimData/DB Helper/DBHelper.swift | 3 +- 22 files changed, 1629 insertions(+), 1133 deletions(-) mode change 100755 => 100644 Example/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.release.xcconfig create mode 100644 Example/Pods/Target Support Files/MuslimData/MuslimData.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/MuslimData/MuslimData.release.xcconfig diff --git a/Example/MuslimData.xcodeproj/project.pbxproj b/Example/MuslimData.xcodeproj/project.pbxproj index 2918e82..da8b2b0 100755 --- a/Example/MuslimData.xcodeproj/project.pbxproj +++ b/Example/MuslimData.xcodeproj/project.pbxproj @@ -350,7 +350,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "if [[ \"$(uname -m)\" == arm64 ]]; then\n export PATH=\"/opt/homebrew/bin:$PATH\"\nfi\n\nif which swiftlint > /dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + shellScript = "#if [[ \"$(uname -m)\" == arm64 ]]; then\n# export PATH=\"/opt/homebrew/bin:$PATH\"\n#fi\n#\n#if which swiftlint > /dev/null; then\n# swiftlint\n#else\n# echo \"warning: SwiftLint not installed, download from #https://github.com/realm/SwiftLint\"\n#fi\n"; }; 2DABCDEA216296CC008F4B9B /* SwiftFormat */ = { isa = PBXShellScriptBuildPhase; diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 853bebd..b024598 100755 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -2,14 +2,14 @@ PODS: - GRDB.swift (4.0.1): - GRDB.swift/standard (= 4.0.1) - GRDB.swift/standard (4.0.1) - - MuslimData (1.0.0-beta.8): - - GRDB.swift + - MuslimData (1.6.0): + - GRDB.swift (~> 4.0.1) DEPENDENCIES: - MuslimData (from `../`) SPEC REPOS: - https://github.com/cocoapods/specs.git: + trunk: - GRDB.swift EXTERNAL SOURCES: @@ -18,8 +18,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: GRDB.swift: 106a830decf1d92a3fc63c6d6a2f6586f6187297 - MuslimData: 85ec0559a561eb03188b3e5cbb33dbbb36b91c8d + MuslimData: 51f505a7cc7bbd67ed9e52b6be0dc832f7b67041 PODFILE CHECKSUM: f1a8413ff73c18d27d5283425e84b7905893b20c -COCOAPODS: 1.6.0 +COCOAPODS: 1.15.2 diff --git a/Example/Pods/Local Podspecs/MuslimData.podspec.json b/Example/Pods/Local Podspecs/MuslimData.podspec.json index 04ddc7f..6cff543 100755 --- a/Example/Pods/Local Podspecs/MuslimData.podspec.json +++ b/Example/Pods/Local Podspecs/MuslimData.podspec.json @@ -1,6 +1,6 @@ { "name": "MuslimData", - "version": "1.0.0-beta.8", + "version": "1.6.0", "summary": "Islamic library (Prayer Times [fixed and calculated], Names of Allah, and Azkars).", "description": "MuslimData is an Islamic library that provides Prayer Times (fixed and calculated), Offline Geocoder, Location Search, Names of Allah, Azkars (Husnil Muslim).\n\nFixed and Calculated Prayer Times\nMost cities around the world find their prayer times by using some calculations which is based on location (longitude and latitude) but some other cities have fixed time table for their prayer times. This library contains most fixed and calculated prayer times. Now you can contribute it to improve it and also you can use it in Muslim communities or Muslim apps.", "homepage": "https://github.com/KosratDAhmad/MuslimData", @@ -13,18 +13,19 @@ }, "source": { "git": "https://github.com/KosratDAhmad/MuslimData.git", - "tag": "v1.0.0-beta.8" + "tag": "1.6.0" }, "platforms": { - "ios": "10.0" + "ios": "13.0" }, - "source_files": "MuslimData/Classes/**/*", - "swift_version": "5", - "resources": "MuslimData/Assets/**/*", + "source_files": "Sources/MuslimData/**/*", + "swift_versions": "5.10", + "resources": "Sources/MuslimData/Resources/**/*", "frameworks": "UIKit", "dependencies": { "GRDB.swift": [ - + "~> 4.0.1" ] - } + }, + "swift_version": "5.10" } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 853bebd..b024598 100755 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -2,14 +2,14 @@ PODS: - GRDB.swift (4.0.1): - GRDB.swift/standard (= 4.0.1) - GRDB.swift/standard (4.0.1) - - MuslimData (1.0.0-beta.8): - - GRDB.swift + - MuslimData (1.6.0): + - GRDB.swift (~> 4.0.1) DEPENDENCIES: - MuslimData (from `../`) SPEC REPOS: - https://github.com/cocoapods/specs.git: + trunk: - GRDB.swift EXTERNAL SOURCES: @@ -18,8 +18,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: GRDB.swift: 106a830decf1d92a3fc63c6d6a2f6586f6187297 - MuslimData: 85ec0559a561eb03188b3e5cbb33dbbb36b91c8d + MuslimData: 51f505a7cc7bbd67ed9e52b6be0dc832f7b67041 PODFILE CHECKSUM: f1a8413ff73c18d27d5283425e84b7905893b20c -COCOAPODS: 1.6.0 +COCOAPODS: 1.15.2 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj old mode 100755 new mode 100644 index 9c346df..f9a997f --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -3,926 +3,934 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ - 000B5FF0F2E60440DE83E1CDEF81BD43 /* DatabaseCollation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22BAAE27BDCE90B8C1F6B4992424D9C6 /* DatabaseCollation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 02750A16FAA074E14BB1C0936016B286 /* SQLCollatedExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD7F2FEBDAA3F216BBB4AE11EC6585D6 /* SQLCollatedExpression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 07E87312FC3CA6D83F78905E504BCE9C /* DatabaseValueConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B99EBD21496FBA605E3A375E86ED829 /* DatabaseValueConversion.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0AD24AEB225F135FE242003EA86E7039 /* PrayerAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DC6A83C7FE2580E3F2A1AFBB2B117E6 /* PrayerAttribute.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0C02D06017D674FB3D221B3082D52242 /* DatabaseRegion.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9488B06541B325219BAE37A334A1E59 /* DatabaseRegion.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0C99CC73940BDB5696917C42DE00B262 /* DatabasePromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C77E730F441F579931C11BA8F749FDF /* DatabasePromise.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0E0B8626BCD149D02290F230544A789A /* UUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C709D1799799F5A0E43E043E023415B /* UUID.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 10B2282DEF61B85E70A0877BE83B21DE /* FetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3F554C1B5DCD4EF089F605813FC5D3 /* FetchRequest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 11AAE1599E6093A219A889D2DAE80ECA /* StatementColumnConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD5F36FEF53D52328747380C3D59D187 /* StatementColumnConvertible.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 121E4E7A4C0459415A9B883D506D3FBC /* ValueObservation+DatabaseValueConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8F40C80B8B85C4393ED5F43C8ED116 /* ValueObservation+DatabaseValueConvertible.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 13F6B7CE384A0A2CE2A7E12616535089 /* SQLExpressible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7093F7382D260704506C5464AFBC16F5 /* SQLExpressible.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 15BFA9419F7B8F44B90DB2A0685D8416 /* SQLGenerationContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33E1BA72AB090848D099FDE15FFCD602 /* SQLGenerationContext.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1958078CF71CEA9143902886C5B9C310 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A49D0B537A24E7B6779BDF2FF4BF1376 /* UIKit.framework */; }; - 19EAAEBC608AA44323ABEE5E5C433F82 /* GRDB-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3DE7F469BC348F7C1DDC5196499B58 /* GRDB-Bridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A5226373797A66B9468D3C1F5C4D825 /* TableRecord+Association.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DE3C6FBEF1E948A8881FAC46607E0CE /* TableRecord+Association.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1BA72BD73CE8FCF542D23CBD4E18A2D8 /* EncodableRecord+Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92CAEAC5CC5B2720DC623C44C895C435 /* EncodableRecord+Encodable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1C3D3D4CBD9412DA99FE9CE8577F8856 /* GRDB-4.0.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0B8A534766D304CF9DE1A5C2C35051 /* GRDB-4.0.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1CAA3EDF7EBE5B64C6F193EB77CF398D /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25525D31CDCACA2AEE38C6A90DEDD714 /* Database.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1EF47C87D5BC5C950E090F8519C6FD30 /* ValueObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94CE31B27E7F34691556AD03AFBB63F5 /* ValueObservation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 20467EF687049794ACE9F46BD89B36A9 /* NSData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E40BE124BC4154995B1B2A7A660D03 /* NSData.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2136CBA14769165E58DDA619D2903003 /* DatabaseError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49192A23515A2FDF0209EBF9BA4DAB65 /* DatabaseError.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 22B2CC4684AD540D4DC22B38F0A1D4B8 /* DatabaseMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E166D7E44FE057A6E248D6B423B0C81 /* DatabaseMigrator.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2844C8F86E572981747D5F7D57A47079 /* SQLInterpolation+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA5BDCC7B5AB732EC9F8A60A48C1D510 /* SQLInterpolation+QueryInterface.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 28AC5449494C7BB3E1D2C61A23D88B3E /* ValueObservation+DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC8CAE41207247FFE6C23DD13296EA70 /* ValueObservation+DistinctUntilChanged.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 296E2869F5F3E220C5132E55AF60E2D3 /* GRDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FFD2B745CCCE37869DFC4E8FA83908E /* GRDB.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A050272F5AA9419EACC2B68583FBF0C /* StatementAuthorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83D32E01380A9B4A0B3817B6B914A51 /* StatementAuthorizer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2B130AEAB2EE4BD7997DB369572A684A /* FetchableRecord+TableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2058FFAD3AA3F5F1DA38DAB365079462 /* FetchableRecord+TableRecord.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2D0F97A52B813E8B003D46C5 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = 2D0F97A42B813E8B003D46C5 /* CHANGELOG.md */; }; - 2D6CD44729CC5BF2009B527C /* muslim_db_v2.0.0.db in Resources */ = {isa = PBXBuildFile; fileRef = 2D6CD44629CC5BF2009B527C /* muslim_db_v2.0.0.db */; }; - 2DAF0C709FAF6D288751DB00EB06B40C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7FD7232797ACF3F6F7685B58BCDC00C7 /* Foundation.framework */; }; - 2DE6E95C2BA8D8010082A3CE /* MuslimRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DE6E95B2BA8D8010082A3CE /* MuslimRepository.swift */; }; - 2DFE19682BAB81E900665C6B /* Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DFE19672BAB81E900665C6B /* Repository.swift */; }; - 318B2D4FBE83F08BB67C2AA6A52977AB /* FTS5+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5779BFB97BB16F7C257E39CD28630594 /* FTS5+QueryInterface.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 33FDF2697ECE2E34513CACBC1EDFDB51 /* DatabaseValueConvertible+RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1585FD241A9AC0D79B3E084E1A8B7B77 /* DatabaseValueConvertible+RawRepresentable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 35A9B68C8D7AC42A8187DC1F8AEC095A /* FTS3TokenizerDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C9ECD60B68221B76E253AA39B4B52E /* FTS3TokenizerDescriptor.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 394451DC1DB1945ED4FF137FDE90A8E4 /* ValueObservation+FetchableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 112165439418B44C4BDCFB45D22CBE34 /* ValueObservation+FetchableRecord.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3A22C174B394CB9AF865557B3EA0D761 /* Language.swift in Sources */ = {isa = PBXBuildFile; fileRef = 730FF805483A83B2584256EEDC5D2639 /* Language.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3E373FA762B90937FE09682DC5BE6FCE /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF596B48C538AB646A0EAF252A33E089 /* Migration.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 41677C6E7B38372C96FF8074BE163189 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB99538C9E87FA9C44300FFCA0B04EE /* Statement.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 423266C51CEEE11551EF493E0E9D41FC /* ReadWriteBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3087A8A5BD99215CD4DB3460F8AFEA73 /* ReadWriteBox.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4232F4B0DC26B878201F9523CEF8F761 /* PrayerTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6368FFE5512AD8AC9D36EB8427AFA109 /* PrayerTime.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 43694454258CB0903238325B1122E5A1 /* NSNull.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E4C6CC7D33B6BEE3483F48A38E6A45 /* NSNull.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4429FB29F5620E0A1845105ACD23FDEA /* ValueObservation+MapReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E9C257C00F610EA08A4E186851F37D0 /* ValueObservation+MapReducer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 443EAD393975455814198C533E80384A /* ValueObservation+Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9768AEB6008CAEF84324EC4C8938989B /* ValueObservation+Map.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 459E5AD9A0DF5E01D04CAD6D23929282 /* FTS3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FF0BA87045E3E9FABE15B6BF3A8D5A2 /* FTS3.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4697DE621262D990332671D683A6EB00 /* RowAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32170F8226285700A097463A2C81B28E /* RowAdapter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 46DCBB7C162FC503B1AF52D6A59CB87F /* DatabasePool.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2D8132A3643601639C3E59717516CA9 /* DatabasePool.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 473A628F8D25C06F0352CDB563A8F71E /* SQLInterpolation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5880470B1529D3998D951354FE8AAA99 /* SQLInterpolation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 499A61F937A27F0C2BAF4ECB402B4152 /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = E190980D696557F2DD2A9B526828DF03 /* FTS4.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 49D85D0B0DAA2BDADA2BBD09C2319058 /* SQLOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = B566BFB5B270273A425E6317B162D24F /* SQLOperators.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 49E4580E0F098D7B0E49A777CEEF7085 /* TimeFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F554C03188A6F204B2036E5CF4B82D /* TimeFormat.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F3B7D7E1C44ECB7A2EBEC681ACE4090 /* AzkarChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94586B16D5D2DCA4B4E22C167DD17B61 /* AzkarChapter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F791AEE35BB3276A68EDD48C35BC44E /* SQLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F04EB54A8111D289DE44844E4A57E6B3 /* SQLRequest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5301D3C1ECA5E2D47002FBE7724941FF /* AzkarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FFBDBD6E148D8CD2D3E5D40636ABE46 /* AzkarItem.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 538BFA3A72212A24728F903FD732CE4F /* GRDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7AD95BB7089C067668FE8E0C1262934 /* GRDB.framework */; }; - 54EB702C1486DC310031B3DAED1FE3DC /* SQLSelectable+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6CDDA18855D4ADEBEFF1A3AE06CC5E3 /* SQLSelectable+QueryInterface.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 55127675DE18916F1A1148A62002E454 /* DatabaseWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 518451B0E85374EA68E5B75FB38C27E1 /* DatabaseWriter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 567C4757D6C8959A805420C387798D94 /* DBHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A9AF286580ABB38F1448D6568171C6 /* DBHelper.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5B889DD74524BF47702D94225C8676BF /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35291486FD48076A204DF52CCD6A72AC /* Location.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5DDB2B240C6F6C89EBB5A129D2F6B960 /* HasManyThroughAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852D3895437736AC3C233945C2E20301 /* HasManyThroughAssociation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5EA0894094250A2D9B56630274A92DD8 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD0CA7B983012A8B03615622D294247 /* Data.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5F76D077FDBDB17308D80FBCDDD32F35 /* Pods-MuslimData_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D50A25ECF1C68729F9ECA92736E0517 /* Pods-MuslimData_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 612D5576922DA12E36C71B8D99680421 /* Pods-MuslimData_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 30678A7CEDBC6447D947E5D4EC9E1173 /* Pods-MuslimData_Tests-dummy.m */; }; - 622F287E4490422F197E00D242F18209 /* Database+Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CFB400CA7F46BD8366FC26A1A6823E7 /* Database+Schema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 65D90C1E01EF19802462954F69E983E5 /* ValueReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6127107FB86700DAE4E4C94A6B226FDF /* ValueReducer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 66F92BFF9384A67BB00CA346C5554550 /* Database+Statements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2846928F23EC085D3E5E028FFC5B1FF2 /* Database+Statements.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 676EF897E9236CB90575B3F9CFCD3120 /* DatabaseDateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04275E4CF54FAA3C2A6859DDB193D04F /* DatabaseDateComponents.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 69C357CAA8533B915C6268E88A349008 /* FTS5Pattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5F1092AFB734F6CA9EDCF3A32CA7041 /* FTS5Pattern.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6ADA4C725A1F552DE188C42ED13897F5 /* FTS5Tokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56CDF9772D8CD1E94A5E39433D191434 /* FTS5Tokenizer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6B8E4A743436EED9C9D1D5D72A0D2F27 /* Inflections+English.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BEF107E7E8091B90FAECDFC4C7A6954 /* Inflections+English.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6B8F3C1D6214E7352C7856A50EB7406B /* Inflections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4970C5782878739D9F25CEE935961DA6 /* Inflections.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6D2323C4C7DF66474D1ABCAD305F0689 /* PersistableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96925BE6CBF55EFBAD75586DB817EB24 /* PersistableRecord.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6D2993298E9964AF6D54F095E3DA46EF /* ValueObservation+Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C5FC63DA22A393F7DC2691C13091E8F /* ValueObservation+Combine.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6DE3CE29183585530907EB1C3CCC2726 /* NSString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7795BEC7ABA70F55DE00A1C340CC52 /* NSString.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 72988A6CFA36E266D4FE0AF9DEADFC50 /* Cursor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE233D66235457A95C4FDD1BC230A497 /* Cursor.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 737942B8F96BC31238E7F0B8F3609D68 /* SchedulingWatchdog.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6DD660E6576366AC16CF63F89BFD77B /* SchedulingWatchdog.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 739400B0F56D496D47483FC196D4C91A /* SQLiteDateParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A1BEECB0AD5695FC58BB42959C41DDA /* SQLiteDateParser.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 747435A2AB2CAFBAFD7651734659C6B2 /* VirtualTableModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CA41092FF01838F5755D8533720F37 /* VirtualTableModule.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 750ACAC53406F3B7C04FCD17174BA343 /* FTS3Pattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE5F32BB6F9734F44632A90954DC6F2 /* FTS3Pattern.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 79549123A16832B9B715EB4DCBE521EC /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3708554DF1666EC6C41BBEB89E5AC257 /* URL.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7D65B46A1F2441D9147FE78F07AB373F /* QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFC609C58F86B050AED73E530BC3B6AB /* QueryInterfaceRequest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7D754D61FF444A9A90C1251F315B5C29 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7FD7232797ACF3F6F7685B58BCDC00C7 /* Foundation.framework */; }; - 7D94091D2C1067867BA50E9DAF18CE17 /* SQLExpression+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AADE52C012DAEA6407BA8798B200F02 /* SQLExpression+QueryInterface.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7EFEF55B0CC98496F1408917DD408225 /* FetchableRecord+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758A56E81E436BD44A71DB48A73695EC /* FetchableRecord+Decodable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 80EFCEB2F5ED66AAB527232A517F5F81 /* ValueObservation+CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59FBE42988DD91F3D3C2B74D31996523 /* ValueObservation+CompactMap.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 81F2E0E03397CB5AE8A9FA1961C6AB67 /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62EE764DBA051C2839B7DD11850DA98C /* FTS5.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 821BAA59509043E640391CFA942C918C /* SQLLiteral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DCF7B73D6DBD322B1124B77F7C28B41 /* SQLLiteral.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 82FBE1672788EB416F7D7232748EA236 /* BelongsToAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 662BA0B191945070F192D329CA95496F /* BelongsToAssociation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 83728421B1D35408CC150F9A5366A386 /* DatabaseRegionObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DE2E8EEA85B8FB4DB536F2DDA9089D0 /* DatabaseRegionObservation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 85D8463381D9C856410C3B80AE8DD159 /* SQLCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF2ACFA1937DAE4E5205B6A924C830CB /* SQLCollection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8691CEE725ED2C7C06E086770DB7757B /* Column.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E4B190F2E830A1BB55FBA48ACEA7E86 /* Column.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 889F226413C21D59F2BFFBC2C92DB9EA /* SQLFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 291780A00DC00211D75FBDEA9B09E764 /* SQLFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8C8DDF01955D5FB72AE73979CD218F36 /* AssociationAggregate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98583347F707576BCEA189427FC47A69 /* AssociationAggregate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8F776D68D6DEFD38CCF85B4276D968E0 /* FTS3+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CD278A63004131343ECCF5C78B29392 /* FTS3+QueryInterface.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 90DF4F4E9630E63609F3CF6642505E25 /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25DF833796CBC2D0F008C6638CF48BD2 /* Record.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 91F28A0A35BA0F4F8FB3F005D7253C45 /* FTS5CustomTokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87F53F41F8B38930F8E492305ADD4866 /* FTS5CustomTokenizer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 92B69B37E5ADEA0DDCDEC06396885052 /* SQLQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5AFBABE58AAD9E968921664890D2D50 /* SQLQuery.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 933318275B26D35CB5734E128B3BB5A4 /* Row+QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35BD16BE3201E2C0A1181407D25A3EBC /* Row+QueryInterfaceRequest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 95327339DAA1511EE65E735E37DA42C5 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89F00D263328D7C901ADE57C1548021 /* Result.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9A7995D89E2503F59B83841B83A6A3A9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7FD7232797ACF3F6F7685B58BCDC00C7 /* Foundation.framework */; }; - 9D12AC35A63C05E9F0EE63EB506CEB9F /* ValueObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1756861507925251CBACC0D005FE1912 /* ValueObserver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9D661C0F8785669F6E4A88754F9C81EF /* TableRecord+QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB527B155158A83DC29C8AB471EF8300 /* TableRecord+QueryInterfaceRequest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9D8D0F9EF2B61EBF2D539080CD08FCE0 /* ValueObservation+Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC3E15AF93024917493AF2A2ED452332 /* ValueObservation+Row.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9EF00602B746DE476813B33D60E7B8B5 /* FetchableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C1864F172A3D81F9D25636ADB75ED9 /* FetchableRecord.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9F2DF35D15A048345D6F3253521B57F3 /* FetchedRecordsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F997529A98C052DA7C12591E52C94D6 /* FetchedRecordsController.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A2C07BA2D862B7CFEE16E632B97EF68C /* AzkarCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2B3F9D2BF7D6132661A531E7BB2F12 /* AzkarCategory.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A38C252839DFC6B34277E40395DA94C1 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 374B2EE56EE7DAC67CCB2C047D622957 /* Configuration.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A4F753F4A25E639F6EBBD469F1C821EF /* HasManyAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E73BE27477C2865305F88857F860D067 /* HasManyAssociation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A69D080C6DC5CCD1C8153338B1B4BEF1 /* DatabaseFunction.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE941C1A7A95F921000AFDFD91F54541 /* DatabaseFunction.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A7D645073A4902CE19144733BD3B1D6B /* MuslimData-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E1B0453AB3FD95A926B256E8D21F72D9 /* MuslimData-dummy.m */; }; - A9286B0849F46D5349C42CDD9E3FCBD8 /* GRDB.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A2F3326B33A6BC66E13954DF736BEAA /* GRDB.swift-dummy.m */; }; - A9346A4922DFB8C725C8722D99258AF8 /* DatabaseValueConvertible+ReferenceConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A115FEA22E3B697DDD8CB0CF3FCAD9 /* DatabaseValueConvertible+ReferenceConvertible.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AC842DD31D9FD9F8A80F393309AC1A2B /* NSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4B392CEDEDE8E47D3BD1ECC7EA551E /* NSNumber.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B03A35D413AA6ACB4F1BE28702E84333 /* DatabaseReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C83188D9DFD01CA9D469EB06279767D /* DatabaseReader.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B09F1124D798A0E3AFA81B0B79F80E36 /* Pool.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87A77728D7700424D943FDE619754A2 /* Pool.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B5B1E0C592A08E5665915D2BC1A0D9E8 /* DatabaseSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C8D1DE939367A8362484A58B33EB6DE /* DatabaseSnapshot.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B60E22BAD03836CB0720C853D1B19341 /* SQLAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 054167CF407C51AC6687ADEBF914CDDC /* SQLAssociation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B8244EA7A9D7EA478BC043649E3F256D /* DatabaseValueConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00DD889D9B78450041FF5AEE58E86647 /* DatabaseValueConvertible.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BA76D4525CC0A4865E2AAA90336118D8 /* SQLForeignKeyRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F27BA0AAB3F0B8F0F6FBFD49B7969EA9 /* SQLForeignKeyRequest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BD802C1DC1B139EDAB311C7709A00CB0 /* DatabaseValueConvertible+Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A48FA30EC31431A33C17FAE91902EE /* DatabaseValueConvertible+Encodable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BE5A72CE583F45FF74F5334921FF9968 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7FD7232797ACF3F6F7685B58BCDC00C7 /* Foundation.framework */; }; - C184186D7F480467C879626B3D8BF92A /* grdb_config.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E91BB21A1925C004A070AB895D6B14 /* grdb_config.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C31B69B2E5A6B91C7202FCE6A3B6A1E4 /* FTS5TokenizerDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0938A7247E2982B82482760B0AC6123F /* FTS5TokenizerDescriptor.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C4E2B1658AC3663D15AA9F2531B7BFD6 /* FetchableRecord+QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2B193D223BFC78855A3B1DE8CED395 /* FetchableRecord+QueryInterfaceRequest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C4F0D6EE223CBD552F269B36DE389B8B /* StandardLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = EABE51A24C723C856DD1DCC752712250 /* StandardLibrary.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CCA3C990B6DE174297BE934A2728C421 /* SQLSpecificExpressible+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A02DA8BFACEE9E07FBD62D157FED96B /* SQLSpecificExpressible+QueryInterface.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D030773C11115860A55CDFCE6904BF38 /* QueryInterfaceRequest+Association.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6A686C3D9502F7C4A132B40F0F72DD /* QueryInterfaceRequest+Association.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D1A2EF0386442ECD20338199E9DB8099 /* TableDefinition.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFD91E47F6DD6422D0952C8AC7623582 /* TableDefinition.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D4CA4FA4E5050BD998B823D705F3BE76 /* EncodableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = F114854873706F9F005E2BB1FD9D4C65 /* EncodableRecord.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D628E893B835D23BBAED9343E59610F9 /* SerializedDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = E375E483DE2FE415F9FEA19C9669B526 /* SerializedDatabase.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D67D1521F3C5B0C03409EBAB72604C30 /* SQLRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF2C6021F8D19343C38E11A931BD52EF /* SQLRelation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D6E75BDE3181F62E6B81499F5989808D /* ValueObservation+Count.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B9F1435B3801DADE391A4A5136738A /* ValueObservation+Count.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D6F8A02145C28A736FD8A0A8BF7EB783 /* CGFloat.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8180C67106D338B3A2A64D08774B6D9 /* CGFloat.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D828D98E5A5A48B3FDC5B486064626C6 /* SQLQueryGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3BABC3D3DC05C7FD6865D180C0A432D /* SQLQueryGenerator.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DB7E6F762C72F6CFE76C9F5313AA2DAC /* Pods-MuslimData_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C7CD5013FEE27004C7AF144E4470ADA /* Pods-MuslimData_Example-dummy.m */; }; - DC050E33E340108BA79B38A9195EAFCC /* RequestProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F2B8005D374F24A6943BAA1823F338B /* RequestProtocols.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E0E07E6C3622B91F444A2F81EECCA4A2 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7398318D874AC392EB34280CF2E1899 /* Utils.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E0E942A9C82C4FEF89A2EED08A776332 /* SQLOrdering.swift in Sources */ = {isa = PBXBuildFile; fileRef = BED95FFCB43990871E5873CFC4E1C053 /* SQLOrdering.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E3F8678E8337CD65A23D6FB611CD6D89 /* HasOneThroughAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C559E1EEE2B6FBA44944FEE8E9152DF0 /* HasOneThroughAssociation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E48C905B8E714A91CF886741081C1685 /* MuslimData-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC87C5D70057CE21632F0E08FAAF615 /* MuslimData-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E4B3988CB85F30F8B1539CDFFC777DE8 /* DateExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 061437BFF3E1C9882B07C7A0A6F60679 /* DateExtensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E746EBB44033C7F5ECE664C2A2862C8D /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 551E845F7B283CFF0E2D215372DA26A9 /* String+Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E7EC009AC91B60BFE2989DC43D5253F2 /* Association.swift in Sources */ = {isa = PBXBuildFile; fileRef = B65E8B14425B931ADE785452F8A6332B /* Association.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E8C7E279307C3DB919A3E0D67FCC114A /* DatabaseValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D89DD2484314D8A3D5ADE1D158C85756 /* DatabaseValue.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EA0BC2897FF6BE975F969C15629840CB /* Prayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85117D4C9BE4B6480B1C89933815E58 /* Prayer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ED942EC9C394EBF13A2F679EC94192C7 /* TableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69D77E14A5BB1A5D3F2E9581ECBFE4B2 /* TableRecord.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F0EF5074C899CD456B95D2F724F9067B /* Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B254E7B4418D6D38E004A377181618F /* Row.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F375CD882264F61911A3B5F7CC6E2310 /* SQLSelectable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5B13B296896404F68B81BDDB33598A /* SQLSelectable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F5885BDC210752638AFF3EAF38651DC9 /* OrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 353188DE84471B3F5021BFC563AD2E4A /* OrderedDictionary.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F5C741AE24465B84517D53DB2FE025A3 /* HasOneAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F74C3288A30C090F9DAE356D7F8CEF9 /* HasOneAssociation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F6572EE8D863DEBB27A18DC85EFF9C93 /* Pods-MuslimData_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B0646069865C88FAA7E0EDB542E2ACE1 /* Pods-MuslimData_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F70DB94ADA336509026869AAF426BEA3 /* TransactionObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6F5F76418FE68B0D427B7D08BF6A9A9 /* TransactionObserver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F73E45DCB4A2E3D31C00A4EDC76213AC /* DatabaseQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51AA10D7887DE3F10F9030EC1A2CC378 /* DatabaseQueue.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F909FEBC62AD743990EB2D7A3D594332 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0210CA581788DF572FE3501F94C639 /* Date.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F96737610B1BD0E614F153636059C2F4 /* DatabaseValueConvertible+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AC1744C057858332AA73845B0CE26D7 /* DatabaseValueConvertible+Decodable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FB5122536928EA7E76459AF5E6555CEE /* FTS5WrapperTokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7AA8C9DAF31AD7B74AE9ED132C61DA8 /* FTS5WrapperTokenizer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FB9485218620ACEFA3967734BC256E2C /* DatabaseSchemaCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CA2DEAEDF6FED5B07AE3779109C7886 /* DatabaseSchemaCache.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FDA5B665C9D4F6C74D991D68EC23A297 /* SQLExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988514746A18BB7288E7AE2B074B7196 /* SQLExpression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FF616834C38743D535B62B7886C74F07 /* Name.swift in Sources */ = {isa = PBXBuildFile; fileRef = 401A16EADAEB6FE46A4F5411CCD2A9F3 /* Name.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 017100E67A1E1800897650134CF7DE6A /* SQLiteDateParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 375F9CF0AC63BC7CF0AF8682C8BF1751 /* SQLiteDateParser.swift */; }; + 04E95DFE987EA646F95334D48378802E /* SQLRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96B1FED296230650927F5C8E53F05DAC /* SQLRelation.swift */; }; + 0532A2FFCC1D7BE3AFC1F0BD64FD4E1B /* ValueObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6250B466AAE090B46198B61F8C838EF /* ValueObserver.swift */; }; + 0546DA073F90C6118F0257337E143B5C /* TableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5951C4A078EF26CE50BDF528E6187642 /* TableRecord.swift */; }; + 05792E7B2B1875A8E33AD986310E279F /* SQLAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE42771047CDEDC16B7A058FFFC770C7 /* SQLAssociation.swift */; }; + 06EA1A8F47135B4A17ACB2D26BAE86A4 /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = E68F0140AC5E63E44C720D4D0D22D415 /* Record.swift */; }; + 08BCCE1C892468BBBA2C6439FC8873EA /* FetchedRecordsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2FCC2BA27CDFBC62682AE669A77AE1D /* FetchedRecordsController.swift */; }; + 09CC7395890EB4D61E6B7AB273AA7D83 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A94D67DD3B9C4170250E8C7A307207 /* Statement.swift */; }; + 0A7AA860E489240B08A25D41BBA74983 /* StandardLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E99DCA167FB7C8523CBE7E30C75E87 /* StandardLibrary.swift */; }; + 0AA607557F18B41C3EB5289A5C720F47 /* PersistableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E2B6DDCB8FBDC144EFF6CF15E9FAC07 /* PersistableRecord.swift */; }; + 0AC8CBE32F1F042A4591BF19CFC74D36 /* ValueObservation+Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D81A451F08F038FA755936DE3D1590A /* ValueObservation+Row.swift */; }; + 0AE33E35827196130F612F39E6AA9511 /* SQLInterpolation+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0809A71A0BA55AB90A71EC6E1734B81F /* SQLInterpolation+QueryInterface.swift */; }; + 0B13C25DAA332D348C8FE6F35B8E394D /* GRDB.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA133D8C22FCD0B36947C006B980ED0 /* GRDB.swift-dummy.m */; }; + 0BC73C42C51ED8C6436B7F51902C0FAF /* Database+Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F24513440BECF3F4711B37E2873F911 /* Database+Schema.swift */; }; + 0C07B15961DD84423806B3C72C003239 /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79461AEF0D85C606ACD69EF9B8C8939 /* Migration.swift */; }; + 0CAE2CE3EBA6D91FDE8B144BDC38EA75 /* Name.swift in Sources */ = {isa = PBXBuildFile; fileRef = A020DF84492FD75A8638CB22DFE52845 /* Name.swift */; }; + 10D31D8BB678B6EB68914A683E111988 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = 80CDA964EF94F8B5E9C39C8F8655A1B7 /* CHANGELOG.md */; }; + 10DCD7C680A125DA378E2A287928A224 /* Association.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE67BF28E65F99081D8B19B49D8BBA0A /* Association.swift */; }; + 110AD354AF4B25121D882CEE2E192377 /* ValueObservation+CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9CAACFD9D4F26952E59D5D9C90D2528 /* ValueObservation+CompactMap.swift */; }; + 11B2B59960DD92FBA263A2550875D84A /* BelongsToAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF82642D2452B676DE57B1758497FD6E /* BelongsToAssociation.swift */; }; + 1302720D764C0D78217785711574C146 /* ValueObservation+DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C148EB18C09F4877D62A86109CADBEC /* ValueObservation+DistinctUntilChanged.swift */; }; + 14B04D3B54373F036D38086FF7F64AB2 /* FetchableRecord+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCE86FA4B74834175DEDACF492416DDA /* FetchableRecord+Decodable.swift */; }; + 1A440A20CE875F61FA4923F236C5DB80 /* RequestProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F65D060B3ED7C64571E263EC2AA76419 /* RequestProtocols.swift */; }; + 1E673226452BFCE06C46A9AD51722A4B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; + 1F7E49C5DAE888114BCB1517930AB815 /* Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF1D9F025C44D7FAEEE0206D731A765 /* Row.swift */; }; + 20F21FD4EE04549EC5D901C6A3D42051 /* EncodableRecord+Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE913A6C322FB7BA4C11487C3ECB221 /* EncodableRecord+Encodable.swift */; }; + 215CD75B1818369F268C2F34C0CE1959 /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 464EAD3E4BAD6DE5D12979750026ACB4 /* URL.swift */; }; + 22CC957C16EE9373A9B4290AA4ED6AA0 /* HasManyThroughAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE8C30B4C6ACCB9F1B626D0CF6DC4D2C /* HasManyThroughAssociation.swift */; }; + 25C1F12A65651337C95CE3AA1C270FFD /* Language.swift in Sources */ = {isa = PBXBuildFile; fileRef = D860051DE87F8574AFEFF56F7C619598 /* Language.swift */; }; + 2904CD80CF6A3460802CCE57F69AF41F /* CGFloat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992079014BF8ABA32EA866CBF1AEFBDD /* CGFloat.swift */; }; + 2A48909A7DFBB93E21A01AE9FB9ADE85 /* FTS3TokenizerDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35410C80E22F178FE1666DEE71A3252 /* FTS3TokenizerDescriptor.swift */; }; + 2AD629C4A4F714BE8FB7A144738E4E5D /* SQLQueryGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FD392A87C27DC4A006672018F8EAAF /* SQLQueryGenerator.swift */; }; + 2CD0DCA547DA3B28AF55214735875060 /* DatabaseValueConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D0BFFCE7DA2A58457C26354A62B0987 /* DatabaseValueConvertible.swift */; }; + 2E4175254C6C530AAA65348527456179 /* ValueObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE91E12DE279B781B318C35432A3D8DB /* ValueObservation.swift */; }; + 31F227659934F4BCFB0042DA89989D94 /* Inflections+English.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDD77D03BF3203412EACD1B9A8B887D5 /* Inflections+English.swift */; }; + 3218FBB3E09F368DCA0233431A1B31B1 /* DatabaseQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2347D1DE9EE5CCD0DE9F7A916A8102F8 /* DatabaseQueue.swift */; }; + 3323A5E4F9C70708EB98C2EDDE17C4BF /* grdb_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 80BC3878E43FC7BC9CC5A386968117CE /* grdb_config.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 35DD8491C8257EE510292171F72B16B5 /* DBHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = A31E7F6537B28EF0C3FD098B5230A169 /* DBHelper.swift */; }; + 381D73BEC869D518610B85004A4446E5 /* DatabaseError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9810ED848A8370D28A206952D1E634FA /* DatabaseError.swift */; }; + 3BB28BF26BFDF0636B75188C9070E7AF /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B43031A46D1FB9BDF3622252D66C3CF /* Utils.swift */; }; + 3CBAD9986CBB94D7E861E6480970153C /* DatabaseReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F5ADFF5989279CA7A2083ACE8E04686 /* DatabaseReader.swift */; }; + 3CBB30C043CC794613FE17D6DD97672E /* Pods-MuslimData_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD85DBCEEE70ED57287FF3D9DEBDCDB /* Pods-MuslimData_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3DCD65358513F5390E70A7D95CF0C88E /* DatabaseSchemaCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66B8189DE409C6CE416BAA423ECCE75 /* DatabaseSchemaCache.swift */; }; + 407F2988EFEF7526F9D1334EDB7F72B6 /* TransactionObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C351E742746F64DC32068BFDBF920798 /* TransactionObserver.swift */; }; + 423E36F30B6250EB99EB4A50BCC5FEED /* EncodableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736E75FFBCE1C9C3C052ED6848ECAA3A /* EncodableRecord.swift */; }; + 45125BB96512230A2EBF036CC7A69B7E /* RowAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8FD966EA188EC1FB1DA0C5734E4B36A /* RowAdapter.swift */; }; + 46F4181A36A729B3A8C73F75CE5C0F5A /* ValueObservation+FetchableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093944E617B52AF936D889D4EA4FC246 /* ValueObservation+FetchableRecord.swift */; }; + 4AF4C9AF66D23732A42A735353F19B2F /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = A594A615D1610A6A82241572E57C4A87 /* Database.swift */; }; + 4B010272563F53C1F4A7EB56462910DD /* FetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44B93E97B50A2C3968F611666B05EE12 /* FetchRequest.swift */; }; + 4C64EBFA94BCD55E127222CFFBC04C69 /* OrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7A10B0C7660263FD83A5CD29F2E1165 /* OrderedDictionary.swift */; }; + 50212346A63C32618C9ADA10A1DF18A9 /* AzkarCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1080CF86161774FC324D019BB74E7FA /* AzkarCategory.swift */; }; + 5165B678B8A1A04D0A293E077252DAC0 /* SQLExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64162F22C59C71C0145CBCB56A60959E /* SQLExpression.swift */; }; + 51724EB13ECD41D68F70A91F1F1984F5 /* Column.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CE552E45ACF80214D40921DD03CAA67 /* Column.swift */; }; + 5428F5F7AC1DB2150C91C619A4C02431 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; + 56646D9949730F756FD5FB4A811E25F1 /* QueryInterfaceRequest+Association.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F8B2F0AC21F8A9AA0C4DAF6A289539C /* QueryInterfaceRequest+Association.swift */; }; + 5721EBF6F9407455923DCB004F263158 /* TableDefinition.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1081094773556A6A464D2CD55EAD506 /* TableDefinition.swift */; }; + 57251BACF5A417BC89DDD4E41BC0A655 /* DatabaseValueConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844CE98E42007DDFB8D4BFF8DAA2EF15 /* DatabaseValueConversion.swift */; }; + 581BE2110A4F70454962F512B5CD48D7 /* MuslimRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD51BACBD28D9EE11984C183825D66AD /* MuslimRepository.swift */; }; + 5960841EDA5BB846BE1B5C917AA533F5 /* DatabaseValueConvertible+RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E4E05505643C3270EBD487F65E68FAC /* DatabaseValueConvertible+RawRepresentable.swift */; }; + 5961CDDE4ED0F98ABAAB378D5AAFDB1D /* NSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664686B6ABA608503F83F85979F0687B /* NSNumber.swift */; }; + 5AA5595884C8650C66B5121EB80C664C /* FTS3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC1C60D10CB6A29C0181276AB532200 /* FTS3.swift */; }; + 5AD116150EB0DC2A7040D3D79A524661 /* SQLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEA27CDC4C954599103EAB46FC89D71E /* SQLRequest.swift */; }; + 5B155BAD5A7A3CB67D6BD57819071AAE /* Pods-MuslimData_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E787A815C699A533C7E83D8022D22549 /* Pods-MuslimData_Example-dummy.m */; }; + 5CABF8C1EBECB5937F2AB3EA836680C0 /* Pods-MuslimData_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B543DF39D139A8C78771B681C6ADAA2 /* Pods-MuslimData_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5EB37471793B7B00698579768F0C3CFF /* SQLOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65AA78E233337BE07809C0BCE36F7925 /* SQLOperators.swift */; }; + 6255128A9FE73C1F4E3229D3320FF0B5 /* NSString.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCCA917D100B6F5A3512DB297210C53C /* NSString.swift */; }; + 630D1F558EDEC847D73F2A33AD2BD4C9 /* ValueObservation+Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFDF28A6D90C1E561747E5F01EF8D40 /* ValueObservation+Combine.swift */; }; + 65B76004379D42F12DBC219C4A65A5F1 /* PrayerTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA68F2CB5BE572106E41C45020F9797C /* PrayerTime.swift */; }; + 672244EBC7B1A639BDA1E2C33CE8D12D /* DatabasePromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCBA8F76DA14E950E08C706D2A92E64 /* DatabasePromise.swift */; }; + 6739991E2B88A9C6B1F247A32871C77F /* ValueObservation+Count.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8558236B5D95448121116192CDF82D7C /* ValueObservation+Count.swift */; }; + 69D145D32F61AD3E10F27039A4D43230 /* TimeFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D7F3BF5B125E5D8B02C6498D4ED182 /* TimeFormat.swift */; }; + 6BD3AB4777D1498A9B626A9F02D44632 /* SQLForeignKeyRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F096D89EED3D262636E1838D0D2180 /* SQLForeignKeyRequest.swift */; }; + 6D27EC8A41CD39E29C55BA67577F49B5 /* DatabaseMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7B03B77F2F0A31ED478363C72D8A24 /* DatabaseMigrator.swift */; }; + 6DF9A91F46F052EF0A986515BBA802A6 /* NSNull.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11236E27D6499D7928B236123927E583 /* NSNull.swift */; }; + 6FF06E917D72494A3C652D7E4EA7A8F4 /* Row+QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F48E1D2E2EE31EA5F8CDF16FBF28591E /* Row+QueryInterfaceRequest.swift */; }; + 71CD4C1E65C22B207230F68612BF3BD5 /* DatabaseValueConvertible+ReferenceConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEBAE4960F59932E1A399C109A453E0C /* DatabaseValueConvertible+ReferenceConvertible.swift */; }; + 726BDAF6672123C0FC06876E00CF40BB /* PrayerAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9D64AFF2D5180626BD6EE6238EE30D /* PrayerAttribute.swift */; }; + 7534E2B56426F355DD978C6224B46FDD /* UUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983C554E80E2287925036A568A9537FB /* UUID.swift */; }; + 7ABBE42689BAF80D28D743C5F01A0C63 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */; }; + 7FB9ACE4A3141B803006A82963187FDA /* StatementColumnConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1030CDC442B65527D048702297A698A8 /* StatementColumnConvertible.swift */; }; + 8155942BCF5F48E0AF95AEFBF6ABF225 /* DatabaseSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36043B93868C7DB00D4017D9C4FA38FA /* DatabaseSnapshot.swift */; }; + 8409A7A3F0A1F44440B560BD02B7EB65 /* HasOneThroughAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39DD281AEC3E59FB3A0277BC475473C6 /* HasOneThroughAssociation.swift */; }; + 8623B0145319BCBDCB45911FC3716248 /* HasManyAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08AE18009E789149C931ECC333F2189A /* HasManyAssociation.swift */; }; + 86AD1E8D4914031B8CD8BF949863A49F /* Cursor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 740370A5EC50C2D78ED000F028CEAD26 /* Cursor.swift */; }; + 874C20F8BFB0B1F04A58DBD1273620B5 /* TableRecord+Association.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EE756FB280A4709B342CCB851AF8B87 /* TableRecord+Association.swift */; }; + 89F8459CC1490BFEFA068D5B87266C99 /* ValueReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84505976E3D76B2D94620C69841FCC56 /* ValueReducer.swift */; }; + 8BE8859153ACFE707E6DDD9FDE619BF9 /* SQLCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D30BAFCE984848BDEBF194A2899567EA /* SQLCollection.swift */; }; + 8CB07EE29755E83E64300A3CAF1720E8 /* Pods-MuslimData_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DE2B11CBBBF488B9CB4F133978648866 /* Pods-MuslimData_Tests-dummy.m */; }; + 8F47FE3A73BCFBB274500D5E81641BD8 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA31FB39C8D6B4D3E53D80D093D2F6F /* Date.swift */; }; + 91F847770D950AB558027CEF5A486872 /* QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEE88C13D61A786DFAB09EAD3D25A351 /* QueryInterfaceRequest.swift */; }; + 93E62306A467841910EE260C3FBBC7D1 /* VirtualTableModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB75F83D1AE48C88A0A85D56CF0F13B0 /* VirtualTableModule.swift */; }; + 94383EB3E69C08C18C357AB79F8C21AC /* DatabaseValueConvertible+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EED1A4504790AF7E6F5240F27DBEF61 /* DatabaseValueConvertible+Decodable.swift */; }; + 98EB7E3136AEC27D3C061073CE79FBA4 /* DatabaseDateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBCD71E190AB01AEDA957A91752CA0B0 /* DatabaseDateComponents.swift */; }; + 99A478CF77D56C7AA427BCF1D2185F01 /* FTS3Pattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56DEB559B5A5DCE1B324FB12C5E0A1FC /* FTS3Pattern.swift */; }; + 99A556F66D6F9602445A722A3C49E351 /* Pool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5422A9FBD155A4783EAB1DBC2D4413EB /* Pool.swift */; }; + 9A7C136377B26BFDDE85420E955E828F /* FetchableRecord+TableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6135EABC840E345AC834E8572D35D1B2 /* FetchableRecord+TableRecord.swift */; }; + 9ADD14F94A1622B4755FE115902B50C7 /* GRDB-4.0.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84ADB6717063112A6383A1C160F86C26 /* GRDB-4.0.swift */; }; + 9CF893777F2FE720B6865DFD347717D9 /* DatabaseFunction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1D40C1A883759045B7FB69D2D1B0DB /* DatabaseFunction.swift */; }; + 9F2C324F0C115BDAF6770E75E4F6F05A /* FetchableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4468899EAFE6991759EA8A46BB51BA91 /* FetchableRecord.swift */; }; + 9FD87DA03BEEDB346222F6BCDAEA3656 /* AssociationAggregate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1E7ED6955D27B6C52BCB568C182949 /* AssociationAggregate.swift */; }; + A47F311157375156772F34DEC79C7AC1 /* SQLQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6617214BBCD73E8681833F4DEB505C18 /* SQLQuery.swift */; }; + A5B00A31722CFF959CAFA83CE1772681 /* StatementAuthorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76A6406A1762BAFF98F6CD7FF7EE7FF0 /* StatementAuthorizer.swift */; }; + A5B7DC70DB74B8D550946CEF1518A466 /* TableRecord+QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59F05D12626E41B596F1F220097E173A /* TableRecord+QueryInterfaceRequest.swift */; }; + A602A8049ECE9D77A9489B39FCDC8BFE /* SQLSpecificExpressible+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B15106707D4C78899C33C2C9A781E277 /* SQLSpecificExpressible+QueryInterface.swift */; }; + A8624D7D3076BFB54DC2B8542297F2C1 /* ReadWriteBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6119B7DCF1679F35ADE30E741827C78 /* ReadWriteBox.swift */; }; + A89CD38444529575CDAA3B043B78F82A /* CHANGELOG.md in Sources */ = {isa = PBXBuildFile; fileRef = 80CDA964EF94F8B5E9C39C8F8655A1B7 /* CHANGELOG.md */; }; + ACD80B5FE4A0FBB9BCE79DB7280B74DB /* SQLInterpolation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A7DEB36B2A2D60D21564BC296A4D3B /* SQLInterpolation.swift */; }; + ACFE9DAF630D0B6ED67057C9A6CDA01B /* MuslimData-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 29EF83B1D17B2AA944D71FF61892E3D7 /* MuslimData-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD88AF5B3A65CD3423071EB46BB4C78C /* ValueObservation+DatabaseValueConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF327E118920934B9AD7EA46DCA48965 /* ValueObservation+DatabaseValueConvertible.swift */; }; + AEE7AED548822B2FA7D0B699FFA56DCD /* Database+Statements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F67789688FB3673E6008AEA51847BB9 /* Database+Statements.swift */; }; + AFDDB5176E907707C03E3B8BAB9A7DC8 /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4181F7638B42161C4FE446BDEA1ADC5 /* FTS5.swift */; }; + B119448E22AD6D03A5F0220D8880030D /* Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1155FBAC7ADB560A7D21F0F646E77F1F /* Repository.swift */; }; + B2B755533EA09F2E93A1D94B0E2F500C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; + B3666972AADD12C032E180312A6E0054 /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A9CD20B785EC16445BB4CCD8A65A97 /* Location.swift */; }; + B450FE8985D14C5C157C9BAFEEBE1C7A /* NSData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F07F62F624F83DF0B8480FCEEFBADA32 /* NSData.swift */; }; + B68C64C2CFF1682DC6831206D363F289 /* ValueObservation+Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = A151C2196CAB62A5C9D0509FFF5D3BFC /* ValueObservation+Map.swift */; }; + B75847CFF2033ED02EAC81E896BDE863 /* Inflections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A328852E5AC5CD0A7F532F806C27C46 /* Inflections.swift */; }; + B93CF9C18D6039FBF653B5BA6821251A /* SQLFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3586E5B7A2694DEC693A9A2D081D420A /* SQLFunctions.swift */; }; + BA5F97861B382AC775297D308D2F5D9E /* SQLLiteral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F72F39252476A5889AC2504BE74ED92 /* SQLLiteral.swift */; }; + BF7934391FCB3BE40676060A7A8E3204 /* DatabaseRegionObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BA38261B622111B36F880E9829A137 /* DatabaseRegionObservation.swift */; }; + C2C7373F605AF06723C0E1AD25225035 /* SchedulingWatchdog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35B3000913B306C6B9EA60E706939697 /* SchedulingWatchdog.swift */; }; + C44C3EB46AB4B908279430092D61BB89 /* muslim_db_v2.0.0.db in Sources */ = {isa = PBXBuildFile; fileRef = 9E58180EF7E8F6358C3395350061BE44 /* muslim_db_v2.0.0.db */; }; + C5688D950388FE11B862E50DBE273A2A /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9260AA5117FA49534554748ACD1E7BC /* FTS4.swift */; }; + C592F719FE708288EA8E883E1977C01B /* DatabaseRegion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56FEEB1D0A0093852C8360424DE7C77C /* DatabaseRegion.swift */; }; + C695CAEBD933886E0EFFF9CC21FA4E29 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DD1E81E01020BE507304429A36F9976 /* Configuration.swift */; }; + C6CF68FE5F54A33B5CDF53A403801DBE /* FTS5Tokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C286D53E1D7D0D96BD4C534CFEB86E5E /* FTS5Tokenizer.swift */; }; + C7BD8290465A335982C2B2817C54F4A6 /* FTS5Pattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = E496549682A5A201323B61D591167A4A /* FTS5Pattern.swift */; }; + C91922F852F3CF82A64332CC1C9FC1E8 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E93A5697877EDDADF2B97223FF6260 /* Result.swift */; }; + CA924ACD1926D78E1E51BE4651500130 /* DatabaseValueConvertible+Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60A9D3FA5C081F82DB4B0B9178F7405 /* DatabaseValueConvertible+Encodable.swift */; }; + CBBB7FA02EAE0C5960DDA6BA3240581F /* AzkarChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D6A8BE5B76B247298A79BFF89DF6D29 /* AzkarChapter.swift */; }; + CC174B9845F2BE188E6D0510D8C01FCB /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83C9A0047B7665B321CE637EBB71CB5 /* Data.swift */; }; + CCAE93D8B6E2F417F4A37E519B4BD567 /* ValueObservation+MapReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D864FACE1073789EB5028B18AF3981 /* ValueObservation+MapReducer.swift */; }; + CD838E8C8C55E9EC4ADF60FD9F3F50B6 /* AzkarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6AD0B87216E32B86C7F4855A5F6BDE1 /* AzkarItem.swift */; }; + D12E8348DB93B661BE01F3B989BDBC82 /* SQLSelectable+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5D05CF1C40BFDA3E4AF4AA9FA1AB0B /* SQLSelectable+QueryInterface.swift */; }; + D4C2A4492A414CE181FDD2825038A37C /* Prayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D3E0CD6709358AFF08D1535414B5CC6 /* Prayer.swift */; }; + D5798123039B4E95BA8E99EB23BA5AA2 /* MuslimData-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7506C8792FBFB2B07AD8B85B5C3ADD /* MuslimData-dummy.m */; }; + D6B71CA98BEF138A6C29511B9B770119 /* FTS5+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 612B94F9D0155E187C8B3EC4978453CC /* FTS5+QueryInterface.swift */; }; + D91F36DCE86FCA2D5CBCA65C7717910D /* GRDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 13088891A66C735364301AC000712CE0 /* GRDB.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBF49477A941C15CB0F2E2B48361ECB8 /* DatabasePool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798DB5BE9EB09CBDF299C90C481A9110 /* DatabasePool.swift */; }; + DC61B7FFFC90E3EF20E3235089040DB2 /* SQLCollatedExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E063D67D1999B9CF83B528F48C749A /* SQLCollatedExpression.swift */; }; + DD32D7F782E4361D4C89454C0C32A5F2 /* SQLGenerationContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44E2482E80E8ABCEB62ADF9795702D10 /* SQLGenerationContext.swift */; }; + DE122D9868C51A9D5B987AA3B77FFEE9 /* muslim_db_v2.0.0.db in Resources */ = {isa = PBXBuildFile; fileRef = 9E58180EF7E8F6358C3395350061BE44 /* muslim_db_v2.0.0.db */; }; + DE9E44E1B0A168154335C2BA7E916D05 /* FTS3+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D6C2C95FD0E1A287EA068E42E4A2B2 /* FTS3+QueryInterface.swift */; }; + E0B5CEB15E69B7AB763FBF76A835B897 /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6EF5186786DEB317F4E8700B553D53 /* String+Extensions.swift */; }; + E23AB586690BA3D53DFE9B12F7275F95 /* DatabaseValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340D6C9CF4EA28E78B5B7EC4BAE876F8 /* DatabaseValue.swift */; }; + E4A9CEF4D097E1B33730AC0B34E5B8AB /* FTS5CustomTokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1428D60F918864DEF88EB111C77C2519 /* FTS5CustomTokenizer.swift */; }; + E54D49BF5E856AC43F268EE0A7898FA4 /* HasOneAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E4B908C46D8AC8246EC4E00DC32EE6E /* HasOneAssociation.swift */; }; + E67DA81B6D35EC6B20CFF3CB27274710 /* SQLExpressible.swift in Sources */ = {isa = PBXBuildFile; fileRef = D142D2DDF4BFBB74839269DB42B8692C /* SQLExpressible.swift */; }; + E7EA2E83C2DD69633C8648EFACAD76A9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; + E8A7551BF6EE1C5D0012AA37A5513213 /* DatabaseWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E97570A73E421384DAD384510A90FFF /* DatabaseWriter.swift */; }; + EA04FA1F59DAE1B863A95D8475DEEBA5 /* SQLOrdering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D2F8E884941CCCB42A30760A3AEBB42 /* SQLOrdering.swift */; }; + EDB43BAEF8986890368B148A379B8633 /* FetchableRecord+QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1F96A960AFA0054EB6D2173ADB6993 /* FetchableRecord+QueryInterfaceRequest.swift */; }; + F261D22CFB15575AF31D11DF7986F1B5 /* FTS5WrapperTokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5376CE97B980678A6B2CE4CDC1F3E1E7 /* FTS5WrapperTokenizer.swift */; }; + F6C0E64D046D5A28070C7272E15D8482 /* GRDB-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = 524CC7BFB573E8D444A899F3AA99FFC6 /* GRDB-Bridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7030CD3F4A0A195D82A93FA399DC288 /* DateExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FB68FAD43CF8429267EF33197BF6A4 /* DateExtensions.swift */; }; + F9110500A74A4EDDE31D10A22F4C306A /* SQLSelectable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B635DCB1E6D60260828C27E3C1366FD2 /* SQLSelectable.swift */; }; + FBFB19ABAB8EC550D058E3B191B6941E /* DatabaseCollation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1821A1110F31EEDD916328777B65CA /* DatabaseCollation.swift */; }; + FD9328E1627DF89B75AC709CE2007134 /* SerializedDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0271944F72BFBCF03BEBC7F9625E332B /* SerializedDatabase.swift */; }; + FDCE9620C8A492D3DB2613DDB2A878E1 /* FTS5TokenizerDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 079E0846208ED8C64AE0141E80D5AF30 /* FTS5TokenizerDescriptor.swift */; }; + FE7333505F03EE420F81555B650AC12B /* SQLExpression+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A37AB04CE371562BF8E71E72FF7DCC2 /* SQLExpression+QueryInterface.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1ED7D8A0A4218E980A192470A3FF01C8 /* PBXContainerItemProxy */ = { + 292733CD321409D2EC9B370D7E32087E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = FB81F088D9E90653987CAA036FACFD28; - remoteInfo = GRDB.swift; + remoteGlobalIDString = 35E05502EA95CD6D695F7745FBADAD13; + remoteInfo = MuslimData; }; - 3DE8392EBF9E858F78A3D0BC375D811B /* PBXContainerItemProxy */ = { + 952DED73CD3493BCE5970144033D1887 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = FB81F088D9E90653987CAA036FACFD28; + remoteGlobalIDString = 0A86C228CFCBC35A1FD284274ED0930F; remoteInfo = GRDB.swift; }; - 4017E5378AFE304FFFFB252C0F0305F9 /* PBXContainerItemProxy */ = { + B98FCE2CA12598ACDA61883D0FD21409 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B618582B07803EA12417D625ABB2CD21; - remoteInfo = MuslimData; + remoteGlobalIDString = 0A86C228CFCBC35A1FD284274ED0930F; + remoteInfo = GRDB.swift; }; - 4F03C233FDF9A651A45430E56D389C40 /* PBXContainerItemProxy */ = { + DB64360DDEC60608B4D08463E07A8F9B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 031BFC8F009B7941500B46B8E0782A88; + remoteGlobalIDString = 87B1B784982A5C7E813417C4403B90BB; remoteInfo = "Pods-MuslimData_Example"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00DD889D9B78450041FF5AEE58E86647 /* DatabaseValueConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseValueConvertible.swift; path = GRDB/Core/DatabaseValueConvertible.swift; sourceTree = ""; }; - 04275E4CF54FAA3C2A6859DDB193D04F /* DatabaseDateComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseDateComponents.swift; path = GRDB/Core/Support/Foundation/DatabaseDateComponents.swift; sourceTree = ""; }; - 054167CF407C51AC6687ADEBF914CDDC /* SQLAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLAssociation.swift; path = GRDB/QueryInterface/SQL/SQLAssociation.swift; sourceTree = ""; }; - 061437BFF3E1C9882B07C7A0A6F60679 /* DateExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DateExtensions.swift; sourceTree = ""; }; - 0938A7247E2982B82482760B0AC6123F /* FTS5TokenizerDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5TokenizerDescriptor.swift; path = GRDB/FTS/FTS5TokenizerDescriptor.swift; sourceTree = ""; }; - 0A1BEECB0AD5695FC58BB42959C41DDA /* SQLiteDateParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLiteDateParser.swift; path = GRDB/Core/Support/Foundation/SQLiteDateParser.swift; sourceTree = ""; }; - 0C83188D9DFD01CA9D469EB06279767D /* DatabaseReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseReader.swift; path = GRDB/Core/DatabaseReader.swift; sourceTree = ""; }; - 0D50A25ECF1C68729F9ECA92736E0517 /* Pods-MuslimData_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MuslimData_Tests-umbrella.h"; sourceTree = ""; }; - 0F3F554C1B5DCD4EF089F605813FC5D3 /* FetchRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchRequest.swift; path = GRDB/Core/FetchRequest.swift; sourceTree = ""; }; - 112165439418B44C4BDCFB45D22CBE34 /* ValueObservation+FetchableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+FetchableRecord.swift"; path = "GRDB/ValueObservation/ValueObservation+FetchableRecord.swift"; sourceTree = ""; }; - 14A7257E831A9D87198C29B792FDF9B6 /* MuslimData.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MuslimData.xcconfig; sourceTree = ""; }; - 1585FD241A9AC0D79B3E084E1A8B7B77 /* DatabaseValueConvertible+RawRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+RawRepresentable.swift"; path = "GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+RawRepresentable.swift"; sourceTree = ""; }; - 1756861507925251CBACC0D005FE1912 /* ValueObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueObserver.swift; path = GRDB/ValueObservation/ValueObserver.swift; sourceTree = ""; }; - 1C77E730F441F579931C11BA8F749FDF /* DatabasePromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabasePromise.swift; path = GRDB/QueryInterface/SQL/DatabasePromise.swift; sourceTree = ""; }; - 1DE3C6FBEF1E948A8881FAC46607E0CE /* TableRecord+Association.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TableRecord+Association.swift"; path = "GRDB/QueryInterface/TableRecord+Association.swift"; sourceTree = ""; }; - 1E4B392CEDEDE8E47D3BD1ECC7EA551E /* NSNumber.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSNumber.swift; path = GRDB/Core/Support/Foundation/NSNumber.swift; sourceTree = ""; }; - 2058FFAD3AA3F5F1DA38DAB365079462 /* FetchableRecord+TableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FetchableRecord+TableRecord.swift"; path = "GRDB/Record/FetchableRecord+TableRecord.swift"; sourceTree = ""; }; - 208FD7047BA6E0490F50904E4F73EC84 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - 22BAAE27BDCE90B8C1F6B4992424D9C6 /* DatabaseCollation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseCollation.swift; path = GRDB/Core/DatabaseCollation.swift; sourceTree = ""; }; - 24A48FA30EC31431A33C17FAE91902EE /* DatabaseValueConvertible+Encodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+Encodable.swift"; path = "GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Encodable.swift"; sourceTree = ""; }; - 25525D31CDCACA2AEE38C6A90DEDD714 /* Database.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Database.swift; path = GRDB/Core/Database.swift; sourceTree = ""; }; - 25DF833796CBC2D0F008C6638CF48BD2 /* Record.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Record.swift; path = GRDB/Record/Record.swift; sourceTree = ""; }; - 2846928F23EC085D3E5E028FFC5B1FF2 /* Database+Statements.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Database+Statements.swift"; path = "GRDB/Core/Database+Statements.swift"; sourceTree = ""; }; - 291780A00DC00211D75FBDEA9B09E764 /* SQLFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLFunctions.swift; path = GRDB/QueryInterface/SQL/SQLFunctions.swift; sourceTree = ""; }; - 2BC5D21AC275156EB1E637182C566346 /* MuslimData.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MuslimData.modulemap; sourceTree = ""; }; - 2C8D1DE939367A8362484A58B33EB6DE /* DatabaseSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseSnapshot.swift; path = GRDB/Core/DatabaseSnapshot.swift; sourceTree = ""; }; - 2D0F97A42B813E8B003D46C5 /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = CHANGELOG.md; path = MuslimData/Assets/CHANGELOG.md; sourceTree = ""; }; - 2D6CD44629CC5BF2009B527C /* muslim_db_v2.0.0.db */ = {isa = PBXFileReference; lastKnownFileType = file; name = muslim_db_v2.0.0.db; path = MuslimData/Assets/muslim_db_v2.0.0.db; sourceTree = ""; }; - 2DC6A83C7FE2580E3F2A1AFBB2B117E6 /* PrayerAttribute.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrayerAttribute.swift; sourceTree = ""; }; - 2DE6E95B2BA8D8010082A3CE /* MuslimRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MuslimRepository.swift; sourceTree = ""; }; - 2DFE19672BAB81E900665C6B /* Repository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Repository.swift; sourceTree = ""; }; - 2E88CF46329DBA47B53B98F005E11EE3 /* MuslimData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MuslimData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2F75C56ED8BD1951FC8172C608B20303 /* Pods-MuslimData_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Example-acknowledgements.plist"; sourceTree = ""; }; - 2FFBDBD6E148D8CD2D3E5D40636ABE46 /* AzkarItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AzkarItem.swift; sourceTree = ""; }; - 30678A7CEDBC6447D947E5D4EC9E1173 /* Pods-MuslimData_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MuslimData_Tests-dummy.m"; sourceTree = ""; }; - 3087A8A5BD99215CD4DB3460F8AFEA73 /* ReadWriteBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReadWriteBox.swift; path = GRDB/Utils/ReadWriteBox.swift; sourceTree = ""; }; - 32170F8226285700A097463A2C81B28E /* RowAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowAdapter.swift; path = GRDB/Core/RowAdapter.swift; sourceTree = ""; }; - 33E1BA72AB090848D099FDE15FFCD602 /* SQLGenerationContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLGenerationContext.swift; path = GRDB/QueryInterface/SQLGeneration/SQLGenerationContext.swift; sourceTree = ""; }; - 35291486FD48076A204DF52CCD6A72AC /* Location.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Location.swift; sourceTree = ""; }; - 353188DE84471B3F5021BFC563AD2E4A /* OrderedDictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OrderedDictionary.swift; path = GRDB/Utils/OrderedDictionary.swift; sourceTree = ""; }; - 35BD16BE3201E2C0A1181407D25A3EBC /* Row+QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Row+QueryInterfaceRequest.swift"; path = "GRDB/QueryInterface/Row+QueryInterfaceRequest.swift"; sourceTree = ""; }; - 3708554DF1666EC6C41BBEB89E5AC257 /* URL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URL.swift; path = GRDB/Core/Support/Foundation/URL.swift; sourceTree = ""; }; - 374B2EE56EE7DAC67CCB2C047D622957 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = GRDB/Core/Configuration.swift; sourceTree = ""; }; - 37C9ECD60B68221B76E253AA39B4B52E /* FTS3TokenizerDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS3TokenizerDescriptor.swift; path = GRDB/FTS/FTS3TokenizerDescriptor.swift; sourceTree = ""; }; - 3BEF107E7E8091B90FAECDFC4C7A6954 /* Inflections+English.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Inflections+English.swift"; path = "GRDB/Utils/Inflections+English.swift"; sourceTree = ""; }; - 3CA2DEAEDF6FED5B07AE3779109C7886 /* DatabaseSchemaCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseSchemaCache.swift; path = GRDB/Core/DatabaseSchemaCache.swift; sourceTree = ""; }; - 3FF0BA87045E3E9FABE15B6BF3A8D5A2 /* FTS3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS3.swift; path = GRDB/FTS/FTS3.swift; sourceTree = ""; }; - 401A16EADAEB6FE46A4F5411CCD2A9F3 /* Name.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Name.swift; sourceTree = ""; }; - 45C1864F172A3D81F9D25636ADB75ED9 /* FetchableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchableRecord.swift; path = GRDB/Record/FetchableRecord.swift; sourceTree = ""; }; - 45D4D0D01A44732C4E7F2C500AA45B55 /* GRDB.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GRDB.swift-prefix.pch"; sourceTree = ""; }; - 49192A23515A2FDF0209EBF9BA4DAB65 /* DatabaseError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseError.swift; path = GRDB/Core/DatabaseError.swift; sourceTree = ""; }; - 4970C5782878739D9F25CEE935961DA6 /* Inflections.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Inflections.swift; path = GRDB/Utils/Inflections.swift; sourceTree = ""; }; - 4C709D1799799F5A0E43E043E023415B /* UUID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UUID.swift; path = GRDB/Core/Support/Foundation/UUID.swift; sourceTree = ""; }; - 4E8F40C80B8B85C4393ED5F43C8ED116 /* ValueObservation+DatabaseValueConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+DatabaseValueConvertible.swift"; path = "GRDB/ValueObservation/ValueObservation+DatabaseValueConvertible.swift"; sourceTree = ""; }; - 4EB99538C9E87FA9C44300FFCA0B04EE /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = GRDB/Core/Statement.swift; sourceTree = ""; }; - 518451B0E85374EA68E5B75FB38C27E1 /* DatabaseWriter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseWriter.swift; path = GRDB/Core/DatabaseWriter.swift; sourceTree = ""; }; - 5198A73019ED73FEB081FFEF93349F97 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 51AA10D7887DE3F10F9030EC1A2CC378 /* DatabaseQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseQueue.swift; path = GRDB/Core/DatabaseQueue.swift; sourceTree = ""; }; - 551E845F7B283CFF0E2D215372DA26A9 /* String+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = ""; }; - 56CDF9772D8CD1E94A5E39433D191434 /* FTS5Tokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5Tokenizer.swift; path = GRDB/FTS/FTS5Tokenizer.swift; sourceTree = ""; }; - 57083C76476CFFD9C6281EB0FA5CF562 /* GRDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GRDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5779BFB97BB16F7C257E39CD28630594 /* FTS5+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FTS5+QueryInterface.swift"; path = "GRDB/QueryInterface/FTS5+QueryInterface.swift"; sourceTree = ""; }; - 5880470B1529D3998D951354FE8AAA99 /* SQLInterpolation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLInterpolation.swift; path = GRDB/Core/SQLInterpolation.swift; sourceTree = ""; }; - 58B9F1435B3801DADE391A4A5136738A /* ValueObservation+Count.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Count.swift"; path = "GRDB/ValueObservation/ValueObservation+Count.swift"; sourceTree = ""; }; - 59FBE42988DD91F3D3C2B74D31996523 /* ValueObservation+CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+CompactMap.swift"; path = "GRDB/ValueObservation/ValueObservation+CompactMap.swift"; sourceTree = ""; }; - 5A02DA8BFACEE9E07FBD62D157FED96B /* SQLSpecificExpressible+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLSpecificExpressible+QueryInterface.swift"; path = "GRDB/QueryInterface/SQL/SQLSpecificExpressible+QueryInterface.swift"; sourceTree = ""; }; - 5A2F3326B33A6BC66E13954DF736BEAA /* GRDB.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GRDB.swift-dummy.m"; sourceTree = ""; }; - 5E166D7E44FE057A6E248D6B423B0C81 /* DatabaseMigrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseMigrator.swift; path = GRDB/Migration/DatabaseMigrator.swift; sourceTree = ""; }; - 5F5B13B296896404F68B81BDDB33598A /* SQLSelectable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLSelectable.swift; path = GRDB/QueryInterface/SQL/SQLSelectable.swift; sourceTree = ""; }; - 5F997529A98C052DA7C12591E52C94D6 /* FetchedRecordsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchedRecordsController.swift; path = GRDB/Record/FetchedRecordsController.swift; sourceTree = ""; }; - 6127107FB86700DAE4E4C94A6B226FDF /* ValueReducer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueReducer.swift; path = GRDB/ValueObservation/ValueReducer.swift; sourceTree = ""; }; - 61F8ACBAFE985B333B35C4976084CBA2 /* Pods-MuslimData_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MuslimData_Tests.modulemap"; sourceTree = ""; }; - 62EE764DBA051C2839B7DD11850DA98C /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = GRDB/FTS/FTS5.swift; sourceTree = ""; }; - 6368FFE5512AD8AC9D36EB8427AFA109 /* PrayerTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrayerTime.swift; sourceTree = ""; }; - 65F554C03188A6F204B2036E5CF4B82D /* TimeFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TimeFormat.swift; sourceTree = ""; }; - 6627A4FEECAC11B54281F6CF5A53278A /* Pods-MuslimData_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MuslimData_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 662BA0B191945070F192D329CA95496F /* BelongsToAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BelongsToAssociation.swift; path = GRDB/QueryInterface/Request/Association/BelongsToAssociation.swift; sourceTree = ""; }; - 69D77E14A5BB1A5D3F2E9581ECBFE4B2 /* TableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableRecord.swift; path = GRDB/Record/TableRecord.swift; sourceTree = ""; }; - 6A0210CA581788DF572FE3501F94C639 /* Date.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Date.swift; path = GRDB/Core/Support/Foundation/Date.swift; sourceTree = ""; }; - 6A6A686C3D9502F7C4A132B40F0F72DD /* QueryInterfaceRequest+Association.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "QueryInterfaceRequest+Association.swift"; path = "GRDB/QueryInterface/Request/QueryInterfaceRequest+Association.swift"; sourceTree = ""; }; - 6AADE52C012DAEA6407BA8798B200F02 /* SQLExpression+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLExpression+QueryInterface.swift"; path = "GRDB/QueryInterface/SQL/SQLExpression+QueryInterface.swift"; sourceTree = ""; }; - 6C7CD5013FEE27004C7AF144E4470ADA /* Pods-MuslimData_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MuslimData_Example-dummy.m"; sourceTree = ""; }; - 6DE2E8EEA85B8FB4DB536F2DDA9089D0 /* DatabaseRegionObservation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseRegionObservation.swift; path = GRDB/Core/DatabaseRegionObservation.swift; sourceTree = ""; }; - 6E4B190F2E830A1BB55FBA48ACEA7E86 /* Column.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Column.swift; path = GRDB/QueryInterface/SQL/Column.swift; sourceTree = ""; }; - 6F74C3288A30C090F9DAE356D7F8CEF9 /* HasOneAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasOneAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasOneAssociation.swift; sourceTree = ""; }; - 7093F7382D260704506C5464AFBC16F5 /* SQLExpressible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLExpressible.swift; path = GRDB/QueryInterface/SQL/SQLExpressible.swift; sourceTree = ""; }; - 720E3E47CB7DDE45FA7550A02D097ACD /* MuslimData.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = MuslimData.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 730FF805483A83B2584256EEDC5D2639 /* Language.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Language.swift; sourceTree = ""; }; - 743A1901BFD326063BEDE3DD34614586 /* Pods-MuslimData_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Tests-acknowledgements.plist"; sourceTree = ""; }; - 74E7C387B223D2421080A1FB6A9C4272 /* Pods-MuslimData_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Example.release.xcconfig"; sourceTree = ""; }; - 758A56E81E436BD44A71DB48A73695EC /* FetchableRecord+Decodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FetchableRecord+Decodable.swift"; path = "GRDB/Record/FetchableRecord+Decodable.swift"; sourceTree = ""; }; - 7B254E7B4418D6D38E004A377181618F /* Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Row.swift; path = GRDB/Core/Row.swift; sourceTree = ""; }; - 7DCF7B73D6DBD322B1124B77F7C28B41 /* SQLLiteral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLLiteral.swift; path = GRDB/Core/SQLLiteral.swift; sourceTree = ""; }; - 7E7795BEC7ABA70F55DE00A1C340CC52 /* NSString.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSString.swift; path = GRDB/Core/Support/Foundation/NSString.swift; sourceTree = ""; }; - 7FD7232797ACF3F6F7685B58BCDC00C7 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 7FFD2B745CCCE37869DFC4E8FA83908E /* GRDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GRDB.h; path = Support/GRDB.h; sourceTree = ""; }; - 852D3895437736AC3C233945C2E20301 /* HasManyThroughAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasManyThroughAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasManyThroughAssociation.swift; sourceTree = ""; }; - 87F53F41F8B38930F8E492305ADD4866 /* FTS5CustomTokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5CustomTokenizer.swift; path = GRDB/FTS/FTS5CustomTokenizer.swift; sourceTree = ""; }; - 8C5FC63DA22A393F7DC2691C13091E8F /* ValueObservation+Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Combine.swift"; path = "GRDB/ValueObservation/ValueObservation+Combine.swift"; sourceTree = ""; }; - 8CD278A63004131343ECCF5C78B29392 /* FTS3+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FTS3+QueryInterface.swift"; path = "GRDB/QueryInterface/FTS3+QueryInterface.swift"; sourceTree = ""; }; - 8CFB400CA7F46BD8366FC26A1A6823E7 /* Database+Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Database+Schema.swift"; path = "GRDB/Core/Database+Schema.swift"; sourceTree = ""; }; - 8E9C257C00F610EA08A4E186851F37D0 /* ValueObservation+MapReducer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+MapReducer.swift"; path = "GRDB/ValueObservation/ValueObservation+MapReducer.swift"; sourceTree = ""; }; - 8F2B8005D374F24A6943BAA1823F338B /* RequestProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestProtocols.swift; path = GRDB/QueryInterface/Request/RequestProtocols.swift; sourceTree = ""; }; - 92CAEAC5CC5B2720DC623C44C895C435 /* EncodableRecord+Encodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EncodableRecord+Encodable.swift"; path = "GRDB/Record/EncodableRecord+Encodable.swift"; sourceTree = ""; }; - 94586B16D5D2DCA4B4E22C167DD17B61 /* AzkarChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AzkarChapter.swift; sourceTree = ""; }; - 948C2F723403EE0BBB55F1A5930F0722 /* MuslimData-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MuslimData-Info.plist"; sourceTree = ""; }; - 94CE31B27E7F34691556AD03AFBB63F5 /* ValueObservation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueObservation.swift; path = GRDB/ValueObservation/ValueObservation.swift; sourceTree = ""; }; - 96925BE6CBF55EFBAD75586DB817EB24 /* PersistableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PersistableRecord.swift; path = GRDB/Record/PersistableRecord.swift; sourceTree = ""; }; - 9768AEB6008CAEF84324EC4C8938989B /* ValueObservation+Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Map.swift"; path = "GRDB/ValueObservation/ValueObservation+Map.swift"; sourceTree = ""; }; - 98583347F707576BCEA189427FC47A69 /* AssociationAggregate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssociationAggregate.swift; path = GRDB/QueryInterface/Request/Association/AssociationAggregate.swift; sourceTree = ""; }; - 988514746A18BB7288E7AE2B074B7196 /* SQLExpression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLExpression.swift; path = GRDB/QueryInterface/SQL/SQLExpression.swift; sourceTree = ""; }; - 9A0D52E8D92DD8E648D19B837936563A /* Pods_MuslimData_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MuslimData_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9AC1744C057858332AA73845B0CE26D7 /* DatabaseValueConvertible+Decodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+Decodable.swift"; path = "GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Decodable.swift"; sourceTree = ""; }; - 9B99EBD21496FBA605E3A375E86ED829 /* DatabaseValueConversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseValueConversion.swift; path = GRDB/Core/DatabaseValueConversion.swift; sourceTree = ""; }; - 9C3DE7F469BC348F7C1DDC5196499B58 /* GRDB-Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GRDB-Bridging.h"; path = "Support/GRDB-Bridging.h"; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9F05530485A897CD1D0A0A27D17A90BE /* Pods-MuslimData_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Tests-Info.plist"; sourceTree = ""; }; - A49D0B537A24E7B6779BDF2FF4BF1376 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - A83D32E01380A9B4A0B3817B6B914A51 /* StatementAuthorizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StatementAuthorizer.swift; path = GRDB/Core/StatementAuthorizer.swift; sourceTree = ""; }; - A8CA41092FF01838F5755D8533720F37 /* VirtualTableModule.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTableModule.swift; path = GRDB/QueryInterface/Schema/VirtualTableModule.swift; sourceTree = ""; }; - AA5BDCC7B5AB732EC9F8A60A48C1D510 /* SQLInterpolation+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLInterpolation+QueryInterface.swift"; path = "GRDB/QueryInterface/SQLInterpolation+QueryInterface.swift"; sourceTree = ""; }; - AB527B155158A83DC29C8AB471EF8300 /* TableRecord+QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TableRecord+QueryInterfaceRequest.swift"; path = "GRDB/QueryInterface/TableRecord+QueryInterfaceRequest.swift"; sourceTree = ""; }; - AD435788979CC448129314A6071C6725 /* Pods-MuslimData_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Example-Info.plist"; sourceTree = ""; }; - AF2C6021F8D19343C38E11A931BD52EF /* SQLRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLRelation.swift; path = GRDB/QueryInterface/SQL/SQLRelation.swift; sourceTree = ""; }; - AFC609C58F86B050AED73E530BC3B6AB /* QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QueryInterfaceRequest.swift; path = GRDB/QueryInterface/Request/QueryInterfaceRequest.swift; sourceTree = ""; }; - B053232FB4BC0D06EA67CAF95D29114D /* Pods-MuslimData_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Example.debug.xcconfig"; sourceTree = ""; }; - B0646069865C88FAA7E0EDB542E2ACE1 /* Pods-MuslimData_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MuslimData_Example-umbrella.h"; sourceTree = ""; }; - B10666A74448608EAA8F42120078B6D5 /* Pods-MuslimData_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MuslimData_Example-acknowledgements.markdown"; sourceTree = ""; }; - B2D8132A3643601639C3E59717516CA9 /* DatabasePool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabasePool.swift; path = GRDB/Core/DatabasePool.swift; sourceTree = ""; }; - B566BFB5B270273A425E6317B162D24F /* SQLOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLOperators.swift; path = GRDB/QueryInterface/SQL/SQLOperators.swift; sourceTree = ""; }; - B5AFBABE58AAD9E968921664890D2D50 /* SQLQuery.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLQuery.swift; path = GRDB/QueryInterface/SQL/SQLQuery.swift; sourceTree = ""; }; - B65E8B14425B931ADE785452F8A6332B /* Association.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Association.swift; path = GRDB/QueryInterface/Request/Association/Association.swift; sourceTree = ""; }; - B6DD660E6576366AC16CF63F89BFD77B /* SchedulingWatchdog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SchedulingWatchdog.swift; path = GRDB/Core/SchedulingWatchdog.swift; sourceTree = ""; }; - B6F5F76418FE68B0D427B7D08BF6A9A9 /* TransactionObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransactionObserver.swift; path = GRDB/Core/TransactionObserver.swift; sourceTree = ""; }; - B7398318D874AC392EB34280CF2E1899 /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = GRDB/Utils/Utils.swift; sourceTree = ""; }; - B85117D4C9BE4B6480B1C89933815E58 /* Prayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Prayer.swift; sourceTree = ""; }; - BB2B3F9D2BF7D6132661A531E7BB2F12 /* AzkarCategory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AzkarCategory.swift; sourceTree = ""; }; - BCC7E5208F1383E700C4820E6EC5F37A /* Pods-MuslimData_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Tests.release.xcconfig"; sourceTree = ""; }; - BD7F2FEBDAA3F216BBB4AE11EC6585D6 /* SQLCollatedExpression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLCollatedExpression.swift; path = GRDB/QueryInterface/SQL/SQLCollatedExpression.swift; sourceTree = ""; }; - BED95FFCB43990871E5873CFC4E1C053 /* SQLOrdering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLOrdering.swift; path = GRDB/QueryInterface/SQL/SQLOrdering.swift; sourceTree = ""; }; - BF2ACFA1937DAE4E5205B6A924C830CB /* SQLCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLCollection.swift; path = GRDB/QueryInterface/SQL/SQLCollection.swift; sourceTree = ""; }; - BFD91E47F6DD6422D0952C8AC7623582 /* TableDefinition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableDefinition.swift; path = GRDB/QueryInterface/Schema/TableDefinition.swift; sourceTree = ""; }; - C39D8BF4F31FBF5B0CB7FF839884DE79 /* MuslimData-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MuslimData-prefix.pch"; sourceTree = ""; }; - C559E1EEE2B6FBA44944FEE8E9152DF0 /* HasOneThroughAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasOneThroughAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasOneThroughAssociation.swift; sourceTree = ""; }; - C5F1092AFB734F6CA9EDCF3A32CA7041 /* FTS5Pattern.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5Pattern.swift; path = GRDB/FTS/FTS5Pattern.swift; sourceTree = ""; }; - C6CDDA18855D4ADEBEFF1A3AE06CC5E3 /* SQLSelectable+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLSelectable+QueryInterface.swift"; path = "GRDB/QueryInterface/SQL/SQLSelectable+QueryInterface.swift"; sourceTree = ""; }; - C7AA8C9DAF31AD7B74AE9ED132C61DA8 /* FTS5WrapperTokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5WrapperTokenizer.swift; path = GRDB/FTS/FTS5WrapperTokenizer.swift; sourceTree = ""; }; - C87A77728D7700424D943FDE619754A2 /* Pool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Pool.swift; path = GRDB/Utils/Pool.swift; sourceTree = ""; }; - C89F00D263328D7C901ADE57C1548021 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = GRDB/Utils/Result.swift; sourceTree = ""; }; - CC3E15AF93024917493AF2A2ED452332 /* ValueObservation+Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Row.swift"; path = "GRDB/ValueObservation/ValueObservation+Row.swift"; sourceTree = ""; }; - CD5F36FEF53D52328747380C3D59D187 /* StatementColumnConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StatementColumnConvertible.swift; path = GRDB/Core/StatementColumnConvertible.swift; sourceTree = ""; }; - CDE5F32BB6F9734F44632A90954DC6F2 /* FTS3Pattern.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS3Pattern.swift; path = GRDB/FTS/FTS3Pattern.swift; sourceTree = ""; }; - CF0878EB04F3CEA389BCDB89EA02635B /* GRDB.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GRDB.swift.modulemap; sourceTree = ""; }; - D1A115FEA22E3B697DDD8CB0CF3FCAD9 /* DatabaseValueConvertible+ReferenceConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+ReferenceConvertible.swift"; path = "GRDB/Core/Support/Foundation/DatabaseValueConvertible+ReferenceConvertible.swift"; sourceTree = ""; }; - D425DD46CBA81B4F5985DBFD029CC0EE /* GRDB.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GRDB.swift.xcconfig; sourceTree = ""; }; - D451D66CDD9B42CD20A5663E52C4ECED /* Pods-MuslimData_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MuslimData_Example-frameworks.sh"; sourceTree = ""; }; - D5A9AF286580ABB38F1448D6568171C6 /* DBHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DBHelper.swift; sourceTree = ""; }; - D6E40BE124BC4154995B1B2A7A660D03 /* NSData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSData.swift; path = GRDB/Core/Support/Foundation/NSData.swift; sourceTree = ""; }; - D89DD2484314D8A3D5ADE1D158C85756 /* DatabaseValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseValue.swift; path = GRDB/Core/DatabaseValue.swift; sourceTree = ""; }; - DBD0CA7B983012A8B03615622D294247 /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = GRDB/Core/Support/Foundation/Data.swift; sourceTree = ""; }; - DC8CAE41207247FFE6C23DD13296EA70 /* ValueObservation+DistinctUntilChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+DistinctUntilChanged.swift"; path = "GRDB/ValueObservation/ValueObservation+DistinctUntilChanged.swift"; sourceTree = ""; }; - DE941C1A7A95F921000AFDFD91F54541 /* DatabaseFunction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseFunction.swift; path = GRDB/Core/DatabaseFunction.swift; sourceTree = ""; }; - E190980D696557F2DD2A9B526828DF03 /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = GRDB/FTS/FTS4.swift; sourceTree = ""; }; - E1B0453AB3FD95A926B256E8D21F72D9 /* MuslimData-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MuslimData-dummy.m"; sourceTree = ""; }; - E373F54B34D5D14C05965571F0559EDD /* GRDB.swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GRDB.swift-Info.plist"; sourceTree = ""; }; - E375E483DE2FE415F9FEA19C9669B526 /* SerializedDatabase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerializedDatabase.swift; path = GRDB/Core/SerializedDatabase.swift; sourceTree = ""; }; - E3BABC3D3DC05C7FD6865D180C0A432D /* SQLQueryGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLQueryGenerator.swift; path = GRDB/QueryInterface/SQLGeneration/SQLQueryGenerator.swift; sourceTree = ""; }; - E3E4C6CC7D33B6BEE3483F48A38E6A45 /* NSNull.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSNull.swift; path = GRDB/Core/Support/Foundation/NSNull.swift; sourceTree = ""; }; - E73BE27477C2865305F88857F860D067 /* HasManyAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasManyAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasManyAssociation.swift; sourceTree = ""; }; - E8180C67106D338B3A2A64D08774B6D9 /* CGFloat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CGFloat.swift; path = GRDB/Core/Support/CoreGraphics/CGFloat.swift; sourceTree = ""; }; - E8487A5B3066D2B150E82D87B277D480 /* Pods_MuslimData_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MuslimData_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E9488B06541B325219BAE37A334A1E59 /* DatabaseRegion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseRegion.swift; path = GRDB/Core/DatabaseRegion.swift; sourceTree = ""; }; - EA0B8A534766D304CF9DE1A5C2C35051 /* GRDB-4.0.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "GRDB-4.0.swift"; path = "GRDB/Fixit/GRDB-4.0.swift"; sourceTree = ""; }; - EABE51A24C723C856DD1DCC752712250 /* StandardLibrary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StandardLibrary.swift; path = GRDB/Core/Support/StandardLibrary/StandardLibrary.swift; sourceTree = ""; }; - ED2B193D223BFC78855A3B1DE8CED395 /* FetchableRecord+QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FetchableRecord+QueryInterfaceRequest.swift"; path = "GRDB/QueryInterface/FetchableRecord+QueryInterfaceRequest.swift"; sourceTree = ""; }; - EE233D66235457A95C4FDD1BC230A497 /* Cursor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cursor.swift; path = GRDB/Core/Cursor.swift; sourceTree = ""; }; - EEC87C5D70057CE21632F0E08FAAF615 /* MuslimData-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MuslimData-umbrella.h"; sourceTree = ""; }; - F04EB54A8111D289DE44844E4A57E6B3 /* SQLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLRequest.swift; path = GRDB/Core/SQLRequest.swift; sourceTree = ""; }; - F114854873706F9F005E2BB1FD9D4C65 /* EncodableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EncodableRecord.swift; path = GRDB/Record/EncodableRecord.swift; sourceTree = ""; }; - F27BA0AAB3F0B8F0F6FBFD49B7969EA9 /* SQLForeignKeyRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLForeignKeyRequest.swift; path = GRDB/QueryInterface/SQL/SQLForeignKeyRequest.swift; sourceTree = ""; }; - F4E91BB21A1925C004A070AB895D6B14 /* grdb_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = grdb_config.h; path = Support/grdb_config.h; sourceTree = ""; }; - F7AD95BB7089C067668FE8E0C1262934 /* GRDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GRDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FB29E142D18858D1242D2F378682A8F8 /* Pods-MuslimData_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Tests.debug.xcconfig"; sourceTree = ""; }; - FCEC1934853314773A885F07F9B3BF31 /* Pods-MuslimData_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MuslimData_Example.modulemap"; sourceTree = ""; }; - FF596B48C538AB646A0EAF252A33E089 /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = GRDB/Migration/Migration.swift; sourceTree = ""; }; + 00D6C2C95FD0E1A287EA068E42E4A2B2 /* FTS3+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FTS3+QueryInterface.swift"; path = "GRDB/QueryInterface/FTS3+QueryInterface.swift"; sourceTree = ""; }; + 00D864FACE1073789EB5028B18AF3981 /* ValueObservation+MapReducer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+MapReducer.swift"; path = "GRDB/ValueObservation/ValueObservation+MapReducer.swift"; sourceTree = ""; }; + 00E93A5697877EDDADF2B97223FF6260 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = GRDB/Utils/Result.swift; sourceTree = ""; }; + 01FB68FAD43CF8429267EF33197BF6A4 /* DateExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DateExtensions.swift; sourceTree = ""; }; + 0271944F72BFBCF03BEBC7F9625E332B /* SerializedDatabase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerializedDatabase.swift; path = GRDB/Core/SerializedDatabase.swift; sourceTree = ""; }; + 079E0846208ED8C64AE0141E80D5AF30 /* FTS5TokenizerDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5TokenizerDescriptor.swift; path = GRDB/FTS/FTS5TokenizerDescriptor.swift; sourceTree = ""; }; + 07EFAC04C8D1109BF2827F89C521B330 /* Pods-MuslimData_Tests */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-MuslimData_Tests"; path = Pods_MuslimData_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0809A71A0BA55AB90A71EC6E1734B81F /* SQLInterpolation+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLInterpolation+QueryInterface.swift"; path = "GRDB/QueryInterface/SQLInterpolation+QueryInterface.swift"; sourceTree = ""; }; + 08AE18009E789149C931ECC333F2189A /* HasManyAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasManyAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasManyAssociation.swift; sourceTree = ""; }; + 093944E617B52AF936D889D4EA4FC246 /* ValueObservation+FetchableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+FetchableRecord.swift"; path = "GRDB/ValueObservation/ValueObservation+FetchableRecord.swift"; sourceTree = ""; }; + 0BD85DBCEEE70ED57287FF3D9DEBDCDB /* Pods-MuslimData_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MuslimData_Tests-umbrella.h"; sourceTree = ""; }; + 0D81A451F08F038FA755936DE3D1590A /* ValueObservation+Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Row.swift"; path = "GRDB/ValueObservation/ValueObservation+Row.swift"; sourceTree = ""; }; + 0F524B59DAF2332C1379730B07D76C1B /* MuslimData.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MuslimData.debug.xcconfig; sourceTree = ""; }; + 1030CDC442B65527D048702297A698A8 /* StatementColumnConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StatementColumnConvertible.swift; path = GRDB/Core/StatementColumnConvertible.swift; sourceTree = ""; }; + 11236E27D6499D7928B236123927E583 /* NSNull.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSNull.swift; path = GRDB/Core/Support/Foundation/NSNull.swift; sourceTree = ""; }; + 1155FBAC7ADB560A7D21F0F646E77F1F /* Repository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Repository.swift; sourceTree = ""; }; + 13088891A66C735364301AC000712CE0 /* GRDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GRDB.h; path = Support/GRDB.h; sourceTree = ""; }; + 1428D60F918864DEF88EB111C77C2519 /* FTS5CustomTokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5CustomTokenizer.swift; path = GRDB/FTS/FTS5CustomTokenizer.swift; sourceTree = ""; }; + 14A94D67DD3B9C4170250E8C7A307207 /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = GRDB/Core/Statement.swift; sourceTree = ""; }; + 15A7DEB36B2A2D60D21564BC296A4D3B /* SQLInterpolation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLInterpolation.swift; path = GRDB/Core/SQLInterpolation.swift; sourceTree = ""; }; + 1694430E77D581F66D2781FD97253971 /* MuslimData.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = MuslimData.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 179568A184A07A92A074EBA8DD2BCA99 /* GRDB.swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GRDB.swift-Info.plist"; sourceTree = ""; }; + 17ABD68E920293F080122810A8881638 /* GRDB.swift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GRDB.swift; path = GRDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1BF6C61A2E5710D67D507E6B33189233 /* MuslimData */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MuslimData; path = MuslimData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1D9D64AFF2D5180626BD6EE6238EE30D /* PrayerAttribute.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrayerAttribute.swift; sourceTree = ""; }; + 1F72F39252476A5889AC2504BE74ED92 /* SQLLiteral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLLiteral.swift; path = GRDB/Core/SQLLiteral.swift; sourceTree = ""; }; + 2347D1DE9EE5CCD0DE9F7A916A8102F8 /* DatabaseQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseQueue.swift; path = GRDB/Core/DatabaseQueue.swift; sourceTree = ""; }; + 289812DA2B6E379C3AD31C339A93F33C /* Pods-MuslimData_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Tests-Info.plist"; sourceTree = ""; }; + 29EF83B1D17B2AA944D71FF61892E3D7 /* MuslimData-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MuslimData-umbrella.h"; sourceTree = ""; }; + 2E4B908C46D8AC8246EC4E00DC32EE6E /* HasOneAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasOneAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasOneAssociation.swift; sourceTree = ""; }; + 2F5ADFF5989279CA7A2083ACE8E04686 /* DatabaseReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseReader.swift; path = GRDB/Core/DatabaseReader.swift; sourceTree = ""; }; + 340D6C9CF4EA28E78B5B7EC4BAE876F8 /* DatabaseValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseValue.swift; path = GRDB/Core/DatabaseValue.swift; sourceTree = ""; }; + 34A9CD20B785EC16445BB4CCD8A65A97 /* Location.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Location.swift; sourceTree = ""; }; + 3586E5B7A2694DEC693A9A2D081D420A /* SQLFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLFunctions.swift; path = GRDB/QueryInterface/SQL/SQLFunctions.swift; sourceTree = ""; }; + 35B3000913B306C6B9EA60E706939697 /* SchedulingWatchdog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SchedulingWatchdog.swift; path = GRDB/Core/SchedulingWatchdog.swift; sourceTree = ""; }; + 35E063D67D1999B9CF83B528F48C749A /* SQLCollatedExpression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLCollatedExpression.swift; path = GRDB/QueryInterface/SQL/SQLCollatedExpression.swift; sourceTree = ""; }; + 36043B93868C7DB00D4017D9C4FA38FA /* DatabaseSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseSnapshot.swift; path = GRDB/Core/DatabaseSnapshot.swift; sourceTree = ""; }; + 375F9CF0AC63BC7CF0AF8682C8BF1751 /* SQLiteDateParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLiteDateParser.swift; path = GRDB/Core/Support/Foundation/SQLiteDateParser.swift; sourceTree = ""; }; + 39DD281AEC3E59FB3A0277BC475473C6 /* HasOneThroughAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasOneThroughAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasOneThroughAssociation.swift; sourceTree = ""; }; + 3A37AB04CE371562BF8E71E72FF7DCC2 /* SQLExpression+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLExpression+QueryInterface.swift"; path = "GRDB/QueryInterface/SQL/SQLExpression+QueryInterface.swift"; sourceTree = ""; }; + 3B232EFA04D2A907B4327166A5314284 /* MuslimData.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MuslimData.modulemap; sourceTree = ""; }; + 3B543DF39D139A8C78771B681C6ADAA2 /* Pods-MuslimData_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MuslimData_Example-umbrella.h"; sourceTree = ""; }; + 3D0BFFCE7DA2A58457C26354A62B0987 /* DatabaseValueConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseValueConvertible.swift; path = GRDB/Core/DatabaseValueConvertible.swift; sourceTree = ""; }; + 3EE756FB280A4709B342CCB851AF8B87 /* TableRecord+Association.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TableRecord+Association.swift"; path = "GRDB/QueryInterface/TableRecord+Association.swift"; sourceTree = ""; }; + 43CD310101BC030B0E0D7FE2056E0246 /* Pods-MuslimData_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Tests-acknowledgements.plist"; sourceTree = ""; }; + 4468899EAFE6991759EA8A46BB51BA91 /* FetchableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchableRecord.swift; path = GRDB/Record/FetchableRecord.swift; sourceTree = ""; }; + 44B93E97B50A2C3968F611666B05EE12 /* FetchRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchRequest.swift; path = GRDB/Core/FetchRequest.swift; sourceTree = ""; }; + 44E2482E80E8ABCEB62ADF9795702D10 /* SQLGenerationContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLGenerationContext.swift; path = GRDB/QueryInterface/SQLGeneration/SQLGenerationContext.swift; sourceTree = ""; }; + 464EAD3E4BAD6DE5D12979750026ACB4 /* URL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URL.swift; path = GRDB/Core/Support/Foundation/URL.swift; sourceTree = ""; }; + 47C8BB861F995656CBCF235EE4BBF2D5 /* GRDB.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GRDB.swift.modulemap; sourceTree = ""; }; + 4A328852E5AC5CD0A7F532F806C27C46 /* Inflections.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Inflections.swift; path = GRDB/Utils/Inflections.swift; sourceTree = ""; }; + 4D2F8E884941CCCB42A30760A3AEBB42 /* SQLOrdering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLOrdering.swift; path = GRDB/QueryInterface/SQL/SQLOrdering.swift; sourceTree = ""; }; + 4DD1E81E01020BE507304429A36F9976 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = GRDB/Core/Configuration.swift; sourceTree = ""; }; + 4EED1A4504790AF7E6F5240F27DBEF61 /* DatabaseValueConvertible+Decodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+Decodable.swift"; path = "GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Decodable.swift"; sourceTree = ""; }; + 4F8B2F0AC21F8A9AA0C4DAF6A289539C /* QueryInterfaceRequest+Association.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "QueryInterfaceRequest+Association.swift"; path = "GRDB/QueryInterface/Request/QueryInterfaceRequest+Association.swift"; sourceTree = ""; }; + 51D52725D39866E31745A1C4CBDBEF64 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 524CC7BFB573E8D444A899F3AA99FFC6 /* GRDB-Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GRDB-Bridging.h"; path = "Support/GRDB-Bridging.h"; sourceTree = ""; }; + 52D7F3BF5B125E5D8B02C6498D4ED182 /* TimeFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TimeFormat.swift; sourceTree = ""; }; + 5376CE97B980678A6B2CE4CDC1F3E1E7 /* FTS5WrapperTokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5WrapperTokenizer.swift; path = GRDB/FTS/FTS5WrapperTokenizer.swift; sourceTree = ""; }; + 5422A9FBD155A4783EAB1DBC2D4413EB /* Pool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Pool.swift; path = GRDB/Utils/Pool.swift; sourceTree = ""; }; + 56DEB559B5A5DCE1B324FB12C5E0A1FC /* FTS3Pattern.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS3Pattern.swift; path = GRDB/FTS/FTS3Pattern.swift; sourceTree = ""; }; + 56FEEB1D0A0093852C8360424DE7C77C /* DatabaseRegion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseRegion.swift; path = GRDB/Core/DatabaseRegion.swift; sourceTree = ""; }; + 5951C4A078EF26CE50BDF528E6187642 /* TableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableRecord.swift; path = GRDB/Record/TableRecord.swift; sourceTree = ""; }; + 59F05D12626E41B596F1F220097E173A /* TableRecord+QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TableRecord+QueryInterfaceRequest.swift"; path = "GRDB/QueryInterface/TableRecord+QueryInterfaceRequest.swift"; sourceTree = ""; }; + 5B43031A46D1FB9BDF3622252D66C3CF /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = GRDB/Utils/Utils.swift; sourceTree = ""; }; + 5D3E0CD6709358AFF08D1535414B5CC6 /* Prayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Prayer.swift; sourceTree = ""; }; + 5E97570A73E421384DAD384510A90FFF /* DatabaseWriter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseWriter.swift; path = GRDB/Core/DatabaseWriter.swift; sourceTree = ""; }; + 612B94F9D0155E187C8B3EC4978453CC /* FTS5+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FTS5+QueryInterface.swift"; path = "GRDB/QueryInterface/FTS5+QueryInterface.swift"; sourceTree = ""; }; + 6135EABC840E345AC834E8572D35D1B2 /* FetchableRecord+TableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FetchableRecord+TableRecord.swift"; path = "GRDB/Record/FetchableRecord+TableRecord.swift"; sourceTree = ""; }; + 61BA38261B622111B36F880E9829A137 /* DatabaseRegionObservation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseRegionObservation.swift; path = GRDB/Core/DatabaseRegionObservation.swift; sourceTree = ""; }; + 626FAFDB2FBA47E8F7DA5BEEC5204BF8 /* Pods-MuslimData_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Tests.debug.xcconfig"; sourceTree = ""; }; + 64162F22C59C71C0145CBCB56A60959E /* SQLExpression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLExpression.swift; path = GRDB/QueryInterface/SQL/SQLExpression.swift; sourceTree = ""; }; + 65AA78E233337BE07809C0BCE36F7925 /* SQLOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLOperators.swift; path = GRDB/QueryInterface/SQL/SQLOperators.swift; sourceTree = ""; }; + 65B9B5758E649467E7C7257B2A99B398 /* Pods-MuslimData_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Example.debug.xcconfig"; sourceTree = ""; }; + 6617214BBCD73E8681833F4DEB505C18 /* SQLQuery.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLQuery.swift; path = GRDB/QueryInterface/SQL/SQLQuery.swift; sourceTree = ""; }; + 664686B6ABA608503F83F85979F0687B /* NSNumber.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSNumber.swift; path = GRDB/Core/Support/Foundation/NSNumber.swift; sourceTree = ""; }; + 6C1437F36D038A5734484868100FF202 /* Pods-MuslimData_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MuslimData_Example-acknowledgements.markdown"; sourceTree = ""; }; + 6C148EB18C09F4877D62A86109CADBEC /* ValueObservation+DistinctUntilChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+DistinctUntilChanged.swift"; path = "GRDB/ValueObservation/ValueObservation+DistinctUntilChanged.swift"; sourceTree = ""; }; + 6CA133D8C22FCD0B36947C006B980ED0 /* GRDB.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GRDB.swift-dummy.m"; sourceTree = ""; }; + 6E1D40C1A883759045B7FB69D2D1B0DB /* DatabaseFunction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseFunction.swift; path = GRDB/Core/DatabaseFunction.swift; sourceTree = ""; }; + 6E6EF5186786DEB317F4E8700B553D53 /* String+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = ""; }; + 6F24513440BECF3F4711B37E2873F911 /* Database+Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Database+Schema.swift"; path = "GRDB/Core/Database+Schema.swift"; sourceTree = ""; }; + 6F7506C8792FBFB2B07AD8B85B5C3ADD /* MuslimData-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MuslimData-dummy.m"; sourceTree = ""; }; + 730CC813817A01C3345FB6628C3F374F /* MuslimData-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MuslimData-prefix.pch"; sourceTree = ""; }; + 736E75FFBCE1C9C3C052ED6848ECAA3A /* EncodableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EncodableRecord.swift; path = GRDB/Record/EncodableRecord.swift; sourceTree = ""; }; + 740370A5EC50C2D78ED000F028CEAD26 /* Cursor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cursor.swift; path = GRDB/Core/Cursor.swift; sourceTree = ""; }; + 76A6406A1762BAFF98F6CD7FF7EE7FF0 /* StatementAuthorizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StatementAuthorizer.swift; path = GRDB/Core/StatementAuthorizer.swift; sourceTree = ""; }; + 798DB5BE9EB09CBDF299C90C481A9110 /* DatabasePool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabasePool.swift; path = GRDB/Core/DatabasePool.swift; sourceTree = ""; }; + 7AB5AEBDF6E57653433892BB405F0FC2 /* GRDB.swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GRDB.swift.debug.xcconfig; sourceTree = ""; }; + 7CC1C60D10CB6A29C0181276AB532200 /* FTS3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS3.swift; path = GRDB/FTS/FTS3.swift; sourceTree = ""; }; + 7D6A8BE5B76B247298A79BFF89DF6D29 /* AzkarChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AzkarChapter.swift; sourceTree = ""; }; + 80BC3878E43FC7BC9CC5A386968117CE /* grdb_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = grdb_config.h; path = Support/grdb_config.h; sourceTree = ""; }; + 80CDA964EF94F8B5E9C39C8F8655A1B7 /* CHANGELOG.md */ = {isa = PBXFileReference; includeInIndex = 1; path = CHANGELOG.md; sourceTree = ""; }; + 844CE98E42007DDFB8D4BFF8DAA2EF15 /* DatabaseValueConversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseValueConversion.swift; path = GRDB/Core/DatabaseValueConversion.swift; sourceTree = ""; }; + 84505976E3D76B2D94620C69841FCC56 /* ValueReducer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueReducer.swift; path = GRDB/ValueObservation/ValueReducer.swift; sourceTree = ""; }; + 84ADB6717063112A6383A1C160F86C26 /* GRDB-4.0.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "GRDB-4.0.swift"; path = "GRDB/Fixit/GRDB-4.0.swift"; sourceTree = ""; }; + 8558236B5D95448121116192CDF82D7C /* ValueObservation+Count.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Count.swift"; path = "GRDB/ValueObservation/ValueObservation+Count.swift"; sourceTree = ""; }; + 8D68092E711BB73E99F34A4E0757BC37 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 8E2B6DDCB8FBDC144EFF6CF15E9FAC07 /* PersistableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PersistableRecord.swift; path = GRDB/Record/PersistableRecord.swift; sourceTree = ""; }; + 8E4E05505643C3270EBD487F65E68FAC /* DatabaseValueConvertible+RawRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+RawRepresentable.swift"; path = "GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+RawRepresentable.swift"; sourceTree = ""; }; + 904F4120DAA573A68ACF64F1E116B95D /* MuslimData-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MuslimData-Info.plist"; sourceTree = ""; }; + 96B1FED296230650927F5C8E53F05DAC /* SQLRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLRelation.swift; path = GRDB/QueryInterface/SQL/SQLRelation.swift; sourceTree = ""; }; + 9810ED848A8370D28A206952D1E634FA /* DatabaseError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseError.swift; path = GRDB/Core/DatabaseError.swift; sourceTree = ""; }; + 983C554E80E2287925036A568A9537FB /* UUID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UUID.swift; path = GRDB/Core/Support/Foundation/UUID.swift; sourceTree = ""; }; + 992079014BF8ABA32EA866CBF1AEFBDD /* CGFloat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CGFloat.swift; path = GRDB/Core/Support/CoreGraphics/CGFloat.swift; sourceTree = ""; }; + 9CE552E45ACF80214D40921DD03CAA67 /* Column.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Column.swift; path = GRDB/QueryInterface/SQL/Column.swift; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9E58180EF7E8F6358C3395350061BE44 /* muslim_db_v2.0.0.db */ = {isa = PBXFileReference; includeInIndex = 1; path = muslim_db_v2.0.0.db; sourceTree = ""; }; + 9EA31FB39C8D6B4D3E53D80D093D2F6F /* Date.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Date.swift; path = GRDB/Core/Support/Foundation/Date.swift; sourceTree = ""; }; + 9F67789688FB3673E6008AEA51847BB9 /* Database+Statements.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Database+Statements.swift"; path = "GRDB/Core/Database+Statements.swift"; sourceTree = ""; }; + A020DF84492FD75A8638CB22DFE52845 /* Name.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Name.swift; sourceTree = ""; }; + A1003C353C0CF946F8940551748269D2 /* GRDB.swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GRDB.swift.release.xcconfig; sourceTree = ""; }; + A151C2196CAB62A5C9D0509FFF5D3BFC /* ValueObservation+Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Map.swift"; path = "GRDB/ValueObservation/ValueObservation+Map.swift"; sourceTree = ""; }; + A2FCC2BA27CDFBC62682AE669A77AE1D /* FetchedRecordsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchedRecordsController.swift; path = GRDB/Record/FetchedRecordsController.swift; sourceTree = ""; }; + A31E7F6537B28EF0C3FD098B5230A169 /* DBHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DBHelper.swift; sourceTree = ""; }; + A35410C80E22F178FE1666DEE71A3252 /* FTS3TokenizerDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS3TokenizerDescriptor.swift; path = GRDB/FTS/FTS3TokenizerDescriptor.swift; sourceTree = ""; }; + A381999A5B8A8604E95882B60664287A /* GRDB.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GRDB.swift-prefix.pch"; sourceTree = ""; }; + A3FD392A87C27DC4A006672018F8EAAF /* SQLQueryGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLQueryGenerator.swift; path = GRDB/QueryInterface/SQLGeneration/SQLQueryGenerator.swift; sourceTree = ""; }; + A594A615D1610A6A82241572E57C4A87 /* Database.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Database.swift; path = GRDB/Core/Database.swift; sourceTree = ""; }; + A6250B466AAE090B46198B61F8C838EF /* ValueObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueObserver.swift; path = GRDB/ValueObservation/ValueObserver.swift; sourceTree = ""; }; + A69B31388100FB6249EAEE00F4B20660 /* Pods-MuslimData_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Example-acknowledgements.plist"; sourceTree = ""; }; + A7E99DCA167FB7C8523CBE7E30C75E87 /* StandardLibrary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StandardLibrary.swift; path = GRDB/Core/Support/StandardLibrary/StandardLibrary.swift; sourceTree = ""; }; + A83C9A0047B7665B321CE637EBB71CB5 /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = GRDB/Core/Support/Foundation/Data.swift; sourceTree = ""; }; + A8FD966EA188EC1FB1DA0C5734E4B36A /* RowAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowAdapter.swift; path = GRDB/Core/RowAdapter.swift; sourceTree = ""; }; + A9260AA5117FA49534554748ACD1E7BC /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = GRDB/FTS/FTS4.swift; sourceTree = ""; }; + A9CAACFD9D4F26952E59D5D9C90D2528 /* ValueObservation+CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+CompactMap.swift"; path = "GRDB/ValueObservation/ValueObservation+CompactMap.swift"; sourceTree = ""; }; + ACBA7BBDC459B70F0ACB3413B3906649 /* MuslimData.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MuslimData.release.xcconfig; sourceTree = ""; }; + B1080CF86161774FC324D019BB74E7FA /* AzkarCategory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AzkarCategory.swift; sourceTree = ""; }; + B1081094773556A6A464D2CD55EAD506 /* TableDefinition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableDefinition.swift; path = GRDB/QueryInterface/Schema/TableDefinition.swift; sourceTree = ""; }; + B15106707D4C78899C33C2C9A781E277 /* SQLSpecificExpressible+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLSpecificExpressible+QueryInterface.swift"; path = "GRDB/QueryInterface/SQL/SQLSpecificExpressible+QueryInterface.swift"; sourceTree = ""; }; + B5376286590A5DC3461F11C7A14157ED /* Pods-MuslimData_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MuslimData_Example.modulemap"; sourceTree = ""; }; + B635DCB1E6D60260828C27E3C1366FD2 /* SQLSelectable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLSelectable.swift; path = GRDB/QueryInterface/SQL/SQLSelectable.swift; sourceTree = ""; }; + BB80C27F1B9A36378FC4A5D7FCBE1E2B /* Pods-MuslimData_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MuslimData_Example-frameworks.sh"; sourceTree = ""; }; + BBE913A6C322FB7BA4C11487C3ECB221 /* EncodableRecord+Encodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EncodableRecord+Encodable.swift"; path = "GRDB/Record/EncodableRecord+Encodable.swift"; sourceTree = ""; }; + BEBAE4960F59932E1A399C109A453E0C /* DatabaseValueConvertible+ReferenceConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+ReferenceConvertible.swift"; path = "GRDB/Core/Support/Foundation/DatabaseValueConvertible+ReferenceConvertible.swift"; sourceTree = ""; }; + BF327E118920934B9AD7EA46DCA48965 /* ValueObservation+DatabaseValueConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+DatabaseValueConvertible.swift"; path = "GRDB/ValueObservation/ValueObservation+DatabaseValueConvertible.swift"; sourceTree = ""; }; + BF6342B1D69B37FF9472ADC4C29DD0FF /* Pods-MuslimData_Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-MuslimData_Example"; path = Pods_MuslimData_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BF82642D2452B676DE57B1758497FD6E /* BelongsToAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BelongsToAssociation.swift; path = GRDB/QueryInterface/Request/Association/BelongsToAssociation.swift; sourceTree = ""; }; + BFCBA8F76DA14E950E08C706D2A92E64 /* DatabasePromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabasePromise.swift; path = GRDB/QueryInterface/SQL/DatabasePromise.swift; sourceTree = ""; }; + BFF1D9F025C44D7FAEEE0206D731A765 /* Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Row.swift; path = GRDB/Core/Row.swift; sourceTree = ""; }; + C286D53E1D7D0D96BD4C534CFEB86E5E /* FTS5Tokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5Tokenizer.swift; path = GRDB/FTS/FTS5Tokenizer.swift; sourceTree = ""; }; + C351E742746F64DC32068BFDBF920798 /* TransactionObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransactionObserver.swift; path = GRDB/Core/TransactionObserver.swift; sourceTree = ""; }; + C4181F7638B42161C4FE446BDEA1ADC5 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = GRDB/FTS/FTS5.swift; sourceTree = ""; }; + C6AD0B87216E32B86C7F4855A5F6BDE1 /* AzkarItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AzkarItem.swift; sourceTree = ""; }; + C8F096D89EED3D262636E1838D0D2180 /* SQLForeignKeyRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLForeignKeyRequest.swift; path = GRDB/QueryInterface/SQL/SQLForeignKeyRequest.swift; sourceTree = ""; }; + CB1821A1110F31EEDD916328777B65CA /* DatabaseCollation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseCollation.swift; path = GRDB/Core/DatabaseCollation.swift; sourceTree = ""; }; + CB75F83D1AE48C88A0A85D56CF0F13B0 /* VirtualTableModule.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTableModule.swift; path = GRDB/QueryInterface/Schema/VirtualTableModule.swift; sourceTree = ""; }; + CBCD71E190AB01AEDA957A91752CA0B0 /* DatabaseDateComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseDateComponents.swift; path = GRDB/Core/Support/Foundation/DatabaseDateComponents.swift; sourceTree = ""; }; + CCE86FA4B74834175DEDACF492416DDA /* FetchableRecord+Decodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FetchableRecord+Decodable.swift"; path = "GRDB/Record/FetchableRecord+Decodable.swift"; sourceTree = ""; }; + CE7B03B77F2F0A31ED478363C72D8A24 /* DatabaseMigrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseMigrator.swift; path = GRDB/Migration/DatabaseMigrator.swift; sourceTree = ""; }; + D142D2DDF4BFBB74839269DB42B8692C /* SQLExpressible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLExpressible.swift; path = GRDB/QueryInterface/SQL/SQLExpressible.swift; sourceTree = ""; }; + D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + D30BAFCE984848BDEBF194A2899567EA /* SQLCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLCollection.swift; path = GRDB/QueryInterface/SQL/SQLCollection.swift; sourceTree = ""; }; + D846F478C4C834DC00E277228B129083 /* Pods-MuslimData_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Example.release.xcconfig"; sourceTree = ""; }; + D860051DE87F8574AFEFF56F7C619598 /* Language.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Language.swift; sourceTree = ""; }; + DA68F2CB5BE572106E41C45020F9797C /* PrayerTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrayerTime.swift; sourceTree = ""; }; + DE2B11CBBBF488B9CB4F133978648866 /* Pods-MuslimData_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MuslimData_Tests-dummy.m"; sourceTree = ""; }; + DE42771047CDEDC16B7A058FFFC770C7 /* SQLAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLAssociation.swift; path = GRDB/QueryInterface/SQL/SQLAssociation.swift; sourceTree = ""; }; + DE67BF28E65F99081D8B19B49D8BBA0A /* Association.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Association.swift; path = GRDB/QueryInterface/Request/Association/Association.swift; sourceTree = ""; }; + DE8C30B4C6ACCB9F1B626D0CF6DC4D2C /* HasManyThroughAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasManyThroughAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasManyThroughAssociation.swift; sourceTree = ""; }; + DEAA9A26723DC474A1C6BA07AB1175DF /* Pods-MuslimData_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MuslimData_Tests-acknowledgements.markdown"; sourceTree = ""; }; + DEE88C13D61A786DFAB09EAD3D25A351 /* QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QueryInterfaceRequest.swift; path = GRDB/QueryInterface/Request/QueryInterfaceRequest.swift; sourceTree = ""; }; + DEF87AE545A42D3F0C700E79EC027126 /* Pods-MuslimData_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Tests.release.xcconfig"; sourceTree = ""; }; + E496549682A5A201323B61D591167A4A /* FTS5Pattern.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5Pattern.swift; path = GRDB/FTS/FTS5Pattern.swift; sourceTree = ""; }; + E60A9D3FA5C081F82DB4B0B9178F7405 /* DatabaseValueConvertible+Encodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+Encodable.swift"; path = "GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Encodable.swift"; sourceTree = ""; }; + E68F0140AC5E63E44C720D4D0D22D415 /* Record.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Record.swift; path = GRDB/Record/Record.swift; sourceTree = ""; }; + E787A815C699A533C7E83D8022D22549 /* Pods-MuslimData_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MuslimData_Example-dummy.m"; sourceTree = ""; }; + E79461AEF0D85C606ACD69EF9B8C8939 /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = GRDB/Migration/Migration.swift; sourceTree = ""; }; + E7A10B0C7660263FD83A5CD29F2E1165 /* OrderedDictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OrderedDictionary.swift; path = GRDB/Utils/OrderedDictionary.swift; sourceTree = ""; }; + EA1F96A960AFA0054EB6D2173ADB6993 /* FetchableRecord+QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FetchableRecord+QueryInterfaceRequest.swift"; path = "GRDB/QueryInterface/FetchableRecord+QueryInterfaceRequest.swift"; sourceTree = ""; }; + EA5D05CF1C40BFDA3E4AF4AA9FA1AB0B /* SQLSelectable+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLSelectable+QueryInterface.swift"; path = "GRDB/QueryInterface/SQL/SQLSelectable+QueryInterface.swift"; sourceTree = ""; }; + EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + EB87E2DAAEF3AD58CEFA29770C3FB552 /* Pods-MuslimData_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Example-Info.plist"; sourceTree = ""; }; + EC1E7ED6955D27B6C52BCB568C182949 /* AssociationAggregate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssociationAggregate.swift; path = GRDB/QueryInterface/Request/Association/AssociationAggregate.swift; sourceTree = ""; }; + EE91E12DE279B781B318C35432A3D8DB /* ValueObservation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueObservation.swift; path = GRDB/ValueObservation/ValueObservation.swift; sourceTree = ""; }; + EEA27CDC4C954599103EAB46FC89D71E /* SQLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLRequest.swift; path = GRDB/Core/SQLRequest.swift; sourceTree = ""; }; + EEFDF28A6D90C1E561747E5F01EF8D40 /* ValueObservation+Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Combine.swift"; path = "GRDB/ValueObservation/ValueObservation+Combine.swift"; sourceTree = ""; }; + F07F62F624F83DF0B8480FCEEFBADA32 /* NSData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSData.swift; path = GRDB/Core/Support/Foundation/NSData.swift; sourceTree = ""; }; + F19E5112B837424748266228D81EFD17 /* Pods-MuslimData_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MuslimData_Tests.modulemap"; sourceTree = ""; }; + F48E1D2E2EE31EA5F8CDF16FBF28591E /* Row+QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Row+QueryInterfaceRequest.swift"; path = "GRDB/QueryInterface/Row+QueryInterfaceRequest.swift"; sourceTree = ""; }; + F6119B7DCF1679F35ADE30E741827C78 /* ReadWriteBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReadWriteBox.swift; path = GRDB/Utils/ReadWriteBox.swift; sourceTree = ""; }; + F65D060B3ED7C64571E263EC2AA76419 /* RequestProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestProtocols.swift; path = GRDB/QueryInterface/Request/RequestProtocols.swift; sourceTree = ""; }; + F66B8189DE409C6CE416BAA423ECCE75 /* DatabaseSchemaCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseSchemaCache.swift; path = GRDB/Core/DatabaseSchemaCache.swift; sourceTree = ""; }; + FCCA917D100B6F5A3512DB297210C53C /* NSString.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSString.swift; path = GRDB/Core/Support/Foundation/NSString.swift; sourceTree = ""; }; + FD51BACBD28D9EE11984C183825D66AD /* MuslimRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MuslimRepository.swift; sourceTree = ""; }; + FDD77D03BF3203412EACD1B9A8B887D5 /* Inflections+English.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Inflections+English.swift"; path = "GRDB/Utils/Inflections+English.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0D23A32B323C417A15285A7F385E85AF /* Frameworks */ = { + 47E0B5CD3F296923572A2DE2C2ADAF49 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D754D61FF444A9A90C1251F315B5C29 /* Foundation.framework in Frameworks */, + 5428F5F7AC1DB2150C91C619A4C02431 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B411DE3B25D665AE58DF39FDE4CE1A94 /* Frameworks */ = { + B0137F0506062E4BBCCEA872D3E655D9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9A7995D89E2503F59B83841B83A6A3A9 /* Foundation.framework in Frameworks */, + B2B755533EA09F2E93A1D94B0E2F500C /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D4B5FD3802E3D47D8F15954F7F057354 /* Frameworks */ = { + CA0D1BFD9B61D0B814C3C1AB9999E9A9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2DAF0C709FAF6D288751DB00EB06B40C /* Foundation.framework in Frameworks */, + 1E673226452BFCE06C46A9AD51722A4B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E478433A023C0C1A0476B627A242F172 /* Frameworks */ = { + F31485D8AB729859516E701A1AE872F6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BE5A72CE583F45FF74F5334921FF9968 /* Foundation.framework in Frameworks */, - 538BFA3A72212A24728F903FD732CE4F /* GRDB.framework in Frameworks */, - 1958078CF71CEA9143902886C5B9C310 /* UIKit.framework in Frameworks */, + E7EA2E83C2DD69633C8648EFACAD76A9 /* Foundation.framework in Frameworks */, + 7ABBE42689BAF80D28D743C5F01A0C63 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0540E1C8A51BDA08F9803F4F5C81C4A9 /* DB Helper */ = { + 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { isa = PBXGroup; children = ( - D5A9AF286580ABB38F1448D6568171C6 /* DBHelper.swift */, + 59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */, ); - name = "DB Helper"; - path = "MuslimData/Classes/DB Helper"; + name = Frameworks; sourceTree = ""; }; - 068C7933E1034C5E720F2FEE596A2051 /* Extensions */ = { + 20F90913FCFC574FA2140ED7DB8B31FA /* Products */ = { isa = PBXGroup; children = ( - 061437BFF3E1C9882B07C7A0A6F60679 /* DateExtensions.swift */, - 551E845F7B283CFF0E2D215372DA26A9 /* String+Extensions.swift */, + 17ABD68E920293F080122810A8881638 /* GRDB.swift */, + 1BF6C61A2E5710D67D507E6B33189233 /* MuslimData */, + BF6342B1D69B37FF9472ADC4C29DD0FF /* Pods-MuslimData_Example */, + 07EFAC04C8D1109BF2827F89C521B330 /* Pods-MuslimData_Tests */, ); - name = Extensions; - path = MuslimData/Classes/Extensions; + name = Products; sourceTree = ""; }; - 0A8C8B1A53515417C6F57ECB1DB76072 /* Support Files */ = { + 303B6609BD098C07EDE9A0B6608CB913 /* Support Files */ = { isa = PBXGroup; children = ( - CF0878EB04F3CEA389BCDB89EA02635B /* GRDB.swift.modulemap */, - D425DD46CBA81B4F5985DBFD029CC0EE /* GRDB.swift.xcconfig */, - 5A2F3326B33A6BC66E13954DF736BEAA /* GRDB.swift-dummy.m */, - E373F54B34D5D14C05965571F0559EDD /* GRDB.swift-Info.plist */, - 45D4D0D01A44732C4E7F2C500AA45B55 /* GRDB.swift-prefix.pch */, + 47C8BB861F995656CBCF235EE4BBF2D5 /* GRDB.swift.modulemap */, + 6CA133D8C22FCD0B36947C006B980ED0 /* GRDB.swift-dummy.m */, + 179568A184A07A92A074EBA8DD2BCA99 /* GRDB.swift-Info.plist */, + A381999A5B8A8604E95882B60664287A /* GRDB.swift-prefix.pch */, + 7AB5AEBDF6E57653433892BB405F0FC2 /* GRDB.swift.debug.xcconfig */, + A1003C353C0CF946F8940551748269D2 /* GRDB.swift.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/GRDB.swift"; sourceTree = ""; }; - 176ED022F62840DFBB6098DE94236B35 /* Support Files */ = { + 4B40FE885F2E1BA5D0B23932769EF3EF /* Development Pods */ = { isa = PBXGroup; children = ( - 2BC5D21AC275156EB1E637182C566346 /* MuslimData.modulemap */, - 14A7257E831A9D87198C29B792FDF9B6 /* MuslimData.xcconfig */, - E1B0453AB3FD95A926B256E8D21F72D9 /* MuslimData-dummy.m */, - 948C2F723403EE0BBB55F1A5930F0722 /* MuslimData-Info.plist */, - C39D8BF4F31FBF5B0CB7FF839884DE79 /* MuslimData-prefix.pch */, - EEC87C5D70057CE21632F0E08FAAF615 /* MuslimData-umbrella.h */, + F43033D58924C5EF35BC8FC840E14963 /* MuslimData */, ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/MuslimData"; - sourceTree = ""; - }; - 2817A6C16C274658D2455BB0739C199E /* Location */ = { - isa = PBXGroup; - children = ( - 35291486FD48076A204DF52CCD6A72AC /* Location.swift */, - ); - path = Location; + name = "Development Pods"; sourceTree = ""; }; - 2B81C12C52C5CB2D888908B65FF9D6DD /* GRDB.swift */ = { + 4F77BF0B387D3166EE261DBF7601AD91 /* Extensions */ = { isa = PBXGroup; children = ( - 4022D06EB0FD32BF668EE12AF2306B41 /* standard */, - 0A8C8B1A53515417C6F57ECB1DB76072 /* Support Files */, + 01FB68FAD43CF8429267EF33197BF6A4 /* DateExtensions.swift */, + 6E6EF5186786DEB317F4E8700B553D53 /* String+Extensions.swift */, ); - path = GRDB.swift; + name = Extensions; + path = Sources/MuslimData/Extensions; sourceTree = ""; }; - 2DE6E95A2BA8D75D0082A3CE /* Repository */ = { + 56E59EAC7BD785ACAD5B73A9F16A4562 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 2DFE19672BAB81E900665C6B /* Repository.swift */, - 2DE6E95B2BA8D8010082A3CE /* MuslimRepository.swift */, + E451C634DC4F2E7A7F35A670F39CEAC7 /* Pods-MuslimData_Example */, + FADA63C3804BABFA54DAC9F40016592C /* Pods-MuslimData_Tests */, ); - name = Repository; - path = MuslimData/Classes/Repository; + name = "Targets Support Files"; sourceTree = ""; }; - 2DE6E95D2BA8F1F30082A3CE /* Models */ = { + 59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */ = { isa = PBXGroup; children = ( - 5B32A0A6C3385773AA423D017A5BFE73 /* Azkars */, - 8D92D353CC7766D3072B3133A23D2705 /* Names */, - 2817A6C16C274658D2455BB0739C199E /* Location */, - F45771AD65677FDC2506D34994A89145 /* PrayerTimes */, + EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */, + D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */, ); - name = Models; - path = MuslimData/Classes/Models; + name = iOS; sourceTree = ""; }; - 4022D06EB0FD32BF668EE12AF2306B41 /* standard */ = { + 710E847FA2562322113B664B655B2716 /* Pod */ = { isa = PBXGroup; children = ( - B65E8B14425B931ADE785452F8A6332B /* Association.swift */, - 98583347F707576BCEA189427FC47A69 /* AssociationAggregate.swift */, - 662BA0B191945070F192D329CA95496F /* BelongsToAssociation.swift */, - E8180C67106D338B3A2A64D08774B6D9 /* CGFloat.swift */, - 6E4B190F2E830A1BB55FBA48ACEA7E86 /* Column.swift */, - 374B2EE56EE7DAC67CCB2C047D622957 /* Configuration.swift */, - EE233D66235457A95C4FDD1BC230A497 /* Cursor.swift */, - DBD0CA7B983012A8B03615622D294247 /* Data.swift */, - 25525D31CDCACA2AEE38C6A90DEDD714 /* Database.swift */, - 8CFB400CA7F46BD8366FC26A1A6823E7 /* Database+Schema.swift */, - 2846928F23EC085D3E5E028FFC5B1FF2 /* Database+Statements.swift */, - 22BAAE27BDCE90B8C1F6B4992424D9C6 /* DatabaseCollation.swift */, - 04275E4CF54FAA3C2A6859DDB193D04F /* DatabaseDateComponents.swift */, - 49192A23515A2FDF0209EBF9BA4DAB65 /* DatabaseError.swift */, - DE941C1A7A95F921000AFDFD91F54541 /* DatabaseFunction.swift */, - 5E166D7E44FE057A6E248D6B423B0C81 /* DatabaseMigrator.swift */, - B2D8132A3643601639C3E59717516CA9 /* DatabasePool.swift */, - 1C77E730F441F579931C11BA8F749FDF /* DatabasePromise.swift */, - 51AA10D7887DE3F10F9030EC1A2CC378 /* DatabaseQueue.swift */, - 0C83188D9DFD01CA9D469EB06279767D /* DatabaseReader.swift */, - E9488B06541B325219BAE37A334A1E59 /* DatabaseRegion.swift */, - 6DE2E8EEA85B8FB4DB536F2DDA9089D0 /* DatabaseRegionObservation.swift */, - 3CA2DEAEDF6FED5B07AE3779109C7886 /* DatabaseSchemaCache.swift */, - 2C8D1DE939367A8362484A58B33EB6DE /* DatabaseSnapshot.swift */, - D89DD2484314D8A3D5ADE1D158C85756 /* DatabaseValue.swift */, - 9B99EBD21496FBA605E3A375E86ED829 /* DatabaseValueConversion.swift */, - 00DD889D9B78450041FF5AEE58E86647 /* DatabaseValueConvertible.swift */, - 9AC1744C057858332AA73845B0CE26D7 /* DatabaseValueConvertible+Decodable.swift */, - 24A48FA30EC31431A33C17FAE91902EE /* DatabaseValueConvertible+Encodable.swift */, - 1585FD241A9AC0D79B3E084E1A8B7B77 /* DatabaseValueConvertible+RawRepresentable.swift */, - D1A115FEA22E3B697DDD8CB0CF3FCAD9 /* DatabaseValueConvertible+ReferenceConvertible.swift */, - 518451B0E85374EA68E5B75FB38C27E1 /* DatabaseWriter.swift */, - 6A0210CA581788DF572FE3501F94C639 /* Date.swift */, - F114854873706F9F005E2BB1FD9D4C65 /* EncodableRecord.swift */, - 92CAEAC5CC5B2720DC623C44C895C435 /* EncodableRecord+Encodable.swift */, - 45C1864F172A3D81F9D25636ADB75ED9 /* FetchableRecord.swift */, - 758A56E81E436BD44A71DB48A73695EC /* FetchableRecord+Decodable.swift */, - ED2B193D223BFC78855A3B1DE8CED395 /* FetchableRecord+QueryInterfaceRequest.swift */, - 2058FFAD3AA3F5F1DA38DAB365079462 /* FetchableRecord+TableRecord.swift */, - 5F997529A98C052DA7C12591E52C94D6 /* FetchedRecordsController.swift */, - 0F3F554C1B5DCD4EF089F605813FC5D3 /* FetchRequest.swift */, - 3FF0BA87045E3E9FABE15B6BF3A8D5A2 /* FTS3.swift */, - 8CD278A63004131343ECCF5C78B29392 /* FTS3+QueryInterface.swift */, - CDE5F32BB6F9734F44632A90954DC6F2 /* FTS3Pattern.swift */, - 37C9ECD60B68221B76E253AA39B4B52E /* FTS3TokenizerDescriptor.swift */, - E190980D696557F2DD2A9B526828DF03 /* FTS4.swift */, - 62EE764DBA051C2839B7DD11850DA98C /* FTS5.swift */, - 5779BFB97BB16F7C257E39CD28630594 /* FTS5+QueryInterface.swift */, - 87F53F41F8B38930F8E492305ADD4866 /* FTS5CustomTokenizer.swift */, - C5F1092AFB734F6CA9EDCF3A32CA7041 /* FTS5Pattern.swift */, - 56CDF9772D8CD1E94A5E39433D191434 /* FTS5Tokenizer.swift */, - 0938A7247E2982B82482760B0AC6123F /* FTS5TokenizerDescriptor.swift */, - C7AA8C9DAF31AD7B74AE9ED132C61DA8 /* FTS5WrapperTokenizer.swift */, - 7FFD2B745CCCE37869DFC4E8FA83908E /* GRDB.h */, - EA0B8A534766D304CF9DE1A5C2C35051 /* GRDB-4.0.swift */, - 9C3DE7F469BC348F7C1DDC5196499B58 /* GRDB-Bridging.h */, - F4E91BB21A1925C004A070AB895D6B14 /* grdb_config.h */, - E73BE27477C2865305F88857F860D067 /* HasManyAssociation.swift */, - 852D3895437736AC3C233945C2E20301 /* HasManyThroughAssociation.swift */, - 6F74C3288A30C090F9DAE356D7F8CEF9 /* HasOneAssociation.swift */, - C559E1EEE2B6FBA44944FEE8E9152DF0 /* HasOneThroughAssociation.swift */, - 4970C5782878739D9F25CEE935961DA6 /* Inflections.swift */, - 3BEF107E7E8091B90FAECDFC4C7A6954 /* Inflections+English.swift */, - FF596B48C538AB646A0EAF252A33E089 /* Migration.swift */, - D6E40BE124BC4154995B1B2A7A660D03 /* NSData.swift */, - E3E4C6CC7D33B6BEE3483F48A38E6A45 /* NSNull.swift */, - 1E4B392CEDEDE8E47D3BD1ECC7EA551E /* NSNumber.swift */, - 7E7795BEC7ABA70F55DE00A1C340CC52 /* NSString.swift */, - 353188DE84471B3F5021BFC563AD2E4A /* OrderedDictionary.swift */, - 96925BE6CBF55EFBAD75586DB817EB24 /* PersistableRecord.swift */, - C87A77728D7700424D943FDE619754A2 /* Pool.swift */, - AFC609C58F86B050AED73E530BC3B6AB /* QueryInterfaceRequest.swift */, - 6A6A686C3D9502F7C4A132B40F0F72DD /* QueryInterfaceRequest+Association.swift */, - 3087A8A5BD99215CD4DB3460F8AFEA73 /* ReadWriteBox.swift */, - 25DF833796CBC2D0F008C6638CF48BD2 /* Record.swift */, - 8F2B8005D374F24A6943BAA1823F338B /* RequestProtocols.swift */, - C89F00D263328D7C901ADE57C1548021 /* Result.swift */, - 7B254E7B4418D6D38E004A377181618F /* Row.swift */, - 35BD16BE3201E2C0A1181407D25A3EBC /* Row+QueryInterfaceRequest.swift */, - 32170F8226285700A097463A2C81B28E /* RowAdapter.swift */, - B6DD660E6576366AC16CF63F89BFD77B /* SchedulingWatchdog.swift */, - E375E483DE2FE415F9FEA19C9669B526 /* SerializedDatabase.swift */, - 054167CF407C51AC6687ADEBF914CDDC /* SQLAssociation.swift */, - BD7F2FEBDAA3F216BBB4AE11EC6585D6 /* SQLCollatedExpression.swift */, - BF2ACFA1937DAE4E5205B6A924C830CB /* SQLCollection.swift */, - 7093F7382D260704506C5464AFBC16F5 /* SQLExpressible.swift */, - 988514746A18BB7288E7AE2B074B7196 /* SQLExpression.swift */, - 6AADE52C012DAEA6407BA8798B200F02 /* SQLExpression+QueryInterface.swift */, - F27BA0AAB3F0B8F0F6FBFD49B7969EA9 /* SQLForeignKeyRequest.swift */, - 291780A00DC00211D75FBDEA9B09E764 /* SQLFunctions.swift */, - 33E1BA72AB090848D099FDE15FFCD602 /* SQLGenerationContext.swift */, - 5880470B1529D3998D951354FE8AAA99 /* SQLInterpolation.swift */, - AA5BDCC7B5AB732EC9F8A60A48C1D510 /* SQLInterpolation+QueryInterface.swift */, - 0A1BEECB0AD5695FC58BB42959C41DDA /* SQLiteDateParser.swift */, - 7DCF7B73D6DBD322B1124B77F7C28B41 /* SQLLiteral.swift */, - B566BFB5B270273A425E6317B162D24F /* SQLOperators.swift */, - BED95FFCB43990871E5873CFC4E1C053 /* SQLOrdering.swift */, - B5AFBABE58AAD9E968921664890D2D50 /* SQLQuery.swift */, - E3BABC3D3DC05C7FD6865D180C0A432D /* SQLQueryGenerator.swift */, - AF2C6021F8D19343C38E11A931BD52EF /* SQLRelation.swift */, - F04EB54A8111D289DE44844E4A57E6B3 /* SQLRequest.swift */, - 5F5B13B296896404F68B81BDDB33598A /* SQLSelectable.swift */, - C6CDDA18855D4ADEBEFF1A3AE06CC5E3 /* SQLSelectable+QueryInterface.swift */, - 5A02DA8BFACEE9E07FBD62D157FED96B /* SQLSpecificExpressible+QueryInterface.swift */, - EABE51A24C723C856DD1DCC752712250 /* StandardLibrary.swift */, - 4EB99538C9E87FA9C44300FFCA0B04EE /* Statement.swift */, - A83D32E01380A9B4A0B3817B6B914A51 /* StatementAuthorizer.swift */, - CD5F36FEF53D52328747380C3D59D187 /* StatementColumnConvertible.swift */, - BFD91E47F6DD6422D0952C8AC7623582 /* TableDefinition.swift */, - 69D77E14A5BB1A5D3F2E9581ECBFE4B2 /* TableRecord.swift */, - 1DE3C6FBEF1E948A8881FAC46607E0CE /* TableRecord+Association.swift */, - AB527B155158A83DC29C8AB471EF8300 /* TableRecord+QueryInterfaceRequest.swift */, - B6F5F76418FE68B0D427B7D08BF6A9A9 /* TransactionObserver.swift */, - 3708554DF1666EC6C41BBEB89E5AC257 /* URL.swift */, - B7398318D874AC392EB34280CF2E1899 /* Utils.swift */, - 4C709D1799799F5A0E43E043E023415B /* UUID.swift */, - 94CE31B27E7F34691556AD03AFBB63F5 /* ValueObservation.swift */, - 8C5FC63DA22A393F7DC2691C13091E8F /* ValueObservation+Combine.swift */, - 59FBE42988DD91F3D3C2B74D31996523 /* ValueObservation+CompactMap.swift */, - 58B9F1435B3801DADE391A4A5136738A /* ValueObservation+Count.swift */, - 4E8F40C80B8B85C4393ED5F43C8ED116 /* ValueObservation+DatabaseValueConvertible.swift */, - DC8CAE41207247FFE6C23DD13296EA70 /* ValueObservation+DistinctUntilChanged.swift */, - 112165439418B44C4BDCFB45D22CBE34 /* ValueObservation+FetchableRecord.swift */, - 9768AEB6008CAEF84324EC4C8938989B /* ValueObservation+Map.swift */, - 8E9C257C00F610EA08A4E186851F37D0 /* ValueObservation+MapReducer.swift */, - CC3E15AF93024917493AF2A2ED452332 /* ValueObservation+Row.swift */, - 1756861507925251CBACC0D005FE1912 /* ValueObserver.swift */, - 6127107FB86700DAE4E4C94A6B226FDF /* ValueReducer.swift */, - A8CA41092FF01838F5755D8533720F37 /* VirtualTableModule.swift */, + 51D52725D39866E31745A1C4CBDBEF64 /* LICENSE */, + 1694430E77D581F66D2781FD97253971 /* MuslimData.podspec */, + 8D68092E711BB73E99F34A4E0757BC37 /* README.md */, ); - name = standard; + name = Pod; sourceTree = ""; }; - 56E59EAC7BD785ACAD5B73A9F16A4562 /* Targets Support Files */ = { + 7D21635765A4F7BB81E71D1205E35216 /* Support Files */ = { isa = PBXGroup; children = ( - BC6A3109B0382DD7ED30F7B029C8D579 /* Pods-MuslimData_Example */, - 8433FF044CF8AAB9BB28545CD240BCBE /* Pods-MuslimData_Tests */, + 3B232EFA04D2A907B4327166A5314284 /* MuslimData.modulemap */, + 6F7506C8792FBFB2B07AD8B85B5C3ADD /* MuslimData-dummy.m */, + 904F4120DAA573A68ACF64F1E116B95D /* MuslimData-Info.plist */, + 730CC813817A01C3345FB6628C3F374F /* MuslimData-prefix.pch */, + 29EF83B1D17B2AA944D71FF61892E3D7 /* MuslimData-umbrella.h */, + 0F524B59DAF2332C1379730B07D76C1B /* MuslimData.debug.xcconfig */, + ACBA7BBDC459B70F0ACB3413B3906649 /* MuslimData.release.xcconfig */, ); - name = "Targets Support Files"; + name = "Support Files"; + path = "Example/Pods/Target Support Files/MuslimData"; sourceTree = ""; }; - 5B32A0A6C3385773AA423D017A5BFE73 /* Azkars */ = { + 8CB66BA5D960E81A62CF8F97F6FF8576 /* PrayerTimes */ = { isa = PBXGroup; children = ( - BB2B3F9D2BF7D6132661A531E7BB2F12 /* AzkarCategory.swift */, - 94586B16D5D2DCA4B4E22C167DD17B61 /* AzkarChapter.swift */, - 2FFBDBD6E148D8CD2D3E5D40636ABE46 /* AzkarItem.swift */, + 5D3E0CD6709358AFF08D1535414B5CC6 /* Prayer.swift */, + 1D9D64AFF2D5180626BD6EE6238EE30D /* PrayerAttribute.swift */, + DA68F2CB5BE572106E41C45020F9797C /* PrayerTime.swift */, + 52D7F3BF5B125E5D8B02C6498D4ED182 /* TimeFormat.swift */, ); - path = Azkars; + name = PrayerTimes; + path = PrayerTimes; sourceTree = ""; }; - 6A7E60A4A85B5746C77AA59AF4549B00 /* Development Pods */ = { + 932B4DC53D5F7057293A5B7BAA72B1C4 /* Repository */ = { isa = PBXGroup; children = ( - D6987B66A5B198235A8BB606A32FC336 /* MuslimData */, + FD51BACBD28D9EE11984C183825D66AD /* MuslimRepository.swift */, + 1155FBAC7ADB560A7D21F0F646E77F1F /* Repository.swift */, ); - name = "Development Pods"; + name = Repository; + path = Sources/MuslimData/Repository; sourceTree = ""; }; - 6C85BC022E11396A542DB08BF82032BE /* Pod */ = { + 951B761DF3A47FB2C95D04DDE3765644 /* Location */ = { isa = PBXGroup; children = ( - 208FD7047BA6E0490F50904E4F73EC84 /* LICENSE */, - 720E3E47CB7DDE45FA7550A02D097ACD /* MuslimData.podspec */, - 5198A73019ED73FEB081FFEF93349F97 /* README.md */, + 34A9CD20B785EC16445BB4CCD8A65A97 /* Location.swift */, ); - name = Pod; + name = Location; + path = Location; sourceTree = ""; }; - 8433FF044CF8AAB9BB28545CD240BCBE /* Pods-MuslimData_Tests */ = { + 9F20133F8D19C485B833163B11650616 /* Azkars */ = { isa = PBXGroup; children = ( - 61F8ACBAFE985B333B35C4976084CBA2 /* Pods-MuslimData_Tests.modulemap */, - 6627A4FEECAC11B54281F6CF5A53278A /* Pods-MuslimData_Tests-acknowledgements.markdown */, - 743A1901BFD326063BEDE3DD34614586 /* Pods-MuslimData_Tests-acknowledgements.plist */, - 30678A7CEDBC6447D947E5D4EC9E1173 /* Pods-MuslimData_Tests-dummy.m */, - 9F05530485A897CD1D0A0A27D17A90BE /* Pods-MuslimData_Tests-Info.plist */, - 0D50A25ECF1C68729F9ECA92736E0517 /* Pods-MuslimData_Tests-umbrella.h */, - FB29E142D18858D1242D2F378682A8F8 /* Pods-MuslimData_Tests.debug.xcconfig */, - BCC7E5208F1383E700C4820E6EC5F37A /* Pods-MuslimData_Tests.release.xcconfig */, + B1080CF86161774FC324D019BB74E7FA /* AzkarCategory.swift */, + 7D6A8BE5B76B247298A79BFF89DF6D29 /* AzkarChapter.swift */, + C6AD0B87216E32B86C7F4855A5F6BDE1 /* AzkarItem.swift */, ); - name = "Pods-MuslimData_Tests"; - path = "Target Support Files/Pods-MuslimData_Tests"; + name = Azkars; + path = Azkars; sourceTree = ""; }; - 866E63CE55E402583D758698042106F7 /* iOS */ = { + A57E08E510E2F4BC22C08B498B22445A /* standard */ = { isa = PBXGroup; children = ( - 7FD7232797ACF3F6F7685B58BCDC00C7 /* Foundation.framework */, - A49D0B537A24E7B6779BDF2FF4BF1376 /* UIKit.framework */, + DE67BF28E65F99081D8B19B49D8BBA0A /* Association.swift */, + EC1E7ED6955D27B6C52BCB568C182949 /* AssociationAggregate.swift */, + BF82642D2452B676DE57B1758497FD6E /* BelongsToAssociation.swift */, + 992079014BF8ABA32EA866CBF1AEFBDD /* CGFloat.swift */, + 9CE552E45ACF80214D40921DD03CAA67 /* Column.swift */, + 4DD1E81E01020BE507304429A36F9976 /* Configuration.swift */, + 740370A5EC50C2D78ED000F028CEAD26 /* Cursor.swift */, + A83C9A0047B7665B321CE637EBB71CB5 /* Data.swift */, + A594A615D1610A6A82241572E57C4A87 /* Database.swift */, + 6F24513440BECF3F4711B37E2873F911 /* Database+Schema.swift */, + 9F67789688FB3673E6008AEA51847BB9 /* Database+Statements.swift */, + CB1821A1110F31EEDD916328777B65CA /* DatabaseCollation.swift */, + CBCD71E190AB01AEDA957A91752CA0B0 /* DatabaseDateComponents.swift */, + 9810ED848A8370D28A206952D1E634FA /* DatabaseError.swift */, + 6E1D40C1A883759045B7FB69D2D1B0DB /* DatabaseFunction.swift */, + CE7B03B77F2F0A31ED478363C72D8A24 /* DatabaseMigrator.swift */, + 798DB5BE9EB09CBDF299C90C481A9110 /* DatabasePool.swift */, + BFCBA8F76DA14E950E08C706D2A92E64 /* DatabasePromise.swift */, + 2347D1DE9EE5CCD0DE9F7A916A8102F8 /* DatabaseQueue.swift */, + 2F5ADFF5989279CA7A2083ACE8E04686 /* DatabaseReader.swift */, + 56FEEB1D0A0093852C8360424DE7C77C /* DatabaseRegion.swift */, + 61BA38261B622111B36F880E9829A137 /* DatabaseRegionObservation.swift */, + F66B8189DE409C6CE416BAA423ECCE75 /* DatabaseSchemaCache.swift */, + 36043B93868C7DB00D4017D9C4FA38FA /* DatabaseSnapshot.swift */, + 340D6C9CF4EA28E78B5B7EC4BAE876F8 /* DatabaseValue.swift */, + 844CE98E42007DDFB8D4BFF8DAA2EF15 /* DatabaseValueConversion.swift */, + 3D0BFFCE7DA2A58457C26354A62B0987 /* DatabaseValueConvertible.swift */, + 4EED1A4504790AF7E6F5240F27DBEF61 /* DatabaseValueConvertible+Decodable.swift */, + E60A9D3FA5C081F82DB4B0B9178F7405 /* DatabaseValueConvertible+Encodable.swift */, + 8E4E05505643C3270EBD487F65E68FAC /* DatabaseValueConvertible+RawRepresentable.swift */, + BEBAE4960F59932E1A399C109A453E0C /* DatabaseValueConvertible+ReferenceConvertible.swift */, + 5E97570A73E421384DAD384510A90FFF /* DatabaseWriter.swift */, + 9EA31FB39C8D6B4D3E53D80D093D2F6F /* Date.swift */, + 736E75FFBCE1C9C3C052ED6848ECAA3A /* EncodableRecord.swift */, + BBE913A6C322FB7BA4C11487C3ECB221 /* EncodableRecord+Encodable.swift */, + 4468899EAFE6991759EA8A46BB51BA91 /* FetchableRecord.swift */, + CCE86FA4B74834175DEDACF492416DDA /* FetchableRecord+Decodable.swift */, + EA1F96A960AFA0054EB6D2173ADB6993 /* FetchableRecord+QueryInterfaceRequest.swift */, + 6135EABC840E345AC834E8572D35D1B2 /* FetchableRecord+TableRecord.swift */, + A2FCC2BA27CDFBC62682AE669A77AE1D /* FetchedRecordsController.swift */, + 44B93E97B50A2C3968F611666B05EE12 /* FetchRequest.swift */, + 7CC1C60D10CB6A29C0181276AB532200 /* FTS3.swift */, + 00D6C2C95FD0E1A287EA068E42E4A2B2 /* FTS3+QueryInterface.swift */, + 56DEB559B5A5DCE1B324FB12C5E0A1FC /* FTS3Pattern.swift */, + A35410C80E22F178FE1666DEE71A3252 /* FTS3TokenizerDescriptor.swift */, + A9260AA5117FA49534554748ACD1E7BC /* FTS4.swift */, + C4181F7638B42161C4FE446BDEA1ADC5 /* FTS5.swift */, + 612B94F9D0155E187C8B3EC4978453CC /* FTS5+QueryInterface.swift */, + 1428D60F918864DEF88EB111C77C2519 /* FTS5CustomTokenizer.swift */, + E496549682A5A201323B61D591167A4A /* FTS5Pattern.swift */, + C286D53E1D7D0D96BD4C534CFEB86E5E /* FTS5Tokenizer.swift */, + 079E0846208ED8C64AE0141E80D5AF30 /* FTS5TokenizerDescriptor.swift */, + 5376CE97B980678A6B2CE4CDC1F3E1E7 /* FTS5WrapperTokenizer.swift */, + 13088891A66C735364301AC000712CE0 /* GRDB.h */, + 84ADB6717063112A6383A1C160F86C26 /* GRDB-4.0.swift */, + 524CC7BFB573E8D444A899F3AA99FFC6 /* GRDB-Bridging.h */, + 80BC3878E43FC7BC9CC5A386968117CE /* grdb_config.h */, + 08AE18009E789149C931ECC333F2189A /* HasManyAssociation.swift */, + DE8C30B4C6ACCB9F1B626D0CF6DC4D2C /* HasManyThroughAssociation.swift */, + 2E4B908C46D8AC8246EC4E00DC32EE6E /* HasOneAssociation.swift */, + 39DD281AEC3E59FB3A0277BC475473C6 /* HasOneThroughAssociation.swift */, + 4A328852E5AC5CD0A7F532F806C27C46 /* Inflections.swift */, + FDD77D03BF3203412EACD1B9A8B887D5 /* Inflections+English.swift */, + E79461AEF0D85C606ACD69EF9B8C8939 /* Migration.swift */, + F07F62F624F83DF0B8480FCEEFBADA32 /* NSData.swift */, + 11236E27D6499D7928B236123927E583 /* NSNull.swift */, + 664686B6ABA608503F83F85979F0687B /* NSNumber.swift */, + FCCA917D100B6F5A3512DB297210C53C /* NSString.swift */, + E7A10B0C7660263FD83A5CD29F2E1165 /* OrderedDictionary.swift */, + 8E2B6DDCB8FBDC144EFF6CF15E9FAC07 /* PersistableRecord.swift */, + 5422A9FBD155A4783EAB1DBC2D4413EB /* Pool.swift */, + DEE88C13D61A786DFAB09EAD3D25A351 /* QueryInterfaceRequest.swift */, + 4F8B2F0AC21F8A9AA0C4DAF6A289539C /* QueryInterfaceRequest+Association.swift */, + F6119B7DCF1679F35ADE30E741827C78 /* ReadWriteBox.swift */, + E68F0140AC5E63E44C720D4D0D22D415 /* Record.swift */, + F65D060B3ED7C64571E263EC2AA76419 /* RequestProtocols.swift */, + 00E93A5697877EDDADF2B97223FF6260 /* Result.swift */, + BFF1D9F025C44D7FAEEE0206D731A765 /* Row.swift */, + F48E1D2E2EE31EA5F8CDF16FBF28591E /* Row+QueryInterfaceRequest.swift */, + A8FD966EA188EC1FB1DA0C5734E4B36A /* RowAdapter.swift */, + 35B3000913B306C6B9EA60E706939697 /* SchedulingWatchdog.swift */, + 0271944F72BFBCF03BEBC7F9625E332B /* SerializedDatabase.swift */, + DE42771047CDEDC16B7A058FFFC770C7 /* SQLAssociation.swift */, + 35E063D67D1999B9CF83B528F48C749A /* SQLCollatedExpression.swift */, + D30BAFCE984848BDEBF194A2899567EA /* SQLCollection.swift */, + D142D2DDF4BFBB74839269DB42B8692C /* SQLExpressible.swift */, + 64162F22C59C71C0145CBCB56A60959E /* SQLExpression.swift */, + 3A37AB04CE371562BF8E71E72FF7DCC2 /* SQLExpression+QueryInterface.swift */, + C8F096D89EED3D262636E1838D0D2180 /* SQLForeignKeyRequest.swift */, + 3586E5B7A2694DEC693A9A2D081D420A /* SQLFunctions.swift */, + 44E2482E80E8ABCEB62ADF9795702D10 /* SQLGenerationContext.swift */, + 15A7DEB36B2A2D60D21564BC296A4D3B /* SQLInterpolation.swift */, + 0809A71A0BA55AB90A71EC6E1734B81F /* SQLInterpolation+QueryInterface.swift */, + 375F9CF0AC63BC7CF0AF8682C8BF1751 /* SQLiteDateParser.swift */, + 1F72F39252476A5889AC2504BE74ED92 /* SQLLiteral.swift */, + 65AA78E233337BE07809C0BCE36F7925 /* SQLOperators.swift */, + 4D2F8E884941CCCB42A30760A3AEBB42 /* SQLOrdering.swift */, + 6617214BBCD73E8681833F4DEB505C18 /* SQLQuery.swift */, + A3FD392A87C27DC4A006672018F8EAAF /* SQLQueryGenerator.swift */, + 96B1FED296230650927F5C8E53F05DAC /* SQLRelation.swift */, + EEA27CDC4C954599103EAB46FC89D71E /* SQLRequest.swift */, + B635DCB1E6D60260828C27E3C1366FD2 /* SQLSelectable.swift */, + EA5D05CF1C40BFDA3E4AF4AA9FA1AB0B /* SQLSelectable+QueryInterface.swift */, + B15106707D4C78899C33C2C9A781E277 /* SQLSpecificExpressible+QueryInterface.swift */, + A7E99DCA167FB7C8523CBE7E30C75E87 /* StandardLibrary.swift */, + 14A94D67DD3B9C4170250E8C7A307207 /* Statement.swift */, + 76A6406A1762BAFF98F6CD7FF7EE7FF0 /* StatementAuthorizer.swift */, + 1030CDC442B65527D048702297A698A8 /* StatementColumnConvertible.swift */, + B1081094773556A6A464D2CD55EAD506 /* TableDefinition.swift */, + 5951C4A078EF26CE50BDF528E6187642 /* TableRecord.swift */, + 3EE756FB280A4709B342CCB851AF8B87 /* TableRecord+Association.swift */, + 59F05D12626E41B596F1F220097E173A /* TableRecord+QueryInterfaceRequest.swift */, + C351E742746F64DC32068BFDBF920798 /* TransactionObserver.swift */, + 464EAD3E4BAD6DE5D12979750026ACB4 /* URL.swift */, + 5B43031A46D1FB9BDF3622252D66C3CF /* Utils.swift */, + 983C554E80E2287925036A568A9537FB /* UUID.swift */, + EE91E12DE279B781B318C35432A3D8DB /* ValueObservation.swift */, + EEFDF28A6D90C1E561747E5F01EF8D40 /* ValueObservation+Combine.swift */, + A9CAACFD9D4F26952E59D5D9C90D2528 /* ValueObservation+CompactMap.swift */, + 8558236B5D95448121116192CDF82D7C /* ValueObservation+Count.swift */, + BF327E118920934B9AD7EA46DCA48965 /* ValueObservation+DatabaseValueConvertible.swift */, + 6C148EB18C09F4877D62A86109CADBEC /* ValueObservation+DistinctUntilChanged.swift */, + 093944E617B52AF936D889D4EA4FC246 /* ValueObservation+FetchableRecord.swift */, + A151C2196CAB62A5C9D0509FFF5D3BFC /* ValueObservation+Map.swift */, + 00D864FACE1073789EB5028B18AF3981 /* ValueObservation+MapReducer.swift */, + 0D81A451F08F038FA755936DE3D1590A /* ValueObservation+Row.swift */, + A6250B466AAE090B46198B61F8C838EF /* ValueObserver.swift */, + 84505976E3D76B2D94620C69841FCC56 /* ValueReducer.swift */, + CB75F83D1AE48C88A0A85D56CF0F13B0 /* VirtualTableModule.swift */, ); - name = iOS; + name = standard; sourceTree = ""; }; - 8D92D353CC7766D3072B3133A23D2705 /* Names */ = { + ABCA95CF9BF72190F63EB64F11E378BE /* Names */ = { isa = PBXGroup; children = ( - 730FF805483A83B2584256EEDC5D2639 /* Language.swift */, - 401A16EADAEB6FE46A4F5411CCD2A9F3 /* Name.swift */, + D860051DE87F8574AFEFF56F7C619598 /* Language.swift */, + A020DF84492FD75A8638CB22DFE52845 /* Name.swift */, ); + name = Names; path = Names; sourceTree = ""; }; - A08711B133A02CDCC7C1F09A0D69CB4A /* Products */ = { + B7C590C380D5FD85D98A6911C4AD19CF /* Pods */ = { isa = PBXGroup; children = ( - 57083C76476CFFD9C6281EB0FA5CF562 /* GRDB.framework */, - 2E88CF46329DBA47B53B98F005E11EE3 /* MuslimData.framework */, - E8487A5B3066D2B150E82D87B277D480 /* Pods_MuslimData_Example.framework */, - 9A0D52E8D92DD8E648D19B837936563A /* Pods_MuslimData_Tests.framework */, + C9462BE1F590E69CA21CD39B2E5B73E2 /* GRDB.swift */, ); - name = Products; + name = Pods; sourceTree = ""; }; - B7C590C380D5FD85D98A6911C4AD19CF /* Pods */ = { + C8F2A6EDC52AB2BB9A8B3EE835E73CCC /* DB Helper */ = { isa = PBXGroup; children = ( - 2B81C12C52C5CB2D888908B65FF9D6DD /* GRDB.swift */, + A31E7F6537B28EF0C3FD098B5230A169 /* DBHelper.swift */, ); - name = Pods; + name = "DB Helper"; + path = "Sources/MuslimData/DB Helper"; sourceTree = ""; }; - BC6A3109B0382DD7ED30F7B029C8D579 /* Pods-MuslimData_Example */ = { + C9462BE1F590E69CA21CD39B2E5B73E2 /* GRDB.swift */ = { isa = PBXGroup; children = ( - FCEC1934853314773A885F07F9B3BF31 /* Pods-MuslimData_Example.modulemap */, - B10666A74448608EAA8F42120078B6D5 /* Pods-MuslimData_Example-acknowledgements.markdown */, - 2F75C56ED8BD1951FC8172C608B20303 /* Pods-MuslimData_Example-acknowledgements.plist */, - 6C7CD5013FEE27004C7AF144E4470ADA /* Pods-MuslimData_Example-dummy.m */, - D451D66CDD9B42CD20A5663E52C4ECED /* Pods-MuslimData_Example-frameworks.sh */, - AD435788979CC448129314A6071C6725 /* Pods-MuslimData_Example-Info.plist */, - B0646069865C88FAA7E0EDB542E2ACE1 /* Pods-MuslimData_Example-umbrella.h */, - B053232FB4BC0D06EA67CAF95D29114D /* Pods-MuslimData_Example.debug.xcconfig */, - 74E7C387B223D2421080A1FB6A9C4272 /* Pods-MuslimData_Example.release.xcconfig */, + A57E08E510E2F4BC22C08B498B22445A /* standard */, + 303B6609BD098C07EDE9A0B6608CB913 /* Support Files */, ); - name = "Pods-MuslimData_Example"; - path = "Target Support Files/Pods-MuslimData_Example"; + name = GRDB.swift; + path = GRDB.swift; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 6A7E60A4A85B5746C77AA59AF4549B00 /* Development Pods */, - CF8934902F6F6F4DED9F9936B5B2FFC5 /* Frameworks */, + 4B40FE885F2E1BA5D0B23932769EF3EF /* Development Pods */, + 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, B7C590C380D5FD85D98A6911C4AD19CF /* Pods */, - A08711B133A02CDCC7C1F09A0D69CB4A /* Products */, + 20F90913FCFC574FA2140ED7DB8B31FA /* Products */, 56E59EAC7BD785ACAD5B73A9F16A4562 /* Targets Support Files */, ); sourceTree = ""; }; - CF862A95B5D3FFC023257833F1193CE5 /* Resources */ = { + DDB9EAB727B98C9BCBB4F32678BB6B72 /* Resources */ = { isa = PBXGroup; children = ( - 2D6CD44629CC5BF2009B527C /* muslim_db_v2.0.0.db */, - 2D0F97A42B813E8B003D46C5 /* CHANGELOG.md */, + 80CDA964EF94F8B5E9C39C8F8655A1B7 /* CHANGELOG.md */, + 9E58180EF7E8F6358C3395350061BE44 /* muslim_db_v2.0.0.db */, ); name = Resources; + path = Sources/MuslimData/Resources; sourceTree = ""; }; - CF8934902F6F6F4DED9F9936B5B2FFC5 /* Frameworks */ = { + E451C634DC4F2E7A7F35A670F39CEAC7 /* Pods-MuslimData_Example */ = { isa = PBXGroup; children = ( - F7AD95BB7089C067668FE8E0C1262934 /* GRDB.framework */, - 866E63CE55E402583D758698042106F7 /* iOS */, + B5376286590A5DC3461F11C7A14157ED /* Pods-MuslimData_Example.modulemap */, + 6C1437F36D038A5734484868100FF202 /* Pods-MuslimData_Example-acknowledgements.markdown */, + A69B31388100FB6249EAEE00F4B20660 /* Pods-MuslimData_Example-acknowledgements.plist */, + E787A815C699A533C7E83D8022D22549 /* Pods-MuslimData_Example-dummy.m */, + BB80C27F1B9A36378FC4A5D7FCBE1E2B /* Pods-MuslimData_Example-frameworks.sh */, + EB87E2DAAEF3AD58CEFA29770C3FB552 /* Pods-MuslimData_Example-Info.plist */, + 3B543DF39D139A8C78771B681C6ADAA2 /* Pods-MuslimData_Example-umbrella.h */, + 65B9B5758E649467E7C7257B2A99B398 /* Pods-MuslimData_Example.debug.xcconfig */, + D846F478C4C834DC00E277228B129083 /* Pods-MuslimData_Example.release.xcconfig */, ); - name = Frameworks; + name = "Pods-MuslimData_Example"; + path = "Target Support Files/Pods-MuslimData_Example"; + sourceTree = ""; + }; + EF39FA1198FE07E6857835AAF964B8DE /* Models */ = { + isa = PBXGroup; + children = ( + 9F20133F8D19C485B833163B11650616 /* Azkars */, + 951B761DF3A47FB2C95D04DDE3765644 /* Location */, + ABCA95CF9BF72190F63EB64F11E378BE /* Names */, + 8CB66BA5D960E81A62CF8F97F6FF8576 /* PrayerTimes */, + ); + name = Models; + path = Sources/MuslimData/Models; sourceTree = ""; }; - D6987B66A5B198235A8BB606A32FC336 /* MuslimData */ = { + F43033D58924C5EF35BC8FC840E14963 /* MuslimData */ = { isa = PBXGroup; children = ( - 0540E1C8A51BDA08F9803F4F5C81C4A9 /* DB Helper */, - 068C7933E1034C5E720F2FEE596A2051 /* Extensions */, - 2DE6E95D2BA8F1F30082A3CE /* Models */, - 2DE6E95A2BA8D75D0082A3CE /* Repository */, - 6C85BC022E11396A542DB08BF82032BE /* Pod */, - CF862A95B5D3FFC023257833F1193CE5 /* Resources */, - 176ED022F62840DFBB6098DE94236B35 /* Support Files */, + C8F2A6EDC52AB2BB9A8B3EE835E73CCC /* DB Helper */, + 4F77BF0B387D3166EE261DBF7601AD91 /* Extensions */, + EF39FA1198FE07E6857835AAF964B8DE /* Models */, + 710E847FA2562322113B664B655B2716 /* Pod */, + 932B4DC53D5F7057293A5B7BAA72B1C4 /* Repository */, + DDB9EAB727B98C9BCBB4F32678BB6B72 /* Resources */, + 7D21635765A4F7BB81E71D1205E35216 /* Support Files */, ); name = MuslimData; path = ../..; sourceTree = ""; }; - F45771AD65677FDC2506D34994A89145 /* PrayerTimes */ = { + FADA63C3804BABFA54DAC9F40016592C /* Pods-MuslimData_Tests */ = { isa = PBXGroup; children = ( - B85117D4C9BE4B6480B1C89933815E58 /* Prayer.swift */, - 2DC6A83C7FE2580E3F2A1AFBB2B117E6 /* PrayerAttribute.swift */, - 6368FFE5512AD8AC9D36EB8427AFA109 /* PrayerTime.swift */, - 65F554C03188A6F204B2036E5CF4B82D /* TimeFormat.swift */, + F19E5112B837424748266228D81EFD17 /* Pods-MuslimData_Tests.modulemap */, + DEAA9A26723DC474A1C6BA07AB1175DF /* Pods-MuslimData_Tests-acknowledgements.markdown */, + 43CD310101BC030B0E0D7FE2056E0246 /* Pods-MuslimData_Tests-acknowledgements.plist */, + DE2B11CBBBF488B9CB4F133978648866 /* Pods-MuslimData_Tests-dummy.m */, + 289812DA2B6E379C3AD31C339A93F33C /* Pods-MuslimData_Tests-Info.plist */, + 0BD85DBCEEE70ED57287FF3D9DEBDCDB /* Pods-MuslimData_Tests-umbrella.h */, + 626FAFDB2FBA47E8F7DA5BEEC5204BF8 /* Pods-MuslimData_Tests.debug.xcconfig */, + DEF87AE545A42D3F0C700E79EC027126 /* Pods-MuslimData_Tests.release.xcconfig */, ); - path = PrayerTimes; + name = "Pods-MuslimData_Tests"; + path = "Target Support Files/Pods-MuslimData_Tests"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 50A49D44D6C6A6A80B9AF3C785EDBBBB /* Headers */ = { + 0446D248DCB5D411AA31EC46FB4FC95A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F6572EE8D863DEBB27A18DC85EFF9C93 /* Pods-MuslimData_Example-umbrella.h in Headers */, + 3CBB30C043CC794613FE17D6DD97672E /* Pods-MuslimData_Tests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5DFB9A73B871F2FB2A9C161679AA7978 /* Headers */ = { + 508FB17862FC53FB42D69FD27DEBB09E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E48C905B8E714A91CF886741081C1685 /* MuslimData-umbrella.h in Headers */, + ACFE9DAF630D0B6ED67057C9A6CDA01B /* MuslimData-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 83EA7FD93CDD3F45C25FFE10005193BC /* Headers */ = { + 73BF50CE9C2F271A4B2F2CC0D80C93F0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5F76D077FDBDB17308D80FBCDDD32F35 /* Pods-MuslimData_Tests-umbrella.h in Headers */, + D91F36DCE86FCA2D5CBCA65C7717910D /* GRDB.h in Headers */, + F6C0E64D046D5A28070C7272E15D8482 /* GRDB-Bridging.h in Headers */, + 3323A5E4F9C70708EB98C2EDDE17C4BF /* grdb_config.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - A78FD3C6EB076C2D222749DACE114640 /* Headers */ = { + EA540B4C8226FF9873A52704DB65C521 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 19EAAEBC608AA44323ABEE5E5C433F82 /* GRDB-Bridging.h in Headers */, - 296E2869F5F3E220C5132E55AF60E2D3 /* GRDB.h in Headers */, - C184186D7F480467C879626B3D8BF92A /* grdb_config.h in Headers */, + 5CABF8C1EBECB5937F2AB3EA836680C0 /* Pods-MuslimData_Example-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 031BFC8F009B7941500B46B8E0782A88 /* Pods-MuslimData_Example */ = { + 0A86C228CFCBC35A1FD284274ED0930F /* GRDB.swift */ = { isa = PBXNativeTarget; - buildConfigurationList = D6C426F6F52203D774BAE97512281049 /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Example" */; + buildConfigurationList = 379A99B8000D763BFF3B2A3744AE6B96 /* Build configuration list for PBXNativeTarget "GRDB.swift" */; buildPhases = ( - 50A49D44D6C6A6A80B9AF3C785EDBBBB /* Headers */, - 9708DE97B859FC1A35B3A97953DD0119 /* Sources */, - 0D23A32B323C417A15285A7F385E85AF /* Frameworks */, - 0A2747FD87CF911E39B73E577A2E3074 /* Resources */, + 73BF50CE9C2F271A4B2F2CC0D80C93F0 /* Headers */, + 4C93671F3EEC628E5DBD75AD7573DD01 /* Sources */, + B0137F0506062E4BBCCEA872D3E655D9 /* Frameworks */, + 8C0255628A32B56A445FE7356BEF4AC8 /* Resources */, ); buildRules = ( ); dependencies = ( - AFFED11E9996F77200F59F6E233634E1 /* PBXTargetDependency */, - F1CCD1F0A0AE20FC5678895260D2C755 /* PBXTargetDependency */, ); - name = "Pods-MuslimData_Example"; - productName = "Pods-MuslimData_Example"; - productReference = E8487A5B3066D2B150E82D87B277D480 /* Pods_MuslimData_Example.framework */; + name = GRDB.swift; + productName = GRDB; + productReference = 17ABD68E920293F080122810A8881638 /* GRDB.swift */; productType = "com.apple.product-type.framework"; }; - 29306E3D5E7D49EB7D15C4173824FD7C /* Pods-MuslimData_Tests */ = { + 35E05502EA95CD6D695F7745FBADAD13 /* MuslimData */ = { isa = PBXNativeTarget; - buildConfigurationList = 04C0E7E86055EA2372B49E9AB0261CD7 /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Tests" */; + buildConfigurationList = C5F36064D02416FA24192939EEFC131D /* Build configuration list for PBXNativeTarget "MuslimData" */; buildPhases = ( - 83EA7FD93CDD3F45C25FFE10005193BC /* Headers */, - A93E584E9ED81BF7BBB7E662D140EB45 /* Sources */, - D4B5FD3802E3D47D8F15954F7F057354 /* Frameworks */, - 19E73AACA2A173EB3285C78888D0DEEF /* Resources */, + 508FB17862FC53FB42D69FD27DEBB09E /* Headers */, + A3EACE86C1CF6DC1C20FF0894DEB4C70 /* Sources */, + F31485D8AB729859516E701A1AE872F6 /* Frameworks */, + 16795CB6C1871C16996A24B849F4B455 /* Resources */, ); buildRules = ( ); dependencies = ( - 88482DAA05E0AFBA543BBABD8DE9CED5 /* PBXTargetDependency */, + 7D64BD038205B726383FCF16E3514F80 /* PBXTargetDependency */, ); - name = "Pods-MuslimData_Tests"; - productName = "Pods-MuslimData_Tests"; - productReference = 9A0D52E8D92DD8E648D19B837936563A /* Pods_MuslimData_Tests.framework */; + name = MuslimData; + productName = MuslimData; + productReference = 1BF6C61A2E5710D67D507E6B33189233 /* MuslimData */; productType = "com.apple.product-type.framework"; }; - B618582B07803EA12417D625ABB2CD21 /* MuslimData */ = { + 5C8D8120CE6858E66FCF3281E4AF1DAC /* Pods-MuslimData_Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = E6AC575DD65F02A142A4F738C9CC2961 /* Build configuration list for PBXNativeTarget "MuslimData" */; + buildConfigurationList = 51E14ECF88587322655EEAB6BFD623C6 /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Tests" */; buildPhases = ( - 5DFB9A73B871F2FB2A9C161679AA7978 /* Headers */, - 4FD41EEDCFB8F107643B19E63BE98FF5 /* Sources */, - E478433A023C0C1A0476B627A242F172 /* Frameworks */, - 42A04E61C2B5A90096CA89F5158401E9 /* Resources */, + 0446D248DCB5D411AA31EC46FB4FC95A /* Headers */, + D60EEA355345897BAE36B654747384D4 /* Sources */, + 47E0B5CD3F296923572A2DE2C2ADAF49 /* Frameworks */, + 09F504ED67423291709FF0990554A0F6 /* Resources */, ); buildRules = ( ); dependencies = ( - 0DA56DE1BA7E04D14E66B0933667A036 /* PBXTargetDependency */, + B774E6D131EC2C58071366E13D48B7C4 /* PBXTargetDependency */, ); - name = MuslimData; - productName = MuslimData; - productReference = 2E88CF46329DBA47B53B98F005E11EE3 /* MuslimData.framework */; + name = "Pods-MuslimData_Tests"; + productName = Pods_MuslimData_Tests; + productReference = 07EFAC04C8D1109BF2827F89C521B330 /* Pods-MuslimData_Tests */; productType = "com.apple.product-type.framework"; }; - FB81F088D9E90653987CAA036FACFD28 /* GRDB.swift */ = { + 87B1B784982A5C7E813417C4403B90BB /* Pods-MuslimData_Example */ = { isa = PBXNativeTarget; - buildConfigurationList = 5699C88B5FC491714743229F1BA2B012 /* Build configuration list for PBXNativeTarget "GRDB.swift" */; + buildConfigurationList = D7CC7619793347427BA64518DBA4E51C /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Example" */; buildPhases = ( - A78FD3C6EB076C2D222749DACE114640 /* Headers */, - FA79B4CF9FB4E3726A81462D40C9F326 /* Sources */, - B411DE3B25D665AE58DF39FDE4CE1A94 /* Frameworks */, - F0AD9D498A9E7088AE78AB6990A1B42E /* Resources */, + EA540B4C8226FF9873A52704DB65C521 /* Headers */, + 8B0434F70A3EEF182A23496AAC823BEF /* Sources */, + CA0D1BFD9B61D0B814C3C1AB9999E9A9 /* Frameworks */, + 8C6B135E12094C1892B3DF10A6323807 /* Resources */, ); buildRules = ( ); dependencies = ( + C45418EB6D65D4B1CE88FBBE563831AF /* PBXTargetDependency */, + C66C74046FE3407D33E5179F1C993677 /* PBXTargetDependency */, ); - name = GRDB.swift; - productName = GRDB.swift; - productReference = 57083C76476CFFD9C6281EB0FA5CF562 /* GRDB.framework */; + name = "Pods-MuslimData_Example"; + productName = Pods_MuslimData_Example; + productReference = BF6342B1D69B37FF9472ADC4C29DD0FF /* Pods-MuslimData_Example */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -931,55 +939,55 @@ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 1420; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 12.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - en, Base, + en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = A08711B133A02CDCC7C1F09A0D69CB4A /* Products */; + productRefGroup = 20F90913FCFC574FA2140ED7DB8B31FA /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - FB81F088D9E90653987CAA036FACFD28 /* GRDB.swift */, - B618582B07803EA12417D625ABB2CD21 /* MuslimData */, - 031BFC8F009B7941500B46B8E0782A88 /* Pods-MuslimData_Example */, - 29306E3D5E7D49EB7D15C4173824FD7C /* Pods-MuslimData_Tests */, + 0A86C228CFCBC35A1FD284274ED0930F /* GRDB.swift */, + 35E05502EA95CD6D695F7745FBADAD13 /* MuslimData */, + 87B1B784982A5C7E813417C4403B90BB /* Pods-MuslimData_Example */, + 5C8D8120CE6858E66FCF3281E4AF1DAC /* Pods-MuslimData_Tests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 0A2747FD87CF911E39B73E577A2E3074 /* Resources */ = { + 09F504ED67423291709FF0990554A0F6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 19E73AACA2A173EB3285C78888D0DEEF /* Resources */ = { + 16795CB6C1871C16996A24B849F4B455 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 10D31D8BB678B6EB68914A683E111988 /* CHANGELOG.md in Resources */, + DE122D9868C51A9D5B987AA3B77FFEE9 /* muslim_db_v2.0.0.db in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 42A04E61C2B5A90096CA89F5158401E9 /* Resources */ = { + 8C0255628A32B56A445FE7356BEF4AC8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2D0F97A52B813E8B003D46C5 /* CHANGELOG.md in Resources */, - 2D6CD44729CC5BF2009B527C /* muslim_db_v2.0.0.db in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F0AD9D498A9E7088AE78AB6990A1B42E /* Resources */ = { + 8C6B135E12094C1892B3DF10A6323807 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -989,215 +997,251 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 4FD41EEDCFB8F107643B19E63BE98FF5 /* Sources */ = { + 4C93671F3EEC628E5DBD75AD7573DD01 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A2C07BA2D862B7CFEE16E632B97EF68C /* AzkarCategory.swift in Sources */, - 4F3B7D7E1C44ECB7A2EBEC681ACE4090 /* AzkarChapter.swift in Sources */, - 5301D3C1ECA5E2D47002FBE7724941FF /* AzkarItem.swift in Sources */, - E4B3988CB85F30F8B1539CDFFC777DE8 /* DateExtensions.swift in Sources */, - 567C4757D6C8959A805420C387798D94 /* DBHelper.swift in Sources */, - 3A22C174B394CB9AF865557B3EA0D761 /* Language.swift in Sources */, - 5B889DD74524BF47702D94225C8676BF /* Location.swift in Sources */, - 2DE6E95C2BA8D8010082A3CE /* MuslimRepository.swift in Sources */, - A7D645073A4902CE19144733BD3B1D6B /* MuslimData-dummy.m in Sources */, - FF616834C38743D535B62B7886C74F07 /* Name.swift in Sources */, - EA0BC2897FF6BE975F969C15629840CB /* Prayer.swift in Sources */, - 2DFE19682BAB81E900665C6B /* Repository.swift in Sources */, - 0AD24AEB225F135FE242003EA86E7039 /* PrayerAttribute.swift in Sources */, - 4232F4B0DC26B878201F9523CEF8F761 /* PrayerTime.swift in Sources */, - E746EBB44033C7F5ECE664C2A2862C8D /* String+Extensions.swift in Sources */, - 49E4580E0F098D7B0E49A777CEEF7085 /* TimeFormat.swift in Sources */, + 10DCD7C680A125DA378E2A287928A224 /* Association.swift in Sources */, + 9FD87DA03BEEDB346222F6BCDAEA3656 /* AssociationAggregate.swift in Sources */, + 11B2B59960DD92FBA263A2550875D84A /* BelongsToAssociation.swift in Sources */, + 2904CD80CF6A3460802CCE57F69AF41F /* CGFloat.swift in Sources */, + 51724EB13ECD41D68F70A91F1F1984F5 /* Column.swift in Sources */, + C695CAEBD933886E0EFFF9CC21FA4E29 /* Configuration.swift in Sources */, + 86AD1E8D4914031B8CD8BF949863A49F /* Cursor.swift in Sources */, + CC174B9845F2BE188E6D0510D8C01FCB /* Data.swift in Sources */, + 4AF4C9AF66D23732A42A735353F19B2F /* Database.swift in Sources */, + 0BC73C42C51ED8C6436B7F51902C0FAF /* Database+Schema.swift in Sources */, + AEE7AED548822B2FA7D0B699FFA56DCD /* Database+Statements.swift in Sources */, + FBFB19ABAB8EC550D058E3B191B6941E /* DatabaseCollation.swift in Sources */, + 98EB7E3136AEC27D3C061073CE79FBA4 /* DatabaseDateComponents.swift in Sources */, + 381D73BEC869D518610B85004A4446E5 /* DatabaseError.swift in Sources */, + 9CF893777F2FE720B6865DFD347717D9 /* DatabaseFunction.swift in Sources */, + 6D27EC8A41CD39E29C55BA67577F49B5 /* DatabaseMigrator.swift in Sources */, + DBF49477A941C15CB0F2E2B48361ECB8 /* DatabasePool.swift in Sources */, + 672244EBC7B1A639BDA1E2C33CE8D12D /* DatabasePromise.swift in Sources */, + 3218FBB3E09F368DCA0233431A1B31B1 /* DatabaseQueue.swift in Sources */, + 3CBAD9986CBB94D7E861E6480970153C /* DatabaseReader.swift in Sources */, + C592F719FE708288EA8E883E1977C01B /* DatabaseRegion.swift in Sources */, + BF7934391FCB3BE40676060A7A8E3204 /* DatabaseRegionObservation.swift in Sources */, + 3DCD65358513F5390E70A7D95CF0C88E /* DatabaseSchemaCache.swift in Sources */, + 8155942BCF5F48E0AF95AEFBF6ABF225 /* DatabaseSnapshot.swift in Sources */, + E23AB586690BA3D53DFE9B12F7275F95 /* DatabaseValue.swift in Sources */, + 57251BACF5A417BC89DDD4E41BC0A655 /* DatabaseValueConversion.swift in Sources */, + 2CD0DCA547DA3B28AF55214735875060 /* DatabaseValueConvertible.swift in Sources */, + 94383EB3E69C08C18C357AB79F8C21AC /* DatabaseValueConvertible+Decodable.swift in Sources */, + CA924ACD1926D78E1E51BE4651500130 /* DatabaseValueConvertible+Encodable.swift in Sources */, + 5960841EDA5BB846BE1B5C917AA533F5 /* DatabaseValueConvertible+RawRepresentable.swift in Sources */, + 71CD4C1E65C22B207230F68612BF3BD5 /* DatabaseValueConvertible+ReferenceConvertible.swift in Sources */, + E8A7551BF6EE1C5D0012AA37A5513213 /* DatabaseWriter.swift in Sources */, + 8F47FE3A73BCFBB274500D5E81641BD8 /* Date.swift in Sources */, + 423E36F30B6250EB99EB4A50BCC5FEED /* EncodableRecord.swift in Sources */, + 20F21FD4EE04549EC5D901C6A3D42051 /* EncodableRecord+Encodable.swift in Sources */, + 9F2C324F0C115BDAF6770E75E4F6F05A /* FetchableRecord.swift in Sources */, + 14B04D3B54373F036D38086FF7F64AB2 /* FetchableRecord+Decodable.swift in Sources */, + EDB43BAEF8986890368B148A379B8633 /* FetchableRecord+QueryInterfaceRequest.swift in Sources */, + 9A7C136377B26BFDDE85420E955E828F /* FetchableRecord+TableRecord.swift in Sources */, + 08BCCE1C892468BBBA2C6439FC8873EA /* FetchedRecordsController.swift in Sources */, + 4B010272563F53C1F4A7EB56462910DD /* FetchRequest.swift in Sources */, + 5AA5595884C8650C66B5121EB80C664C /* FTS3.swift in Sources */, + DE9E44E1B0A168154335C2BA7E916D05 /* FTS3+QueryInterface.swift in Sources */, + 99A478CF77D56C7AA427BCF1D2185F01 /* FTS3Pattern.swift in Sources */, + 2A48909A7DFBB93E21A01AE9FB9ADE85 /* FTS3TokenizerDescriptor.swift in Sources */, + C5688D950388FE11B862E50DBE273A2A /* FTS4.swift in Sources */, + AFDDB5176E907707C03E3B8BAB9A7DC8 /* FTS5.swift in Sources */, + D6B71CA98BEF138A6C29511B9B770119 /* FTS5+QueryInterface.swift in Sources */, + E4A9CEF4D097E1B33730AC0B34E5B8AB /* FTS5CustomTokenizer.swift in Sources */, + C7BD8290465A335982C2B2817C54F4A6 /* FTS5Pattern.swift in Sources */, + C6CF68FE5F54A33B5CDF53A403801DBE /* FTS5Tokenizer.swift in Sources */, + FDCE9620C8A492D3DB2613DDB2A878E1 /* FTS5TokenizerDescriptor.swift in Sources */, + F261D22CFB15575AF31D11DF7986F1B5 /* FTS5WrapperTokenizer.swift in Sources */, + 9ADD14F94A1622B4755FE115902B50C7 /* GRDB-4.0.swift in Sources */, + 0B13C25DAA332D348C8FE6F35B8E394D /* GRDB.swift-dummy.m in Sources */, + 8623B0145319BCBDCB45911FC3716248 /* HasManyAssociation.swift in Sources */, + 22CC957C16EE9373A9B4290AA4ED6AA0 /* HasManyThroughAssociation.swift in Sources */, + E54D49BF5E856AC43F268EE0A7898FA4 /* HasOneAssociation.swift in Sources */, + 8409A7A3F0A1F44440B560BD02B7EB65 /* HasOneThroughAssociation.swift in Sources */, + B75847CFF2033ED02EAC81E896BDE863 /* Inflections.swift in Sources */, + 31F227659934F4BCFB0042DA89989D94 /* Inflections+English.swift in Sources */, + 0C07B15961DD84423806B3C72C003239 /* Migration.swift in Sources */, + B450FE8985D14C5C157C9BAFEEBE1C7A /* NSData.swift in Sources */, + 6DF9A91F46F052EF0A986515BBA802A6 /* NSNull.swift in Sources */, + 5961CDDE4ED0F98ABAAB378D5AAFDB1D /* NSNumber.swift in Sources */, + 6255128A9FE73C1F4E3229D3320FF0B5 /* NSString.swift in Sources */, + 4C64EBFA94BCD55E127222CFFBC04C69 /* OrderedDictionary.swift in Sources */, + 0AA607557F18B41C3EB5289A5C720F47 /* PersistableRecord.swift in Sources */, + 99A556F66D6F9602445A722A3C49E351 /* Pool.swift in Sources */, + 91F847770D950AB558027CEF5A486872 /* QueryInterfaceRequest.swift in Sources */, + 56646D9949730F756FD5FB4A811E25F1 /* QueryInterfaceRequest+Association.swift in Sources */, + A8624D7D3076BFB54DC2B8542297F2C1 /* ReadWriteBox.swift in Sources */, + 06EA1A8F47135B4A17ACB2D26BAE86A4 /* Record.swift in Sources */, + 1A440A20CE875F61FA4923F236C5DB80 /* RequestProtocols.swift in Sources */, + C91922F852F3CF82A64332CC1C9FC1E8 /* Result.swift in Sources */, + 1F7E49C5DAE888114BCB1517930AB815 /* Row.swift in Sources */, + 6FF06E917D72494A3C652D7E4EA7A8F4 /* Row+QueryInterfaceRequest.swift in Sources */, + 45125BB96512230A2EBF036CC7A69B7E /* RowAdapter.swift in Sources */, + C2C7373F605AF06723C0E1AD25225035 /* SchedulingWatchdog.swift in Sources */, + FD9328E1627DF89B75AC709CE2007134 /* SerializedDatabase.swift in Sources */, + 05792E7B2B1875A8E33AD986310E279F /* SQLAssociation.swift in Sources */, + DC61B7FFFC90E3EF20E3235089040DB2 /* SQLCollatedExpression.swift in Sources */, + 8BE8859153ACFE707E6DDD9FDE619BF9 /* SQLCollection.swift in Sources */, + E67DA81B6D35EC6B20CFF3CB27274710 /* SQLExpressible.swift in Sources */, + 5165B678B8A1A04D0A293E077252DAC0 /* SQLExpression.swift in Sources */, + FE7333505F03EE420F81555B650AC12B /* SQLExpression+QueryInterface.swift in Sources */, + 6BD3AB4777D1498A9B626A9F02D44632 /* SQLForeignKeyRequest.swift in Sources */, + B93CF9C18D6039FBF653B5BA6821251A /* SQLFunctions.swift in Sources */, + DD32D7F782E4361D4C89454C0C32A5F2 /* SQLGenerationContext.swift in Sources */, + ACD80B5FE4A0FBB9BCE79DB7280B74DB /* SQLInterpolation.swift in Sources */, + 0AE33E35827196130F612F39E6AA9511 /* SQLInterpolation+QueryInterface.swift in Sources */, + 017100E67A1E1800897650134CF7DE6A /* SQLiteDateParser.swift in Sources */, + BA5F97861B382AC775297D308D2F5D9E /* SQLLiteral.swift in Sources */, + 5EB37471793B7B00698579768F0C3CFF /* SQLOperators.swift in Sources */, + EA04FA1F59DAE1B863A95D8475DEEBA5 /* SQLOrdering.swift in Sources */, + A47F311157375156772F34DEC79C7AC1 /* SQLQuery.swift in Sources */, + 2AD629C4A4F714BE8FB7A144738E4E5D /* SQLQueryGenerator.swift in Sources */, + 04E95DFE987EA646F95334D48378802E /* SQLRelation.swift in Sources */, + 5AD116150EB0DC2A7040D3D79A524661 /* SQLRequest.swift in Sources */, + F9110500A74A4EDDE31D10A22F4C306A /* SQLSelectable.swift in Sources */, + D12E8348DB93B661BE01F3B989BDBC82 /* SQLSelectable+QueryInterface.swift in Sources */, + A602A8049ECE9D77A9489B39FCDC8BFE /* SQLSpecificExpressible+QueryInterface.swift in Sources */, + 0A7AA860E489240B08A25D41BBA74983 /* StandardLibrary.swift in Sources */, + 09CC7395890EB4D61E6B7AB273AA7D83 /* Statement.swift in Sources */, + A5B00A31722CFF959CAFA83CE1772681 /* StatementAuthorizer.swift in Sources */, + 7FB9ACE4A3141B803006A82963187FDA /* StatementColumnConvertible.swift in Sources */, + 5721EBF6F9407455923DCB004F263158 /* TableDefinition.swift in Sources */, + 0546DA073F90C6118F0257337E143B5C /* TableRecord.swift in Sources */, + 874C20F8BFB0B1F04A58DBD1273620B5 /* TableRecord+Association.swift in Sources */, + A5B7DC70DB74B8D550946CEF1518A466 /* TableRecord+QueryInterfaceRequest.swift in Sources */, + 407F2988EFEF7526F9D1334EDB7F72B6 /* TransactionObserver.swift in Sources */, + 215CD75B1818369F268C2F34C0CE1959 /* URL.swift in Sources */, + 3BB28BF26BFDF0636B75188C9070E7AF /* Utils.swift in Sources */, + 7534E2B56426F355DD978C6224B46FDD /* UUID.swift in Sources */, + 2E4175254C6C530AAA65348527456179 /* ValueObservation.swift in Sources */, + 630D1F558EDEC847D73F2A33AD2BD4C9 /* ValueObservation+Combine.swift in Sources */, + 110AD354AF4B25121D882CEE2E192377 /* ValueObservation+CompactMap.swift in Sources */, + 6739991E2B88A9C6B1F247A32871C77F /* ValueObservation+Count.swift in Sources */, + AD88AF5B3A65CD3423071EB46BB4C78C /* ValueObservation+DatabaseValueConvertible.swift in Sources */, + 1302720D764C0D78217785711574C146 /* ValueObservation+DistinctUntilChanged.swift in Sources */, + 46F4181A36A729B3A8C73F75CE5C0F5A /* ValueObservation+FetchableRecord.swift in Sources */, + B68C64C2CFF1682DC6831206D363F289 /* ValueObservation+Map.swift in Sources */, + CCAE93D8B6E2F417F4A37E519B4BD567 /* ValueObservation+MapReducer.swift in Sources */, + 0AC8CBE32F1F042A4591BF19CFC74D36 /* ValueObservation+Row.swift in Sources */, + 0532A2FFCC1D7BE3AFC1F0BD64FD4E1B /* ValueObserver.swift in Sources */, + 89F8459CC1490BFEFA068D5B87266C99 /* ValueReducer.swift in Sources */, + 93E62306A467841910EE260C3FBBC7D1 /* VirtualTableModule.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9708DE97B859FC1A35B3A97953DD0119 /* Sources */ = { + 8B0434F70A3EEF182A23496AAC823BEF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DB7E6F762C72F6CFE76C9F5313AA2DAC /* Pods-MuslimData_Example-dummy.m in Sources */, + 5B155BAD5A7A3CB67D6BD57819071AAE /* Pods-MuslimData_Example-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A93E584E9ED81BF7BBB7E662D140EB45 /* Sources */ = { + A3EACE86C1CF6DC1C20FF0894DEB4C70 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 612D5576922DA12E36C71B8D99680421 /* Pods-MuslimData_Tests-dummy.m in Sources */, + 50212346A63C32618C9ADA10A1DF18A9 /* AzkarCategory.swift in Sources */, + CBBB7FA02EAE0C5960DDA6BA3240581F /* AzkarChapter.swift in Sources */, + CD838E8C8C55E9EC4ADF60FD9F3F50B6 /* AzkarItem.swift in Sources */, + A89CD38444529575CDAA3B043B78F82A /* CHANGELOG.md in Sources */, + F7030CD3F4A0A195D82A93FA399DC288 /* DateExtensions.swift in Sources */, + 35DD8491C8257EE510292171F72B16B5 /* DBHelper.swift in Sources */, + 25C1F12A65651337C95CE3AA1C270FFD /* Language.swift in Sources */, + B3666972AADD12C032E180312A6E0054 /* Location.swift in Sources */, + C44C3EB46AB4B908279430092D61BB89 /* muslim_db_v2.0.0.db in Sources */, + D5798123039B4E95BA8E99EB23BA5AA2 /* MuslimData-dummy.m in Sources */, + 581BE2110A4F70454962F512B5CD48D7 /* MuslimRepository.swift in Sources */, + 0CAE2CE3EBA6D91FDE8B144BDC38EA75 /* Name.swift in Sources */, + D4C2A4492A414CE181FDD2825038A37C /* Prayer.swift in Sources */, + 726BDAF6672123C0FC06876E00CF40BB /* PrayerAttribute.swift in Sources */, + 65B76004379D42F12DBC219C4A65A5F1 /* PrayerTime.swift in Sources */, + B119448E22AD6D03A5F0220D8880030D /* Repository.swift in Sources */, + E0B5CEB15E69B7AB763FBF76A835B897 /* String+Extensions.swift in Sources */, + 69D145D32F61AD3E10F27039A4D43230 /* TimeFormat.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FA79B4CF9FB4E3726A81462D40C9F326 /* Sources */ = { + D60EEA355345897BAE36B654747384D4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E7EC009AC91B60BFE2989DC43D5253F2 /* Association.swift in Sources */, - 8C8DDF01955D5FB72AE73979CD218F36 /* AssociationAggregate.swift in Sources */, - 82FBE1672788EB416F7D7232748EA236 /* BelongsToAssociation.swift in Sources */, - D6F8A02145C28A736FD8A0A8BF7EB783 /* CGFloat.swift in Sources */, - 8691CEE725ED2C7C06E086770DB7757B /* Column.swift in Sources */, - A38C252839DFC6B34277E40395DA94C1 /* Configuration.swift in Sources */, - 72988A6CFA36E266D4FE0AF9DEADFC50 /* Cursor.swift in Sources */, - 5EA0894094250A2D9B56630274A92DD8 /* Data.swift in Sources */, - 622F287E4490422F197E00D242F18209 /* Database+Schema.swift in Sources */, - 66F92BFF9384A67BB00CA346C5554550 /* Database+Statements.swift in Sources */, - 1CAA3EDF7EBE5B64C6F193EB77CF398D /* Database.swift in Sources */, - 000B5FF0F2E60440DE83E1CDEF81BD43 /* DatabaseCollation.swift in Sources */, - 676EF897E9236CB90575B3F9CFCD3120 /* DatabaseDateComponents.swift in Sources */, - 2136CBA14769165E58DDA619D2903003 /* DatabaseError.swift in Sources */, - A69D080C6DC5CCD1C8153338B1B4BEF1 /* DatabaseFunction.swift in Sources */, - 22B2CC4684AD540D4DC22B38F0A1D4B8 /* DatabaseMigrator.swift in Sources */, - 46DCBB7C162FC503B1AF52D6A59CB87F /* DatabasePool.swift in Sources */, - 0C99CC73940BDB5696917C42DE00B262 /* DatabasePromise.swift in Sources */, - F73E45DCB4A2E3D31C00A4EDC76213AC /* DatabaseQueue.swift in Sources */, - B03A35D413AA6ACB4F1BE28702E84333 /* DatabaseReader.swift in Sources */, - 0C02D06017D674FB3D221B3082D52242 /* DatabaseRegion.swift in Sources */, - 83728421B1D35408CC150F9A5366A386 /* DatabaseRegionObservation.swift in Sources */, - FB9485218620ACEFA3967734BC256E2C /* DatabaseSchemaCache.swift in Sources */, - B5B1E0C592A08E5665915D2BC1A0D9E8 /* DatabaseSnapshot.swift in Sources */, - E8C7E279307C3DB919A3E0D67FCC114A /* DatabaseValue.swift in Sources */, - 07E87312FC3CA6D83F78905E504BCE9C /* DatabaseValueConversion.swift in Sources */, - F96737610B1BD0E614F153636059C2F4 /* DatabaseValueConvertible+Decodable.swift in Sources */, - BD802C1DC1B139EDAB311C7709A00CB0 /* DatabaseValueConvertible+Encodable.swift in Sources */, - 33FDF2697ECE2E34513CACBC1EDFDB51 /* DatabaseValueConvertible+RawRepresentable.swift in Sources */, - A9346A4922DFB8C725C8722D99258AF8 /* DatabaseValueConvertible+ReferenceConvertible.swift in Sources */, - B8244EA7A9D7EA478BC043649E3F256D /* DatabaseValueConvertible.swift in Sources */, - 55127675DE18916F1A1148A62002E454 /* DatabaseWriter.swift in Sources */, - F909FEBC62AD743990EB2D7A3D594332 /* Date.swift in Sources */, - 1BA72BD73CE8FCF542D23CBD4E18A2D8 /* EncodableRecord+Encodable.swift in Sources */, - D4CA4FA4E5050BD998B823D705F3BE76 /* EncodableRecord.swift in Sources */, - 7EFEF55B0CC98496F1408917DD408225 /* FetchableRecord+Decodable.swift in Sources */, - C4E2B1658AC3663D15AA9F2531B7BFD6 /* FetchableRecord+QueryInterfaceRequest.swift in Sources */, - 2B130AEAB2EE4BD7997DB369572A684A /* FetchableRecord+TableRecord.swift in Sources */, - 9EF00602B746DE476813B33D60E7B8B5 /* FetchableRecord.swift in Sources */, - 9F2DF35D15A048345D6F3253521B57F3 /* FetchedRecordsController.swift in Sources */, - 10B2282DEF61B85E70A0877BE83B21DE /* FetchRequest.swift in Sources */, - 8F776D68D6DEFD38CCF85B4276D968E0 /* FTS3+QueryInterface.swift in Sources */, - 459E5AD9A0DF5E01D04CAD6D23929282 /* FTS3.swift in Sources */, - 750ACAC53406F3B7C04FCD17174BA343 /* FTS3Pattern.swift in Sources */, - 35A9B68C8D7AC42A8187DC1F8AEC095A /* FTS3TokenizerDescriptor.swift in Sources */, - 499A61F937A27F0C2BAF4ECB402B4152 /* FTS4.swift in Sources */, - 318B2D4FBE83F08BB67C2AA6A52977AB /* FTS5+QueryInterface.swift in Sources */, - 81F2E0E03397CB5AE8A9FA1961C6AB67 /* FTS5.swift in Sources */, - 91F28A0A35BA0F4F8FB3F005D7253C45 /* FTS5CustomTokenizer.swift in Sources */, - 69C357CAA8533B915C6268E88A349008 /* FTS5Pattern.swift in Sources */, - 6ADA4C725A1F552DE188C42ED13897F5 /* FTS5Tokenizer.swift in Sources */, - C31B69B2E5A6B91C7202FCE6A3B6A1E4 /* FTS5TokenizerDescriptor.swift in Sources */, - FB5122536928EA7E76459AF5E6555CEE /* FTS5WrapperTokenizer.swift in Sources */, - 1C3D3D4CBD9412DA99FE9CE8577F8856 /* GRDB-4.0.swift in Sources */, - A9286B0849F46D5349C42CDD9E3FCBD8 /* GRDB.swift-dummy.m in Sources */, - A4F753F4A25E639F6EBBD469F1C821EF /* HasManyAssociation.swift in Sources */, - 5DDB2B240C6F6C89EBB5A129D2F6B960 /* HasManyThroughAssociation.swift in Sources */, - F5C741AE24465B84517D53DB2FE025A3 /* HasOneAssociation.swift in Sources */, - E3F8678E8337CD65A23D6FB611CD6D89 /* HasOneThroughAssociation.swift in Sources */, - 6B8E4A743436EED9C9D1D5D72A0D2F27 /* Inflections+English.swift in Sources */, - 6B8F3C1D6214E7352C7856A50EB7406B /* Inflections.swift in Sources */, - 3E373FA762B90937FE09682DC5BE6FCE /* Migration.swift in Sources */, - 20467EF687049794ACE9F46BD89B36A9 /* NSData.swift in Sources */, - 43694454258CB0903238325B1122E5A1 /* NSNull.swift in Sources */, - AC842DD31D9FD9F8A80F393309AC1A2B /* NSNumber.swift in Sources */, - 6DE3CE29183585530907EB1C3CCC2726 /* NSString.swift in Sources */, - F5885BDC210752638AFF3EAF38651DC9 /* OrderedDictionary.swift in Sources */, - 6D2323C4C7DF66474D1ABCAD305F0689 /* PersistableRecord.swift in Sources */, - B09F1124D798A0E3AFA81B0B79F80E36 /* Pool.swift in Sources */, - D030773C11115860A55CDFCE6904BF38 /* QueryInterfaceRequest+Association.swift in Sources */, - 7D65B46A1F2441D9147FE78F07AB373F /* QueryInterfaceRequest.swift in Sources */, - 423266C51CEEE11551EF493E0E9D41FC /* ReadWriteBox.swift in Sources */, - 90DF4F4E9630E63609F3CF6642505E25 /* Record.swift in Sources */, - DC050E33E340108BA79B38A9195EAFCC /* RequestProtocols.swift in Sources */, - 95327339DAA1511EE65E735E37DA42C5 /* Result.swift in Sources */, - 933318275B26D35CB5734E128B3BB5A4 /* Row+QueryInterfaceRequest.swift in Sources */, - F0EF5074C899CD456B95D2F724F9067B /* Row.swift in Sources */, - 4697DE621262D990332671D683A6EB00 /* RowAdapter.swift in Sources */, - 737942B8F96BC31238E7F0B8F3609D68 /* SchedulingWatchdog.swift in Sources */, - D628E893B835D23BBAED9343E59610F9 /* SerializedDatabase.swift in Sources */, - B60E22BAD03836CB0720C853D1B19341 /* SQLAssociation.swift in Sources */, - 02750A16FAA074E14BB1C0936016B286 /* SQLCollatedExpression.swift in Sources */, - 85D8463381D9C856410C3B80AE8DD159 /* SQLCollection.swift in Sources */, - 13F6B7CE384A0A2CE2A7E12616535089 /* SQLExpressible.swift in Sources */, - 7D94091D2C1067867BA50E9DAF18CE17 /* SQLExpression+QueryInterface.swift in Sources */, - FDA5B665C9D4F6C74D991D68EC23A297 /* SQLExpression.swift in Sources */, - BA76D4525CC0A4865E2AAA90336118D8 /* SQLForeignKeyRequest.swift in Sources */, - 889F226413C21D59F2BFFBC2C92DB9EA /* SQLFunctions.swift in Sources */, - 15BFA9419F7B8F44B90DB2A0685D8416 /* SQLGenerationContext.swift in Sources */, - 2844C8F86E572981747D5F7D57A47079 /* SQLInterpolation+QueryInterface.swift in Sources */, - 473A628F8D25C06F0352CDB563A8F71E /* SQLInterpolation.swift in Sources */, - 739400B0F56D496D47483FC196D4C91A /* SQLiteDateParser.swift in Sources */, - 821BAA59509043E640391CFA942C918C /* SQLLiteral.swift in Sources */, - 49D85D0B0DAA2BDADA2BBD09C2319058 /* SQLOperators.swift in Sources */, - E0E942A9C82C4FEF89A2EED08A776332 /* SQLOrdering.swift in Sources */, - 92B69B37E5ADEA0DDCDEC06396885052 /* SQLQuery.swift in Sources */, - D828D98E5A5A48B3FDC5B486064626C6 /* SQLQueryGenerator.swift in Sources */, - D67D1521F3C5B0C03409EBAB72604C30 /* SQLRelation.swift in Sources */, - 4F791AEE35BB3276A68EDD48C35BC44E /* SQLRequest.swift in Sources */, - 54EB702C1486DC310031B3DAED1FE3DC /* SQLSelectable+QueryInterface.swift in Sources */, - F375CD882264F61911A3B5F7CC6E2310 /* SQLSelectable.swift in Sources */, - CCA3C990B6DE174297BE934A2728C421 /* SQLSpecificExpressible+QueryInterface.swift in Sources */, - C4F0D6EE223CBD552F269B36DE389B8B /* StandardLibrary.swift in Sources */, - 41677C6E7B38372C96FF8074BE163189 /* Statement.swift in Sources */, - 2A050272F5AA9419EACC2B68583FBF0C /* StatementAuthorizer.swift in Sources */, - 11AAE1599E6093A219A889D2DAE80ECA /* StatementColumnConvertible.swift in Sources */, - D1A2EF0386442ECD20338199E9DB8099 /* TableDefinition.swift in Sources */, - 1A5226373797A66B9468D3C1F5C4D825 /* TableRecord+Association.swift in Sources */, - 9D661C0F8785669F6E4A88754F9C81EF /* TableRecord+QueryInterfaceRequest.swift in Sources */, - ED942EC9C394EBF13A2F679EC94192C7 /* TableRecord.swift in Sources */, - F70DB94ADA336509026869AAF426BEA3 /* TransactionObserver.swift in Sources */, - 79549123A16832B9B715EB4DCBE521EC /* URL.swift in Sources */, - E0E07E6C3622B91F444A2F81EECCA4A2 /* Utils.swift in Sources */, - 0E0B8626BCD149D02290F230544A789A /* UUID.swift in Sources */, - 6D2993298E9964AF6D54F095E3DA46EF /* ValueObservation+Combine.swift in Sources */, - 80EFCEB2F5ED66AAB527232A517F5F81 /* ValueObservation+CompactMap.swift in Sources */, - D6E75BDE3181F62E6B81499F5989808D /* ValueObservation+Count.swift in Sources */, - 121E4E7A4C0459415A9B883D506D3FBC /* ValueObservation+DatabaseValueConvertible.swift in Sources */, - 28AC5449494C7BB3E1D2C61A23D88B3E /* ValueObservation+DistinctUntilChanged.swift in Sources */, - 394451DC1DB1945ED4FF137FDE90A8E4 /* ValueObservation+FetchableRecord.swift in Sources */, - 443EAD393975455814198C533E80384A /* ValueObservation+Map.swift in Sources */, - 4429FB29F5620E0A1845105ACD23FDEA /* ValueObservation+MapReducer.swift in Sources */, - 9D8D0F9EF2B61EBF2D539080CD08FCE0 /* ValueObservation+Row.swift in Sources */, - 1EF47C87D5BC5C950E090F8519C6FD30 /* ValueObservation.swift in Sources */, - 9D12AC35A63C05E9F0EE63EB506CEB9F /* ValueObserver.swift in Sources */, - 65D90C1E01EF19802462954F69E983E5 /* ValueReducer.swift in Sources */, - 747435A2AB2CAFBAFD7651734659C6B2 /* VirtualTableModule.swift in Sources */, + 8CB07EE29755E83E64300A3CAF1720E8 /* Pods-MuslimData_Tests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0DA56DE1BA7E04D14E66B0933667A036 /* PBXTargetDependency */ = { + 7D64BD038205B726383FCF16E3514F80 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GRDB.swift; - target = FB81F088D9E90653987CAA036FACFD28 /* GRDB.swift */; - targetProxy = 3DE8392EBF9E858F78A3D0BC375D811B /* PBXContainerItemProxy */; + target = 0A86C228CFCBC35A1FD284274ED0930F /* GRDB.swift */; + targetProxy = 952DED73CD3493BCE5970144033D1887 /* PBXContainerItemProxy */; }; - 88482DAA05E0AFBA543BBABD8DE9CED5 /* PBXTargetDependency */ = { + B774E6D131EC2C58071366E13D48B7C4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Pods-MuslimData_Example"; - target = 031BFC8F009B7941500B46B8E0782A88 /* Pods-MuslimData_Example */; - targetProxy = 4F03C233FDF9A651A45430E56D389C40 /* PBXContainerItemProxy */; + target = 87B1B784982A5C7E813417C4403B90BB /* Pods-MuslimData_Example */; + targetProxy = DB64360DDEC60608B4D08463E07A8F9B /* PBXContainerItemProxy */; }; - AFFED11E9996F77200F59F6E233634E1 /* PBXTargetDependency */ = { + C45418EB6D65D4B1CE88FBBE563831AF /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GRDB.swift; - target = FB81F088D9E90653987CAA036FACFD28 /* GRDB.swift */; - targetProxy = 1ED7D8A0A4218E980A192470A3FF01C8 /* PBXContainerItemProxy */; + target = 0A86C228CFCBC35A1FD284274ED0930F /* GRDB.swift */; + targetProxy = B98FCE2CA12598ACDA61883D0FD21409 /* PBXContainerItemProxy */; }; - F1CCD1F0A0AE20FC5678895260D2C755 /* PBXTargetDependency */ = { + C66C74046FE3407D33E5179F1C993677 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = MuslimData; - target = B618582B07803EA12417D625ABB2CD21 /* MuslimData */; - targetProxy = 4017E5378AFE304FFFFB252C0F0305F9 /* PBXContainerItemProxy */; + target = 35E05502EA95CD6D695F7745FBADAD13 /* MuslimData */; + targetProxy = 292733CD321409D2EC9B370D7E32087E /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 044C78BECED4CB71EBCA877C548CC8EF /* Release */ = { + 4C463AA01BF6D8376B48D9446F5F05E7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AB5AEBDF6E57653433892BB405F0FC2 /* GRDB.swift.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/GRDB.swift/GRDB.swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/GRDB.swift/GRDB.swift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/GRDB.swift/GRDB.swift.modulemap"; + PRODUCT_MODULE_NAME = GRDB; + PRODUCT_NAME = GRDB; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 4D3F40707BD4BDF24350005F427142DA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 14A7257E831A9D87198C29B792FDF9B6 /* MuslimData.xcconfig */; + baseConfigurationReference = 65B9B5758E649467E7C7257B2A99B398 /* Pods-MuslimData_Example.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1206,14 +1250,90 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MuslimData/MuslimData-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MuslimData/MuslimData-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MuslimData/MuslimData.modulemap"; - PRODUCT_MODULE_NAME = MuslimData; - PRODUCT_NAME = MuslimData; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 590FCC4592BC2EA9E9B7DA477CB49C35 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 626FAFDB2FBA47E8F7DA5BEEC5204BF8 /* Pods-MuslimData_Tests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 5AAB2DB02D5DED7739205FDB0E5ABB28 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A1003C353C0CF946F8940551748269D2 /* GRDB.swift.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/GRDB.swift/GRDB.swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/GRDB.swift/GRDB.swift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/GRDB.swift/GRDB.swift.modulemap"; + PRODUCT_MODULE_NAME = GRDB; + PRODUCT_NAME = GRDB; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -1225,7 +1345,7 @@ }; name = Release; }; - 3048B0C5C704DFFF688DA57F5380ED58 /* Release */ = { + 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -1260,14 +1380,16 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; + DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1277,49 +1399,19 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.2; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; - name = Release; - }; - 35567F50788FA524934891EA64B610A2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D425DD46CBA81B4F5985DBFD029CC0EE /* GRDB.swift.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/GRDB.swift/GRDB.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GRDB.swift/GRDB.swift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GRDB.swift/GRDB.swift.modulemap"; - PRODUCT_MODULE_NAME = GRDB; - PRODUCT_NAME = GRDB; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; + name = Debug; }; - 5B0C8287D755FD95091CF35D87FB8B2D /* Debug */ = { + 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -1354,17 +1446,13 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", + "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1374,59 +1462,23 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.2; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; - name = Debug; - }; - 69BAFAA36E0CE1E40890D16995C6FA3B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FB29E142D18858D1242D2F378682A8F8 /* Pods-MuslimData_Tests.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; + name = Release; }; - 7B6F7A1FE15E71CC36E5394A9803C9B7 /* Debug */ = { + CE9FB61519EED0E8E585A81CB1110A5C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B053232FB4BC0D06EA67CAF95D29114D /* Pods-MuslimData_Example.debug.xcconfig */; + baseConfigurationReference = D846F478C4C834DC00E277228B129083 /* Pods-MuslimData_Example.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1437,8 +1489,12 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.modulemap"; OTHER_LDFLAGS = ""; @@ -1449,18 +1505,17 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 95F8A44AFCD5FF3F3A2084B71D977628 /* Release */ = { + D066BE4BC2676A5AE6E87DACF7531A78 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCC7E5208F1383E700C4820E6EC5F37A /* Pods-MuslimData_Tests.release.xcconfig */; + baseConfigurationReference = ACBA7BBDC459B70F0ACB3413B3906649 /* MuslimData.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1469,19 +1524,22 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MuslimData/MuslimData-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MuslimData/MuslimData-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/MuslimData/MuslimData.modulemap"; + PRODUCT_MODULE_NAME = MuslimData; + PRODUCT_NAME = MuslimData; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.10; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -1489,12 +1547,11 @@ }; name = Release; }; - 98CCEEBA6A09004EE203D45B50911146 /* Debug */ = { + E17AC1108A87A18C69CFB6D24002121D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 14A7257E831A9D87198C29B792FDF9B6 /* MuslimData.xcconfig */; + baseConfigurationReference = 0F524B59DAF2332C1379730B07D76C1B /* MuslimData.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1506,28 +1563,31 @@ GCC_PREFIX_HEADER = "Target Support Files/MuslimData/MuslimData-prefix.pch"; INFOPLIST_FILE = "Target Support Files/MuslimData/MuslimData-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MODULEMAP_FILE = "Target Support Files/MuslimData/MuslimData.modulemap"; PRODUCT_MODULE_NAME = MuslimData; PRODUCT_NAME = MuslimData; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; + SWIFT_VERSION = 5.10; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - DD65C1CE247B0AE7DF1B5CE14B4A09DC /* Release */ = { + FF40A1B18D6EC2041A36BB94EDD9554E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 74E7C387B223D2421080A1FB6A9C4272 /* Pods-MuslimData_Example.release.xcconfig */; + baseConfigurationReference = DEF87AE545A42D3F0C700E79EC027126 /* Pods-MuslimData_Tests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1536,12 +1596,16 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -1556,45 +1620,14 @@ }; name = Release; }; - F097C3ED0444DF5A5FD8934BE2C3C429 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D425DD46CBA81B4F5985DBFD029CC0EE /* GRDB.swift.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/GRDB.swift/GRDB.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GRDB.swift/GRDB.swift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GRDB.swift/GRDB.swift.modulemap"; - PRODUCT_MODULE_NAME = GRDB; - PRODUCT_NAME = GRDB; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 04C0E7E86055EA2372B49E9AB0261CD7 /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Tests" */ = { + 379A99B8000D763BFF3B2A3744AE6B96 /* Build configuration list for PBXNativeTarget "GRDB.swift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 69BAFAA36E0CE1E40890D16995C6FA3B /* Debug */, - 95F8A44AFCD5FF3F3A2084B71D977628 /* Release */, + 4C463AA01BF6D8376B48D9446F5F05E7 /* Debug */, + 5AAB2DB02D5DED7739205FDB0E5ABB28 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1602,35 +1635,35 @@ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5B0C8287D755FD95091CF35D87FB8B2D /* Debug */, - 3048B0C5C704DFFF688DA57F5380ED58 /* Release */, + 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */, + 9E406C6AAF85E580207CD97B0044DEAB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5699C88B5FC491714743229F1BA2B012 /* Build configuration list for PBXNativeTarget "GRDB.swift" */ = { + 51E14ECF88587322655EEAB6BFD623C6 /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - F097C3ED0444DF5A5FD8934BE2C3C429 /* Debug */, - 35567F50788FA524934891EA64B610A2 /* Release */, + 590FCC4592BC2EA9E9B7DA477CB49C35 /* Debug */, + FF40A1B18D6EC2041A36BB94EDD9554E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D6C426F6F52203D774BAE97512281049 /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Example" */ = { + C5F36064D02416FA24192939EEFC131D /* Build configuration list for PBXNativeTarget "MuslimData" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7B6F7A1FE15E71CC36E5394A9803C9B7 /* Debug */, - DD65C1CE247B0AE7DF1B5CE14B4A09DC /* Release */, + E17AC1108A87A18C69CFB6D24002121D /* Debug */, + D066BE4BC2676A5AE6E87DACF7531A78 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E6AC575DD65F02A142A4F738C9CC2961 /* Build configuration list for PBXNativeTarget "MuslimData" */ = { + D7CC7619793347427BA64518DBA4E51C /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - 98CCEEBA6A09004EE203D45B50911146 /* Debug */, - 044C78BECED4CB71EBCA877C548CC8EF /* Release */, + 4D3F40707BD4BDF24350005F427142DA /* Debug */, + CE9FB61519EED0E8E585A81CB1110A5C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-Info.plist b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-Info.plist index b672cd7..5ce460e 100755 --- a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-Info.plist +++ b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.debug.xcconfig b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.debug.xcconfig new file mode 100644 index 0000000..5199863 --- /dev/null +++ b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.debug.xcconfig @@ -0,0 +1,15 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GRDB.swift +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.release.xcconfig b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.release.xcconfig new file mode 100644 index 0000000..5199863 --- /dev/null +++ b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.release.xcconfig @@ -0,0 +1,15 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GRDB.swift +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData-Info.plist b/Example/Pods/Target Support Files/MuslimData/MuslimData-Info.plist index 2243fe6..2d5470e 100755 --- a/Example/Pods/Target Support Files/MuslimData/MuslimData-Info.plist +++ b/Example/Pods/Target Support Files/MuslimData/MuslimData-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.0.0 + 1.6.0 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData.debug.xcconfig b/Example/Pods/Target Support Files/MuslimData/MuslimData.debug.xcconfig new file mode 100644 index 0000000..fa4de3b --- /dev/null +++ b/Example/Pods/Target Support Files/MuslimData/MuslimData.debug.xcconfig @@ -0,0 +1,16 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MuslimData +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "GRDB" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData.release.xcconfig b/Example/Pods/Target Support Files/MuslimData/MuslimData.release.xcconfig new file mode 100644 index 0000000..fa4de3b --- /dev/null +++ b/Example/Pods/Target Support Files/MuslimData/MuslimData.release.xcconfig @@ -0,0 +1,16 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MuslimData +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "GRDB" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist index 2243fe6..19cf209 100755 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist +++ b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.markdown index 90e9841..eef694f 100755 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.markdown +++ b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.markdown @@ -14,24 +14,206 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ## MuslimData -Copyright (c) 2018 Kosrat D. Ahmad - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.plist index 2183793..eb20f81 100755 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.plist +++ b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.plist @@ -31,25 +31,207 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI FooterText - Copyright (c) 2018 Kosrat D. Ahmad <kosrat.d.ahmad@gmail.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. License MIT diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh index 78f9b25..4eb56fa 100755 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh @@ -18,10 +18,9 @@ echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +SWIFT_STDLIB_PATH="${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +BCSYMBOLMAP_DIR="BCSymbolMaps" -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html @@ -42,12 +41,22 @@ install_framework() if [ -L "${source}" ]; then echo "Symlinked..." - source="$(readlink "${source}")" + source="$(readlink -f "${source}")" + fi + + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do + echo "Installing $f" + install_bcsymbolmap "$f" "$destination" + rm "$f" + done + rmdir "${source}/${BCSYMBOLMAP_DIR}" fi # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" @@ -80,61 +89,53 @@ install_framework() done fi } - # Copies and strips a vendored dSYM install_dsym() { local source="$1" + warn_missing_arch=${2:-true} if [ -r "$source" ]; then - # Copy the dSYM into a the targets temp dir. + # Copy the dSYM into the targets temp dir. echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" local basename - basename="$(basename -s .framework.dSYM "$source")" - binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then - strip_invalid_archs "$binary" + # Strip invalid architectures from the dSYM. + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" fi - - if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" else # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + mkdir -p "${DWARF_DSYM_FOLDER_PATH}" + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" fi fi } -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identity - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 # Strip invalid architectures strip_invalid_archs() { binary="$1" + warn_missing_arch=${2:-true} # Get architectures for current target binary binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" # Intersect them with the architectures we are building for intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" # If there are no archs supported by this binary then warn the user if [[ -z "$intersected_archs" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - STRIP_BINARY_RETVAL=0 + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=1 return fi stripped="" @@ -148,9 +149,31 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi - STRIP_BINARY_RETVAL=1 + STRIP_BINARY_RETVAL=0 +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" } +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/GRDB.swift/GRDB.framework" diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig index e666dbe..13e9f9d 100755 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig @@ -1,8 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -framework "GRDB" -framework "MuslimData" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS @@ -10,3 +12,5 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig index e666dbe..13e9f9d 100755 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig @@ -1,8 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -framework "GRDB" -framework "MuslimData" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS @@ -10,3 +12,5 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist index 2243fe6..19cf209 100755 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist +++ b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig index c545b14..88be53d 100755 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig @@ -1,9 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -framework "GRDB" -framework "MuslimData" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.release.xcconfig index c545b14..88be53d 100755 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.release.xcconfig @@ -1,9 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -framework "GRDB" -framework "MuslimData" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/MuslimData.podspec b/MuslimData.podspec index c60f3bb..26d98fa 100755 --- a/MuslimData.podspec +++ b/MuslimData.podspec @@ -33,14 +33,14 @@ Pod::Spec.new do |s| s.ios.deployment_target = '13.0' - s.source_files = 'MuslimData/Classes/**/*' + s.source_files = 'Sources/MuslimData/**/*' # s.resource_bundles = { - # 'MuslimData' => ['MuslimData/Assets/*.png'] + # 'MuslimData' => ['MuslimData/Resources/*.png'] # } - s.swift_version = "5.0" - s.resources = 'MuslimData/Assets/**/*' + s.swift_version = "5.10" + s.resources = 'Sources/MuslimData/Resources/**/*' # s.public_header_files = 'Pod/Classes/**/*.h' s.frameworks = 'UIKit' diff --git a/Sources/MuslimData/DB Helper/DBHelper.swift b/Sources/MuslimData/DB Helper/DBHelper.swift index 4fa7a77..be749db 100755 --- a/Sources/MuslimData/DB Helper/DBHelper.swift +++ b/Sources/MuslimData/DB Helper/DBHelper.swift @@ -19,7 +19,8 @@ class DBHelper { private init() { var configuration = Configuration() configuration.readonly = true - let databaseURL = Bundle.module.path(forResource: "muslim_db_v2.0.0", ofType: "db")! + //let databaseURL = Bundle.module.path(forResource: "muslim_db_v2.0.0", ofType: "db")! + let databaseURL = Bundle(for: DBHelper.self).path(forResource: "muslim_db_v2.0.0", ofType: "db")! dbPool = try? DatabasePool(path: databaseURL, configuration: configuration) // Be a nice iOS citizen, and don’t consume too much memory From 95ccd366be063e3f39d5178548e66e8257721655 Mon Sep 17 00:00:00 2001 From: Muhammad Azad Date: Fri, 22 Mar 2024 13:34:21 +0300 Subject: [PATCH 03/44] Fixed database bundle path for cocopod and SMP --- Sources/MuslimData/DB Helper/DBHelper.swift | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Sources/MuslimData/DB Helper/DBHelper.swift b/Sources/MuslimData/DB Helper/DBHelper.swift index be749db..fd9dd9f 100755 --- a/Sources/MuslimData/DB Helper/DBHelper.swift +++ b/Sources/MuslimData/DB Helper/DBHelper.swift @@ -19,14 +19,29 @@ class DBHelper { private init() { var configuration = Configuration() configuration.readonly = true - //let databaseURL = Bundle.module.path(forResource: "muslim_db_v2.0.0", ofType: "db")! - let databaseURL = Bundle(for: DBHelper.self).path(forResource: "muslim_db_v2.0.0", ofType: "db")! + let databaseURL = pathForDatabase() dbPool = try? DatabasePool(path: databaseURL, configuration: configuration) // Be a nice iOS citizen, and don’t consume too much memory // See https://github.com/groue/GRDB.swift/#memory-management dbPool?.setupMemoryManagement(in: UIApplication.shared) } + + //MARK: - Private Methods + + /// Provides the appropriate file path string for the muslim database, + /// taking into account whether the code is integrated using Swift Package Manager or CocoaPods. + /// + /// - Returns: A string representing the full file path to the database. + private func pathForDatabase() -> String { + #if SWIFT_PACKAGE + // SPM Access + return Bundle.module.path(forResource: "muslim_db_v2.0.0", ofType: "db")! + #else + // CocoaPods Access + return Bundle(for: DBHelper.self).path(forResource: "muslim_db_v2.0.0", ofType: "db")! + #endif + } // MARK: - Public Methods From 1bcbf4890b71e23c385521fafb7759eadb1208e8 Mon Sep 17 00:00:00 2001 From: Muhammad Azad Date: Fri, 22 Mar 2024 15:05:01 +0300 Subject: [PATCH 04/44] Update/Add install guiad for SPM to README. Update/Add platform target to Package. --- Package.swift | 3 +++ README.md | 31 ++++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/Package.swift b/Package.swift index f758c71..6c9befa 100644 --- a/Package.swift +++ b/Package.swift @@ -5,6 +5,9 @@ import PackageDescription let package = Package( name: "muslim-data-ios", + platforms: [ + .iOS(.v13) + ], products: [ // Products define the executables and libraries a package produces, making them visible to other packages. .library( diff --git a/README.md b/README.md index 655576f..cca26c3 100755 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![Build Status](https://github.com/kosratdev/muslim-data-ios/actions/workflows/deploy_to_cocoapods.yml/badge.svg)](https://github.com/kosratdev/muslim-data-ios/actions) [![Version](https://img.shields.io/cocoapods/v/MuslimData.svg?style=flat)](https://cocoapods.org/pods/MuslimData) +[![Swift Package Manager](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square)](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat-square) [![License](https://img.shields.io/cocoapods/l/MuslimData.svg?style=flat)](https://cocoapods.org/pods/MuslimData) [![Platform](https://img.shields.io/cocoapods/p/MuslimData.svg?style=flat)](https://cocoapods.org/pods/MuslimData) @@ -21,11 +22,13 @@ To run the example project, clone the repo, and run `pod install` from the Examp ## Requirements -* iOS 10.0+ -* Xcode 10.0+ +* iOS 13.0+ +* Xcode 11.0+ ## Installation +### CocoaPods + MuslimData is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your Podfile: @@ -33,6 +36,28 @@ it, simply add the following line to your Podfile: pod 'MuslimData' ``` +### Swift Package Manager + +The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. + +Once you have your Swift package set up, adding MuslimData as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift` or the Package list in Xcode. + +```swift +dependencies: [ + .package(url: "https://github.com/kosratdev/muslim-data-ios", .upToNextMajor(from: "2.0.0")) +] +``` + +##### Integrate with Xcode: + +If you prefer to manage your Swift packages via Xcode, you can also add Muslim Data as a dependency using Xcode's UI: + +1. Open your Xcode project. +2. Navigate to the `File` menu > `Swift Packages` > `Add Package Dependency...`. +3. Paste the Muslim Data GitHub repository URL (`https://github.com/kosratdev/muslim-data-ios.git`) into the search bar and click `Next`. +4. Choose the version rule (`Up to Next Major` from version `1.0.0`) and click `Next`. +5. Xcode will resolve the package and integrate it into your project. + ## Usage ### Location Helper @@ -44,7 +69,7 @@ There are some location helper methods that provides **offline** Location Search You can search for any cities or places around the world and this is useful when a use doesn't have internet connection or user's location is turned off so you can search here: ```swift -let locations = try! await MuslimData().searchLocation(locationName: "London") +let locations = try! await MuslimRepository().searchLocation(locationName: "London") guard let locations = locations, locations.count > 0 else { print("Location could not be found!") return From a3569ca7e42fe1010520de0a252b164d349fe6dd Mon Sep 17 00:00:00 2001 From: Muhammad Azad Date: Sat, 23 Mar 2024 11:11:57 +0300 Subject: [PATCH 05/44] Remove Tests from example --- Example/MuslimData.xcodeproj/project.pbxproj | 180 ------------------- Example/Tests/AzkarTests.swift | 155 ---------------- Example/Tests/Info.plist | 24 --- Example/Tests/LocationTests.swift | 102 ----------- Example/Tests/NamesTest.swift | 50 ------ Example/Tests/PrayerTests.swift | 57 ------ 6 files changed, 568 deletions(-) delete mode 100755 Example/Tests/AzkarTests.swift delete mode 100755 Example/Tests/Info.plist delete mode 100755 Example/Tests/LocationTests.swift delete mode 100755 Example/Tests/NamesTest.swift delete mode 100755 Example/Tests/PrayerTests.swift diff --git a/Example/MuslimData.xcodeproj/project.pbxproj b/Example/MuslimData.xcodeproj/project.pbxproj index da8b2b0..740783f 100755 --- a/Example/MuslimData.xcodeproj/project.pbxproj +++ b/Example/MuslimData.xcodeproj/project.pbxproj @@ -7,12 +7,8 @@ objects = { /* Begin PBXBuildFile section */ - 2D110EDE216BE7FB002035FA /* PrayerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D110EDD216BE7FB002035FA /* PrayerTests.swift */; }; 2D1D63A32B9CCF2100DBC74B /* MIGRATION_GUIDE.md in Resources */ = {isa = PBXBuildFile; fileRef = 2D1D63A22B9CCF2100DBC74B /* MIGRATION_GUIDE.md */; }; 2D27AC4B2188E621004722BD /* LocationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D27AC4A2188E621004722BD /* LocationViewController.swift */; }; - 2D4558BA21694A5200A08DAF /* LocationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D4558B921694A5200A08DAF /* LocationTests.swift */; }; - 2D6B21C421708D600054F8C0 /* NamesTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6B21C321708D600054F8C0 /* NamesTest.swift */; }; - 2D9FC355217278E0003EF074 /* AzkarTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9FC354217278E0003EF074 /* AzkarTests.swift */; }; 2DBD7E7B218E01AF00B6595B /* AzkarChaptersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DBD7E7A218E01AF00B6595B /* AzkarChaptersViewController.swift */; }; 2DBD7E7E218E05FD00B6595B /* AzkarDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DBD7E7D218E05FD00B6595B /* AzkarDetailViewController.swift */; }; 2DCAA592218C8A7D00F4B065 /* PrayersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DCAA591218C8A7D00F4B065 /* PrayersViewController.swift */; }; @@ -23,27 +19,12 @@ 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; AB4BCD02C3DCCBDDC1561720 /* Pods_MuslimData_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADF54AF43802AA1A3AAAFA2C /* Pods_MuslimData_Example.framework */; }; - CDB24AAE23DBDE3BEC76E09E /* Pods_MuslimData_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6C6730E9A81B0B385FC0760 /* Pods_MuslimData_Tests.framework */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 607FACC81AFB9204008FA782 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 607FACCF1AFB9204008FA782; - remoteInfo = MuslimData; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ 1FA7CF45010583A8DE450B74 /* Pods-MuslimData_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MuslimData_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig"; sourceTree = ""; }; - 2D110EDD216BE7FB002035FA /* PrayerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrayerTests.swift; sourceTree = ""; }; 2D1D63A22B9CCF2100DBC74B /* MIGRATION_GUIDE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = MIGRATION_GUIDE.md; path = ../MIGRATION_GUIDE.md; sourceTree = ""; }; 2D27AC4A2188E621004722BD /* LocationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationViewController.swift; sourceTree = ""; }; - 2D4558B921694A5200A08DAF /* LocationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationTests.swift; sourceTree = ""; }; - 2D6B21C321708D600054F8C0 /* NamesTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesTest.swift; sourceTree = ""; }; - 2D9FC354217278E0003EF074 /* AzkarTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarTests.swift; sourceTree = ""; }; 2DBD7E7A218E01AF00B6595B /* AzkarChaptersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarChaptersViewController.swift; sourceTree = ""; }; 2DBD7E7D218E05FD00B6595B /* AzkarDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarDetailViewController.swift; sourceTree = ""; }; 2DCAA591218C8A7D00F4B065 /* PrayersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrayersViewController.swift; sourceTree = ""; }; @@ -56,8 +37,6 @@ 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 607FACE51AFB9204008FA782 /* MuslimData_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MuslimData_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 74AFAA0290358FD0025B4CFB /* Pods-MuslimData_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MuslimData_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig"; sourceTree = ""; }; ADF54AF43802AA1A3AAAFA2C /* Pods_MuslimData_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MuslimData_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B03E607FABE06466BB50FF62 /* Pods-MuslimData_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MuslimData_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig"; sourceTree = ""; }; @@ -76,14 +55,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 607FACE21AFB9204008FA782 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CDB24AAE23DBDE3BEC76E09E /* Pods_MuslimData_Tests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -157,7 +128,6 @@ children = ( 607FACF51AFB993E008FA782 /* Podspec Metadata */, 607FACD21AFB9204008FA782 /* Example for MuslimData */, - 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, 209A686A541F4C24A075E63C /* Pods */, 41A62F07BE87B6355FB1E1CE /* Frameworks */, @@ -168,7 +138,6 @@ isa = PBXGroup; children = ( 607FACD01AFB9204008FA782 /* MuslimData_Example.app */, - 607FACE51AFB9204008FA782 /* MuslimData_Tests.xctest */, ); name = Products; sourceTree = ""; @@ -195,26 +164,6 @@ name = "Supporting Files"; sourceTree = ""; }; - 607FACE81AFB9204008FA782 /* Tests */ = { - isa = PBXGroup; - children = ( - 2D9FC354217278E0003EF074 /* AzkarTests.swift */, - 2D6B21C321708D600054F8C0 /* NamesTest.swift */, - 2D110EDD216BE7FB002035FA /* PrayerTests.swift */, - 2D4558B921694A5200A08DAF /* LocationTests.swift */, - 607FACE91AFB9204008FA782 /* Supporting Files */, - ); - path = Tests; - sourceTree = ""; - }; - 607FACE91AFB9204008FA782 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 607FACEA1AFB9204008FA782 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { isa = PBXGroup; children = ( @@ -250,25 +199,6 @@ productReference = 607FACD01AFB9204008FA782 /* MuslimData_Example.app */; productType = "com.apple.product-type.application"; }; - 607FACE41AFB9204008FA782 /* MuslimData_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "MuslimData_Tests" */; - buildPhases = ( - 379ECBACD51077EED9BCFABC /* [CP] Check Pods Manifest.lock */, - 607FACE11AFB9204008FA782 /* Sources */, - 607FACE21AFB9204008FA782 /* Frameworks */, - 607FACE31AFB9204008FA782 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 607FACE71AFB9204008FA782 /* PBXTargetDependency */, - ); - name = MuslimData_Tests; - productName = Tests; - productReference = 607FACE51AFB9204008FA782 /* MuslimData_Tests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -284,12 +214,6 @@ DevelopmentTeam = 4HFFW4423Q; LastSwiftMigration = 1020; }; - 607FACE41AFB9204008FA782 = { - CreatedOnToolsVersion = 6.3.1; - DevelopmentTeam = 4HFFW4423Q; - LastSwiftMigration = 1020; - TestTargetID = 607FACCF1AFB9204008FA782; - }; }; }; buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "MuslimData" */; @@ -306,7 +230,6 @@ projectRoot = ""; targets = ( 607FACCF1AFB9204008FA782 /* MuslimData_Example */, - 607FACE41AFB9204008FA782 /* MuslimData_Tests */, ); }; /* End PBXProject section */ @@ -323,13 +246,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 607FACE31AFB9204008FA782 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -371,24 +287,6 @@ shellPath = /bin/sh; shellScript = "if [[ \"$(uname -m)\" == arm64 ]]; then\n export PATH=\"/opt/homebrew/bin:$PATH\"\nfi\n\nif which swiftformat > /dev/null; then\n swiftformat .\nelse\n echo \"warning: SwiftFormat not installed, download from https://github.com/nicklockwood/SwiftFormat\"\nfi\n"; }; - 379ECBACD51077EED9BCFABC /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-MuslimData_Tests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 908034E7F08C00D8F832C38F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -444,27 +342,8 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 607FACE11AFB9204008FA782 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2D110EDE216BE7FB002035FA /* PrayerTests.swift in Sources */, - 2D6B21C421708D600054F8C0 /* NamesTest.swift in Sources */, - 2D4558BA21694A5200A08DAF /* LocationTests.swift in Sources */, - 2D9FC355217278E0003EF074 /* AzkarTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 607FACCF1AFB9204008FA782 /* MuslimData_Example */; - targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ 607FACD91AFB9204008FA782 /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -633,56 +512,6 @@ }; name = Release; }; - 607FACF31AFB9204008FA782 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 74AFAA0290358FD0025B4CFB /* Pods-MuslimData_Tests.debug.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = 4HFFW4423Q; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MuslimData_Example.app/MuslimData_Example"; - }; - name = Debug; - }; - 607FACF41AFB9204008FA782 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5665FE91640402C3D36C56F2 /* Pods-MuslimData_Tests.release.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = 4HFFW4423Q; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MuslimData_Example.app/MuslimData_Example"; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -704,15 +533,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "MuslimData_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 607FACF31AFB9204008FA782 /* Debug */, - 607FACF41AFB9204008FA782 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 607FACC81AFB9204008FA782 /* Project object */; diff --git a/Example/Tests/AzkarTests.swift b/Example/Tests/AzkarTests.swift deleted file mode 100755 index 6a887af..0000000 --- a/Example/Tests/AzkarTests.swift +++ /dev/null @@ -1,155 +0,0 @@ -// -// AzkarTests.swift -// MuslimData_Tests -// -// Created by Kosrat D. Ahmad on 10/13/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -@testable import MuslimData -import XCTest - -class AzkarTests: XCTestCase { - override func setUp() { - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testEnAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .en) - assesAzkarCategories(categories: categories) - } - - func testArAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .ar) - assesAzkarCategories(categories: categories) - } - - func testCkbAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .ckb) - assesAzkarCategories(categories: categories) - } - - func testFaAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .fa) - assesAzkarCategories(categories: categories) - } - - func testRuAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .ru) - assesAzkarCategories(categories: categories) - } - - private func assesAzkarCategories(categories: [AzkarCategory]?) { - XCTAssertNotNil(categories) - XCTAssertEqual(categories!.count, 11) - XCTAssertNotNil(categories![Int.random(in: 0 ..< 11)].name) - } - - func testEnAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .en) - assesAzkarChapters(chapters: chapters) - } - - func testArAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .ar) - assesAzkarChapters(chapters: chapters) - } - - func testCkbAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .ckb) - assesAzkarChapters(chapters: chapters) - } - - func testFaAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .fa) - assesAzkarChapters(chapters: chapters) - } - - func testRuAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .ru) - assesAzkarChapters(chapters: chapters) - } - - private func assesAzkarChapters(chapters: [AzkarChapter]?) { - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 133) - } - - func testAzkarChaptersByCategory() async throws { - // Test English azkar chapters for category id = 1 - var chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 1) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 7) - - // Test English azkar chapters for category id = 2 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 2) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 14) - - // Test English azkar chapters for category id = 3 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 3) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 7) - - // Test English azkar chapters for category id = 4 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 4) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 15) - - // Test English azkar chapters for category id = 5 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 5) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 11) - - // Test English azkar chapters for category id = 6 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 6) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 19) - - // Test English azkar chapters for category id = 7 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 7) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 9) - - // Test English azkar chapters for category id = 8 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 8) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 8) - - // Test English azkar chapters for category id = 9 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 9) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 20) - - // Test English azkar chapters for category id = 10 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 10) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 10) - - // Test English azkar chapters for category id = 11 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 11) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 13) - } - - func testAzkarItems() async throws { - // Test English azkar items for chapter id = 1 - var items = try await MuslimRepository().getAzkarItems(language: .en, chapterId: 1) - XCTAssertNotNil(items) - XCTAssertEqual(items!.count, 4) - - // Test English azkar items for chapter id = 10 - items = try await MuslimRepository().getAzkarItems(language: .en, chapterId: 10) - XCTAssertNotNil(items) - XCTAssertEqual(items!.count, 2) - - // Test English azkar items for chapter id = 100 - items = try await MuslimRepository().getAzkarItems(language: .en, chapterId: 100) - XCTAssertNotNil(items) - XCTAssertEqual(items!.count, 1) - } -} diff --git a/Example/Tests/Info.plist b/Example/Tests/Info.plist deleted file mode 100755 index ba72822..0000000 --- a/Example/Tests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Example/Tests/LocationTests.swift b/Example/Tests/LocationTests.swift deleted file mode 100755 index dc9414f..0000000 --- a/Example/Tests/LocationTests.swift +++ /dev/null @@ -1,102 +0,0 @@ -// -// LocationTests.swift -// MuslimData_Tests -// -// Created by Kosrat D. Ahmad on 10/6/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -@testable import MuslimData -import XCTest - -class LocationTests: XCTestCase { - override func setUp() { - super.setUp() - } - - override func tearDown() { - super.tearDown() - } - - func testLondonGBGeocod() async throws { - // Test (London, GB) which has fixed prayer times. - let location = try await MuslimRepository().geocoder(countryCode: "GB", locationName: "London") - XCTAssertNotNil(location) - XCTAssertEqual(location!.latitude, 51.50853) - XCTAssertEqual(location!.longitude, -0.12574) - XCTAssertEqual(location!.hasFixedPrayerTime, true) - } - - func testUnknownGeocode() async throws { - // Test Nil. - let location = try await MuslimRepository().geocoder(countryCode: "abc", locationName: "Unknown") - XCTAssertNil(location) - } - - func testTehranIRGeocode() async throws { - // Test (Tahran, IR) which hasn't fixed prayer times. - let location = try await MuslimRepository().geocoder(countryCode: "IR", locationName: "Tehran") - XCTAssertNotNil(location) - XCTAssertEqual(location!.latitude, 35.69439) - XCTAssertEqual(location!.longitude, 51.42151) - XCTAssertEqual(location!.hasFixedPrayerTime, false) - } - - func testSoranIQGeocode() async throws { - // Test (Soran, IQ) which has fixed prayer times. - let location = try await MuslimRepository().geocoder(countryCode: "IQ", locationName: "Soran") - XCTAssertNotNil(location) - XCTAssertEqual(location!.latitude, 36.652686) - XCTAssertEqual(location!.longitude, 44.541427) - XCTAssertEqual(location!.hasFixedPrayerTime, true) - } - - func testQasreIQGeocode() async throws { - // Test (Qasre, IQ) which has fixed prayer times. - let location = try await MuslimRepository().geocoder(countryCode: "IQ", locationName: "Qasre") - XCTAssertNotNil(location) - XCTAssertEqual(location!.latitude, 36.557804) - XCTAssertEqual(location!.longitude, 44.827805) - XCTAssertEqual(location!.hasFixedPrayerTime, true) - } - - func testLondonGBReverseGeocode() async throws { - // Test (London, GB) which has fixed prayer times. - let location = try await MuslimRepository().reverseGeocoder(latitude: 51.50853, longitude: -0.12574) - XCTAssertNotNil(location) - XCTAssertEqual(location!.name, "London") - XCTAssertEqual(location!.countryCode, "GB") - XCTAssertEqual(location!.countryName, "United Kingdom") - XCTAssertEqual(location!.hasFixedPrayerTime, true) - } - - func testTehranIRReverseGeocode() async throws { - // Test (Tahran, IR) which hasn't fixed prayer times. - let location = try await MuslimRepository().reverseGeocoder(latitude: 35.69439, longitude: 51.42151) - XCTAssertNotNil(location) - XCTAssertEqual(location!.name, "Tehran") - XCTAssertEqual(location!.countryCode, "IR") - XCTAssertEqual(location!.countryName, "Iran") - XCTAssertEqual(location!.hasFixedPrayerTime, false) - } - - func testSoranIQReverseGeocode() async throws { - // Test (Soran, IQ) which has fixed prayer times. - let location = try await MuslimRepository().reverseGeocoder(latitude: 36.652686, longitude: 44.541427) - XCTAssertNotNil(location) - XCTAssertEqual(location!.name, "Soran") - XCTAssertEqual(location!.countryCode, "IQ") - XCTAssertEqual(location!.countryName, "Iraq") - XCTAssertEqual(location!.hasFixedPrayerTime, true) - } - - func testQasreIQReverseGeocode() async throws { - // Test (Qasre, IQ) which has fixed prayer times. - let location = try await MuslimRepository().reverseGeocoder(latitude: 36.557804, longitude: 44.827805) - XCTAssertNotNil(location) - XCTAssertEqual(location!.name, "Qasre") - XCTAssertEqual(location!.countryCode, "IQ") - XCTAssertEqual(location!.countryName, "Iraq") - XCTAssertEqual(location!.hasFixedPrayerTime, true) - } -} diff --git a/Example/Tests/NamesTest.swift b/Example/Tests/NamesTest.swift deleted file mode 100755 index 4e245b1..0000000 --- a/Example/Tests/NamesTest.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// NamesTest.swift -// MuslimData_Tests -// -// Created by Kosrat D. Ahmad on 10/12/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -@testable import MuslimData -import XCTest - -class NamesTest: XCTestCase { - override func setUp() { - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testEnglishNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .en) - assesNames(names: names) - } - - func testArabicNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .ar) - assesNames(names: names) - } - - func testKurdishNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .ckb) - assesNames(names: names) - } - - func testFarsiNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .fa) - assesNames(names: names) - } - - func testRussianNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .ru) - assesNames(names: names) - } - - private func assesNames(names: [Name]?) { - XCTAssertNotNil(names) - XCTAssertEqual(names!.count, 99) - } -} diff --git a/Example/Tests/PrayerTests.swift b/Example/Tests/PrayerTests.swift deleted file mode 100755 index bd2d23b..0000000 --- a/Example/Tests/PrayerTests.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// PrayerTests.swift -// MuslimData_Tests -// -// Created by Kosrat D. Ahmad on 10/8/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -@testable import MuslimData -import XCTest - -class PrayerTests: XCTestCase { - var attributes: PrayerAttribute! - var date: Date! - var offsets: [Double]! - - override func setUp() { - super.setUp() - // Put setup code here. This method is called before the invocation of each test method in the class. - date = Date(timeIntervalSince1970: 1_538_956_800) // 2018/10/08 - offsets = [1, 1, 1, -1, -1, -1] - attributes = PrayerAttribute(method: .makkah, asrMethod: .shafii, adjustAngle: .angleBased, offsets: offsets) - } - - override func tearDown() { - date = nil - attributes = nil - super.tearDown() - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testAllFixedPrayerTimes() async throws { - let locations = try await MuslimRepository().getAllFixedPrayerLocations() - let date = Date(timeIntervalSince1970: 1_709_206_718) // 2024/02/29 - for location in locations! { - print(location) - let prayerTimes = try await MuslimRepository().getPrayerTimes(location: location, date: date, attributes: attributes) - XCTAssertNotNil(prayerTimes) - } - } - - func testCalculatedPrayer() async throws { - // Test calculated prayer times for Mecca, Saudi Arabia - let mecca = Location(id: 119_496, name: "Mecca", latitude: 21.42664, longitude: 39.82563, countryCode: "SA", - countryName: "Saudi Arabia", hasFixedPrayerTime: false, prayerDependentId: nil) - let prayer = try await MuslimRepository().getPrayerTimes(location: mecca, date: date, attributes: attributes) - - XCTAssertNotNil(prayer) - let stringPrayer = prayer!.formatPrayers(.time24) - XCTAssertEqual(stringPrayer[0], "04:59") - XCTAssertEqual(stringPrayer[1], "06:15") - XCTAssertEqual(stringPrayer[2], "12:09") - XCTAssertEqual(stringPrayer[3], "15:30") - XCTAssertEqual(stringPrayer[4], "18:01") - XCTAssertEqual(stringPrayer[5], "19:31") - } -} From dc9f5a3ec7b0a5b56a51429951d0ddaee3e104a0 Mon Sep 17 00:00:00 2001 From: Muhammad Azad Date: Sat, 23 Mar 2024 14:11:31 +0300 Subject: [PATCH 06/44] Change the example to SwiftUI. Add names of allah to the example. --- Example/.swiftformat | 10 - Example/.swiftlint.yml | 12 - .../AppIcon.appiconset/Contents.json | 13 + Example/Example/Assets.xcassets/Contents.json | 6 + .../ic_nav_azkars.imageset/Contents.json | 10 +- .../ic_nav_azkars.imageset/ic_nav_azkars.pdf | Bin .../ic_nav_location.imageset/Contents.json | 10 +- .../ic_settings_location.pdf | Bin .../ic_nav_names.imageset/Contents.json | 10 +- .../ic_nav_names.imageset/ic_nav_names.pdf | Bin .../ic_nav_prayers.imageset/Contents.json | 10 +- .../ic_nav_my_prayers.pdf | Bin Example/Example/ContentView.swift | 38 + Example/Example/ExampleApp.swift | 20 + Example/Example/Names/NamesRowView.swift | 32 + Example/Example/Names/NamesScreen.swift | 41 + Example/Example/Names/NamesViewModel.swift | 38 + .../Preview Assets.xcassets/Contents.json | 6 + Example/Example/Shared/AppTabs.swift | 22 + .../Example/Shared/ErrorWithRetryView.swift | 42 + Example/MuslimData.xcodeproj/project.pbxproj | 539 - .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcschemes/MuslimData-Example.xcscheme | 111 - .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - Example/MuslimData/AppDelegate.swift | 41 - .../AzkarChaptersViewController.swift | 63 - .../AzkarDetailViewController.swift | 56 - .../MuslimData/Base.lproj/LaunchScreen.xib | 35 - Example/MuslimData/Base.lproj/Main.storyboard | 452 - .../AppIcon.appiconset/Contents.json | 53 - .../MuslimData/Images.xcassets/Contents.json | 6 - Example/MuslimData/Info.plist | 41 - Example/MuslimData/Location.swift | 48 - .../MuslimData/LocationViewController.swift | 111 - Example/MuslimData/NamesViewController.swift | 51 - .../MuslimData/PrayersViewController.swift | 75 - Example/Podfile | 12 - Example/Podfile.lock | 25 - .../GRDB.swift/GRDB/Core/Configuration.swift | 203 - .../Pods/GRDB.swift/GRDB/Core/Cursor.swift | 758 -- .../GRDB/Core/Database+Schema.swift | 616 -- .../GRDB/Core/Database+Statements.swift | 340 - .../Pods/GRDB.swift/GRDB/Core/Database.swift | 1087 -- .../GRDB/Core/DatabaseCollation.swift | 55 - .../GRDB.swift/GRDB/Core/DatabaseError.swift | 270 - .../GRDB/Core/DatabaseFunction.swift | 383 - .../GRDB.swift/GRDB/Core/DatabasePool.swift | 692 -- .../GRDB.swift/GRDB/Core/DatabaseQueue.swift | 365 - .../GRDB.swift/GRDB/Core/DatabaseReader.swift | 271 - .../GRDB.swift/GRDB/Core/DatabaseRegion.swift | 355 - .../GRDB/Core/DatabaseRegionObservation.swift | 133 - .../GRDB/Core/DatabaseSchemaCache.swift | 89 - .../GRDB/Core/DatabaseSnapshot.swift | 160 - .../GRDB.swift/GRDB/Core/DatabaseValue.swift | 341 - .../GRDB/Core/DatabaseValueConversion.swift | 269 - .../GRDB/Core/DatabaseValueConvertible.swift | 575 -- .../GRDB.swift/GRDB/Core/DatabaseWriter.swift | 396 - .../GRDB.swift/GRDB/Core/FetchRequest.swift | 159 - Example/Pods/GRDB.swift/GRDB/Core/Row.swift | 1806 ---- .../GRDB.swift/GRDB/Core/RowAdapter.swift | 545 -- .../GRDB/Core/SQLInterpolation.swift | 33 - .../GRDB.swift/GRDB/Core/SQLLiteral.swift | 145 - .../GRDB.swift/GRDB/Core/SQLRequest.swift | 168 - .../GRDB/Core/SchedulingWatchdog.swift | 57 - .../GRDB/Core/SerializedDatabase.swift | 204 - .../Pods/GRDB.swift/GRDB/Core/Statement.swift | 914 -- .../GRDB/Core/StatementAuthorizer.swift | 184 - .../Core/StatementColumnConvertible.swift | 570 -- .../Core/Support/CoreGraphics/CGFloat.swift | 20 - .../GRDB/Core/Support/Foundation/Data.swift | 41 - .../Foundation/DatabaseDateComponents.swift | 158 - ...alueConvertible+ReferenceConvertible.swift | 41 - .../GRDB/Core/Support/Foundation/Date.swift | 160 - .../GRDB/Core/Support/Foundation/NSData.swift | 21 - .../GRDB/Core/Support/Foundation/NSNull.swift | 15 - .../Core/Support/Foundation/NSNumber.swift | 69 - .../Core/Support/Foundation/NSString.swift | 20 - .../Support/Foundation/SQLiteDateParser.swift | 144 - .../GRDB/Core/Support/Foundation/URL.swift | 24 - .../GRDB/Core/Support/Foundation/UUID.swift | 91 - .../DatabaseValueConvertible+Decodable.swift | 192 - .../DatabaseValueConvertible+Encodable.swift | 106 - ...aseValueConvertible+RawRepresentable.swift | 24 - .../StandardLibrary/StandardLibrary.swift | 715 -- .../GRDB/Core/TransactionObserver.swift | 1333 --- Example/Pods/GRDB.swift/GRDB/FTS/FTS3.swift | 100 - .../GRDB.swift/GRDB/FTS/FTS3Pattern.swift | 131 - .../GRDB/FTS/FTS3TokenizerDescriptor.swift | 130 - Example/Pods/GRDB.swift/GRDB/FTS/FTS4.swift | 328 - Example/Pods/GRDB.swift/GRDB/FTS/FTS5.swift | 407 - .../GRDB/FTS/FTS5CustomTokenizer.swift | 161 - .../GRDB.swift/GRDB/FTS/FTS5Pattern.swift | 121 - .../GRDB.swift/GRDB/FTS/FTS5Tokenizer.swift | 222 - .../GRDB/FTS/FTS5TokenizerDescriptor.swift | 138 - .../GRDB/FTS/FTS5WrapperTokenizer.swift | 149 - .../Pods/GRDB.swift/GRDB/Fixit/GRDB-4.0.swift | 157 - .../GRDB/Migration/DatabaseMigrator.swift | 270 - .../GRDB.swift/GRDB/Migration/Migration.swift | 85 - .../QueryInterface/FTS3+QueryInterface.swift | 55 - .../QueryInterface/FTS5+QueryInterface.swift | 44 - ...etchableRecord+QueryInterfaceRequest.swift | 120 - .../Request/Association/Association.swift | 514 - .../Association/AssociationAggregate.swift | 709 -- .../Association/BelongsToAssociation.swift | 78 - .../Association/HasManyAssociation.swift | 78 - .../HasManyThroughAssociation.swift | 61 - .../Association/HasOneAssociation.swift | 80 - .../HasOneThroughAssociation.swift | 41 - .../QueryInterfaceRequest+Association.swift | 102 - .../Request/QueryInterfaceRequest.swift | 424 - .../Request/RequestProtocols.swift | 522 - .../Row+QueryInterfaceRequest.swift | 219 - .../GRDB/QueryInterface/SQL/Column.swift | 100 - .../QueryInterface/SQL/DatabasePromise.swift | 50 - .../QueryInterface/SQL/SQLAssociation.swift | 353 - .../SQL/SQLCollatedExpression.swift | 73 - .../QueryInterface/SQL/SQLCollection.swift | 63 - .../QueryInterface/SQL/SQLExpressible.swift | 99 - .../SQL/SQLExpression+QueryInterface.swift | 730 -- .../QueryInterface/SQL/SQLExpression.swift | 147 - .../SQL/SQLForeignKeyRequest.swift | 80 - .../QueryInterface/SQL/SQLFunctions.swift | 217 - .../QueryInterface/SQL/SQLOperators.swift | 810 -- .../GRDB/QueryInterface/SQL/SQLOrdering.swift | 56 - .../GRDB/QueryInterface/SQL/SQLQuery.swift | 171 - .../GRDB/QueryInterface/SQL/SQLRelation.swift | 814 -- .../SQL/SQLSelectable+QueryInterface.swift | 149 - .../QueryInterface/SQL/SQLSelectable.swift | 76 - ...QLSpecificExpressible+QueryInterface.swift | 66 - .../SQLGeneration/SQLGenerationContext.swift | 342 - .../SQLGeneration/SQLQueryGenerator.swift | 481 - .../SQLInterpolation+QueryInterface.swift | 149 - .../Schema/TableDefinition.swift | 950 -- .../Schema/VirtualTableModule.swift | 128 - .../TableRecord+Association.swift | 627 -- .../TableRecord+QueryInterfaceRequest.swift | 324 - .../Record/EncodableRecord+Encodable.swift | 370 - .../GRDB/Record/EncodableRecord.swift | 387 - .../Record/FetchableRecord+Decodable.swift | 522 - .../Record/FetchableRecord+TableRecord.swift | 182 - .../GRDB/Record/FetchableRecord.swift | 468 - .../Record/FetchedRecordsController.swift | 1030 -- .../GRDB/Record/PersistableRecord.swift | 986 -- .../Pods/GRDB.swift/GRDB/Record/Record.swift | 355 - .../GRDB.swift/GRDB/Record/TableRecord.swift | 155 - .../GRDB/Utils/Inflections+English.swift | 138 - .../GRDB.swift/GRDB/Utils/Inflections.swift | 238 - .../GRDB/Utils/OrderedDictionary.swift | 152 - Example/Pods/GRDB.swift/GRDB/Utils/Pool.swift | 121 - .../GRDB.swift/GRDB/Utils/ReadWriteBox.swift | 38 - .../Pods/GRDB.swift/GRDB/Utils/Result.swift | 34 - .../Pods/GRDB.swift/GRDB/Utils/Utils.swift | 120 - .../ValueObservation+Combine.swift | 273 - .../ValueObservation+CompactMap.swift | 44 - .../ValueObservation+Count.swift | 33 - ...Observation+DatabaseValueConvertible.swift | 210 - ...alueObservation+DistinctUntilChanged.swift | 47 - .../ValueObservation+FetchableRecord.swift | 192 - .../ValueObservation+Map.swift | 47 - .../ValueObservation+MapReducer.swift | 14 - .../ValueObservation+Row.swift | 186 - .../ValueObservation/ValueObservation.swift | 361 - .../GRDB/ValueObservation/ValueObserver.swift | 87 - .../GRDB/ValueObservation/ValueReducer.swift | 92 - Example/Pods/GRDB.swift/LICENSE | 7 - Example/Pods/GRDB.swift/README.md | 8709 ----------------- .../Pods/GRDB.swift/Support/GRDB-Bridging.h | 0 Example/Pods/GRDB.swift/Support/GRDB.h | 10 - Example/Pods/GRDB.swift/Support/grdb_config.h | 26 - .../Pods/GRDB.swift/Support/module.modulemap | 8 - .../Local Podspecs/MuslimData.podspec.json | 31 - Example/Pods/Manifest.lock | 25 - Example/Pods/Pods.xcodeproj/project.pbxproj | 1674 ---- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../GRDB.swift/GRDB.swift-Info.plist | 26 - .../GRDB.swift/GRDB.swift-dummy.m | 5 - .../GRDB.swift/GRDB.swift-prefix.pch | 12 - .../GRDB.swift/GRDB.swift.debug.xcconfig | 15 - .../GRDB.swift/GRDB.swift.modulemap | 8 - .../GRDB.swift/GRDB.swift.release.xcconfig | 15 - .../GRDB.swift/GRDB.swift.xcconfig | 10 - .../GRDB.swift/Info.plist | 26 - .../MuslimData/Info.plist | 26 - .../MuslimData/MuslimData-Info.plist | 26 - .../MuslimData/MuslimData-dummy.m | 5 - .../MuslimData/MuslimData-prefix.pch | 12 - .../MuslimData/MuslimData-umbrella.h | 16 - .../MuslimData/MuslimData.debug.xcconfig | 16 - .../MuslimData/MuslimData.modulemap | 6 - .../MuslimData/MuslimData.release.xcconfig | 16 - .../MuslimData/MuslimData.xcconfig | 10 - .../ResourceBundle-MuslimData-Info.plist | 24 - .../Pods-MuslimData_Example/Info.plist | 26 - .../Pods-MuslimData_Example-Info.plist | 26 - ...slimData_Example-acknowledgements.markdown | 219 - ...-MuslimData_Example-acknowledgements.plist | 257 - .../Pods-MuslimData_Example-dummy.m | 5 - .../Pods-MuslimData_Example-frameworks.sh | 188 - .../Pods-MuslimData_Example-resources.sh | 118 - .../Pods-MuslimData_Example-umbrella.h | 16 - .../Pods-MuslimData_Example.debug.xcconfig | 16 - .../Pods-MuslimData_Example.modulemap | 6 - .../Pods-MuslimData_Example.release.xcconfig | 16 - .../Pods-MuslimData_Tests/Info.plist | 26 - .../Pods-MuslimData_Tests-Info.plist | 26 - ...MuslimData_Tests-acknowledgements.markdown | 3 - ...ds-MuslimData_Tests-acknowledgements.plist | 29 - .../Pods-MuslimData_Tests-dummy.m | 5 - .../Pods-MuslimData_Tests-frameworks.sh | 146 - .../Pods-MuslimData_Tests-resources.sh | 118 - .../Pods-MuslimData_Tests-umbrella.h | 16 - .../Pods-MuslimData_Tests.debug.xcconfig | 11 - .../Pods-MuslimData_Tests.modulemap | 6 - .../Pods-MuslimData_Tests.release.xcconfig | 11 - 217 files changed, 278 insertions(+), 48563 deletions(-) delete mode 100755 Example/.swiftformat delete mode 100755 Example/.swiftlint.yml create mode 100644 Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Example/Example/Assets.xcassets/Contents.json rename Example/{MuslimData/Images.xcassets => Example/Assets.xcassets}/ic_nav_azkars.imageset/Contents.json (51%) mode change 100755 => 100644 rename Example/{MuslimData/Images.xcassets => Example/Assets.xcassets}/ic_nav_azkars.imageset/ic_nav_azkars.pdf (100%) mode change 100755 => 100644 rename Example/{MuslimData/Images.xcassets => Example/Assets.xcassets}/ic_nav_location.imageset/Contents.json (50%) mode change 100755 => 100644 rename Example/{MuslimData/Images.xcassets => Example/Assets.xcassets}/ic_nav_location.imageset/ic_settings_location.pdf (100%) mode change 100755 => 100644 rename Example/{MuslimData/Images.xcassets => Example/Assets.xcassets}/ic_nav_names.imageset/Contents.json (51%) mode change 100755 => 100644 rename Example/{MuslimData/Images.xcassets => Example/Assets.xcassets}/ic_nav_names.imageset/ic_nav_names.pdf (100%) mode change 100755 => 100644 rename Example/{MuslimData/Images.xcassets => Example/Assets.xcassets}/ic_nav_prayers.imageset/Contents.json (50%) mode change 100755 => 100644 rename Example/{MuslimData/Images.xcassets => Example/Assets.xcassets}/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf (100%) mode change 100755 => 100644 create mode 100644 Example/Example/ContentView.swift create mode 100644 Example/Example/ExampleApp.swift create mode 100644 Example/Example/Names/NamesRowView.swift create mode 100644 Example/Example/Names/NamesScreen.swift create mode 100644 Example/Example/Names/NamesViewModel.swift create mode 100644 Example/Example/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 Example/Example/Shared/AppTabs.swift create mode 100644 Example/Example/Shared/ErrorWithRetryView.swift delete mode 100755 Example/MuslimData.xcodeproj/project.pbxproj delete mode 100755 Example/MuslimData.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Example/MuslimData.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100755 Example/MuslimData.xcodeproj/xcshareddata/xcschemes/MuslimData-Example.xcscheme delete mode 100755 Example/MuslimData.xcworkspace/contents.xcworkspacedata delete mode 100755 Example/MuslimData.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100755 Example/MuslimData/AppDelegate.swift delete mode 100755 Example/MuslimData/AzkarChaptersViewController.swift delete mode 100755 Example/MuslimData/AzkarDetailViewController.swift delete mode 100755 Example/MuslimData/Base.lproj/LaunchScreen.xib delete mode 100755 Example/MuslimData/Base.lproj/Main.storyboard delete mode 100755 Example/MuslimData/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100755 Example/MuslimData/Images.xcassets/Contents.json delete mode 100755 Example/MuslimData/Info.plist delete mode 100755 Example/MuslimData/Location.swift delete mode 100755 Example/MuslimData/LocationViewController.swift delete mode 100755 Example/MuslimData/NamesViewController.swift delete mode 100755 Example/MuslimData/PrayersViewController.swift delete mode 100755 Example/Podfile delete mode 100755 Example/Podfile.lock delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Configuration.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Cursor.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Database+Schema.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Database+Statements.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Database.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseCollation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseError.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseFunction.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabasePool.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseQueue.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseReader.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseRegion.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseRegionObservation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseSchemaCache.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseSnapshot.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseValue.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseValueConversion.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseValueConvertible.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/DatabaseWriter.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/FetchRequest.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Row.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/RowAdapter.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/SQLInterpolation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/SQLLiteral.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/SQLRequest.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/SchedulingWatchdog.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/SerializedDatabase.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Statement.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/StatementAuthorizer.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/StatementColumnConvertible.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/CoreGraphics/CGFloat.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/Data.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/DatabaseDateComponents.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/DatabaseValueConvertible+ReferenceConvertible.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/Date.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSData.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSNull.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSNumber.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSString.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/SQLiteDateParser.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/URL.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/UUID.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Decodable.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Encodable.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+RawRepresentable.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/StandardLibrary.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Core/TransactionObserver.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS3.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS3Pattern.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS3TokenizerDescriptor.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS4.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS5.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS5CustomTokenizer.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS5Pattern.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS5Tokenizer.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS5TokenizerDescriptor.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/FTS/FTS5WrapperTokenizer.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Fixit/GRDB-4.0.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Migration/DatabaseMigrator.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Migration/Migration.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/FTS3+QueryInterface.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/FTS5+QueryInterface.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/FetchableRecord+QueryInterfaceRequest.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/Association.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/AssociationAggregate.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/BelongsToAssociation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasManyAssociation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasManyThroughAssociation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasOneAssociation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasOneThroughAssociation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/QueryInterfaceRequest+Association.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/QueryInterfaceRequest.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/RequestProtocols.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Row+QueryInterfaceRequest.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/Column.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/DatabasePromise.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLAssociation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLCollatedExpression.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLCollection.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpressible.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpression+QueryInterface.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpression.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLForeignKeyRequest.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLFunctions.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLOperators.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLOrdering.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLQuery.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLRelation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSelectable+QueryInterface.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSelectable.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSpecificExpressible+QueryInterface.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLGeneration/SQLGenerationContext.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLGeneration/SQLQueryGenerator.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLInterpolation+QueryInterface.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Schema/TableDefinition.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/Schema/VirtualTableModule.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/TableRecord+Association.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/QueryInterface/TableRecord+QueryInterfaceRequest.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Record/EncodableRecord+Encodable.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Record/EncodableRecord.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord+Decodable.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord+TableRecord.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Record/FetchedRecordsController.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Record/PersistableRecord.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Record/Record.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Record/TableRecord.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Utils/Inflections+English.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Utils/Inflections.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Utils/OrderedDictionary.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Utils/Pool.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Utils/ReadWriteBox.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Utils/Result.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/Utils/Utils.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Combine.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+CompactMap.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Count.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+DatabaseValueConvertible.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+DistinctUntilChanged.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+FetchableRecord.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Map.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+MapReducer.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Row.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObserver.swift delete mode 100755 Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueReducer.swift delete mode 100755 Example/Pods/GRDB.swift/LICENSE delete mode 100755 Example/Pods/GRDB.swift/README.md delete mode 100755 Example/Pods/GRDB.swift/Support/GRDB-Bridging.h delete mode 100755 Example/Pods/GRDB.swift/Support/GRDB.h delete mode 100755 Example/Pods/GRDB.swift/Support/grdb_config.h delete mode 100755 Example/Pods/GRDB.swift/Support/module.modulemap delete mode 100755 Example/Pods/Local Podspecs/MuslimData.podspec.json delete mode 100755 Example/Pods/Manifest.lock delete mode 100644 Example/Pods/Pods.xcodeproj/project.pbxproj delete mode 100755 Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100755 Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100755 Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-Info.plist delete mode 100755 Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-dummy.m delete mode 100755 Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-prefix.pch delete mode 100644 Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.modulemap delete mode 100644 Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.xcconfig delete mode 100755 Example/Pods/Target Support Files/GRDB.swift/Info.plist delete mode 100755 Example/Pods/Target Support Files/MuslimData/Info.plist delete mode 100755 Example/Pods/Target Support Files/MuslimData/MuslimData-Info.plist delete mode 100755 Example/Pods/Target Support Files/MuslimData/MuslimData-dummy.m delete mode 100755 Example/Pods/Target Support Files/MuslimData/MuslimData-prefix.pch delete mode 100755 Example/Pods/Target Support Files/MuslimData/MuslimData-umbrella.h delete mode 100644 Example/Pods/Target Support Files/MuslimData/MuslimData.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/MuslimData/MuslimData.modulemap delete mode 100644 Example/Pods/Target Support Files/MuslimData/MuslimData.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/MuslimData/MuslimData.xcconfig delete mode 100755 Example/Pods/Target Support Files/MuslimData/ResourceBundle-MuslimData-Info.plist delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Info.plist delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.markdown delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.plist delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-dummy.m delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-resources.sh delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-umbrella.h delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.modulemap delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Info.plist delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-acknowledgements.markdown delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-acknowledgements.plist delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-dummy.m delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-frameworks.sh delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-resources.sh delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-umbrella.h delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap delete mode 100755 Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.release.xcconfig diff --git a/Example/.swiftformat b/Example/.swiftformat deleted file mode 100755 index 3fa3cc7..0000000 --- a/Example/.swiftformat +++ /dev/null @@ -1,10 +0,0 @@ -# format options! ---swiftversion 5.1 - -# file options ---exclude Pods - -# rules ---disable trailingCommas,unusedArguments ---disable wrapMultilineStatementBraces - diff --git a/Example/.swiftlint.yml b/Example/.swiftlint.yml deleted file mode 100755 index 8a425c0..0000000 --- a/Example/.swiftlint.yml +++ /dev/null @@ -1,12 +0,0 @@ -excluded: - - Pods - - ../MuslimData/Classes/Models/PrayerTimes/Prayer.swift -included: - - ../MuslimData -identifier_name: - excluded: - - id - - en - - ar - - fa - - ru diff --git a/Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/Example/Assets.xcassets/Contents.json b/Example/Example/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Example/Example/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/MuslimData/Images.xcassets/ic_nav_azkars.imageset/Contents.json b/Example/Example/Assets.xcassets/ic_nav_azkars.imageset/Contents.json old mode 100755 new mode 100644 similarity index 51% rename from Example/MuslimData/Images.xcassets/ic_nav_azkars.imageset/Contents.json rename to Example/Example/Assets.xcassets/ic_nav_azkars.imageset/Contents.json index c307315..5d9a289 --- a/Example/MuslimData/Images.xcassets/ic_nav_azkars.imageset/Contents.json +++ b/Example/Example/Assets.xcassets/ic_nav_azkars.imageset/Contents.json @@ -1,15 +1,15 @@ { "images" : [ { - "idiom" : "universal", - "filename" : "ic_nav_azkars.pdf" + "filename" : "ic_nav_azkars.pdf", + "idiom" : "universal" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 }, "properties" : { "preserves-vector-representation" : true } -} \ No newline at end of file +} diff --git a/Example/MuslimData/Images.xcassets/ic_nav_azkars.imageset/ic_nav_azkars.pdf b/Example/Example/Assets.xcassets/ic_nav_azkars.imageset/ic_nav_azkars.pdf old mode 100755 new mode 100644 similarity index 100% rename from Example/MuslimData/Images.xcassets/ic_nav_azkars.imageset/ic_nav_azkars.pdf rename to Example/Example/Assets.xcassets/ic_nav_azkars.imageset/ic_nav_azkars.pdf diff --git a/Example/MuslimData/Images.xcassets/ic_nav_location.imageset/Contents.json b/Example/Example/Assets.xcassets/ic_nav_location.imageset/Contents.json old mode 100755 new mode 100644 similarity index 50% rename from Example/MuslimData/Images.xcassets/ic_nav_location.imageset/Contents.json rename to Example/Example/Assets.xcassets/ic_nav_location.imageset/Contents.json index 17689aa..e5bd772 --- a/Example/MuslimData/Images.xcassets/ic_nav_location.imageset/Contents.json +++ b/Example/Example/Assets.xcassets/ic_nav_location.imageset/Contents.json @@ -1,15 +1,15 @@ { "images" : [ { - "idiom" : "universal", - "filename" : "ic_settings_location.pdf" + "filename" : "ic_settings_location.pdf", + "idiom" : "universal" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 }, "properties" : { "preserves-vector-representation" : true } -} \ No newline at end of file +} diff --git a/Example/MuslimData/Images.xcassets/ic_nav_location.imageset/ic_settings_location.pdf b/Example/Example/Assets.xcassets/ic_nav_location.imageset/ic_settings_location.pdf old mode 100755 new mode 100644 similarity index 100% rename from Example/MuslimData/Images.xcassets/ic_nav_location.imageset/ic_settings_location.pdf rename to Example/Example/Assets.xcassets/ic_nav_location.imageset/ic_settings_location.pdf diff --git a/Example/MuslimData/Images.xcassets/ic_nav_names.imageset/Contents.json b/Example/Example/Assets.xcassets/ic_nav_names.imageset/Contents.json old mode 100755 new mode 100644 similarity index 51% rename from Example/MuslimData/Images.xcassets/ic_nav_names.imageset/Contents.json rename to Example/Example/Assets.xcassets/ic_nav_names.imageset/Contents.json index d164f23..6f6ce09 --- a/Example/MuslimData/Images.xcassets/ic_nav_names.imageset/Contents.json +++ b/Example/Example/Assets.xcassets/ic_nav_names.imageset/Contents.json @@ -1,15 +1,15 @@ { "images" : [ { - "idiom" : "universal", - "filename" : "ic_nav_names.pdf" + "filename" : "ic_nav_names.pdf", + "idiom" : "universal" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 }, "properties" : { "preserves-vector-representation" : true } -} \ No newline at end of file +} diff --git a/Example/MuslimData/Images.xcassets/ic_nav_names.imageset/ic_nav_names.pdf b/Example/Example/Assets.xcassets/ic_nav_names.imageset/ic_nav_names.pdf old mode 100755 new mode 100644 similarity index 100% rename from Example/MuslimData/Images.xcassets/ic_nav_names.imageset/ic_nav_names.pdf rename to Example/Example/Assets.xcassets/ic_nav_names.imageset/ic_nav_names.pdf diff --git a/Example/MuslimData/Images.xcassets/ic_nav_prayers.imageset/Contents.json b/Example/Example/Assets.xcassets/ic_nav_prayers.imageset/Contents.json old mode 100755 new mode 100644 similarity index 50% rename from Example/MuslimData/Images.xcassets/ic_nav_prayers.imageset/Contents.json rename to Example/Example/Assets.xcassets/ic_nav_prayers.imageset/Contents.json index fef4bea..d72bae5 --- a/Example/MuslimData/Images.xcassets/ic_nav_prayers.imageset/Contents.json +++ b/Example/Example/Assets.xcassets/ic_nav_prayers.imageset/Contents.json @@ -1,15 +1,15 @@ { "images" : [ { - "idiom" : "universal", - "filename" : "ic_nav_my_prayers.pdf" + "filename" : "ic_nav_my_prayers.pdf", + "idiom" : "universal" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 }, "properties" : { "preserves-vector-representation" : true } -} \ No newline at end of file +} diff --git a/Example/MuslimData/Images.xcassets/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf b/Example/Example/Assets.xcassets/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf old mode 100755 new mode 100644 similarity index 100% rename from Example/MuslimData/Images.xcassets/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf rename to Example/Example/Assets.xcassets/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf diff --git a/Example/Example/ContentView.swift b/Example/Example/ContentView.swift new file mode 100644 index 0000000..db48d50 --- /dev/null +++ b/Example/Example/ContentView.swift @@ -0,0 +1,38 @@ +// +// +// ContentView.swift +// Example +// +// Created by Muhammad Azad on 23/03/2024 +// Copyright © 2024 MuslimData. All rights reserved. +// + + +import SwiftUI + +struct ContentView: View { + @State private var tab: AppTabs = .prayerTime + var body: some View { + TabView(selection: $tab) { + Text("Prayer Time") + .tabItem { + Image("ic_nav_prayers") + Text("Prayer Time") + }.tag(1) + NamesScreen() + .tabItem { + Image("ic_nav_names") + Text("Names") + }.tag(2) + Text("Azkar") + .tabItem { + Image("ic_nav_azkars") + Text("Azkar") + }.tag(3) + } + } +} + +#Preview { + ContentView() +} diff --git a/Example/Example/ExampleApp.swift b/Example/Example/ExampleApp.swift new file mode 100644 index 0000000..66d0e52 --- /dev/null +++ b/Example/Example/ExampleApp.swift @@ -0,0 +1,20 @@ +// +// +// ExampleApp.swift +// Example +// +// Created by Muhammad Azad on 23/03/2024 +// Copyright © 2024 MuslimData. All rights reserved. +// + + +import SwiftUI + +@main +struct ExampleApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/Example/Example/Names/NamesRowView.swift b/Example/Example/Names/NamesRowView.swift new file mode 100644 index 0000000..6bae283 --- /dev/null +++ b/Example/Example/Names/NamesRowView.swift @@ -0,0 +1,32 @@ +// +// +// NamesRowView.swift +// Example +// +// Created by Muhammad Azad on 23/03/2024 +// Copyright © 2024 MuslimData. All rights reserved. +// + + +import SwiftUI +import MuslimData + +/// Displays a single row representing a Name of Allah. Includes the Arabic name and its translation. +/// +/// - Parameter: +/// - name: The `Name` data to be displayed in the row. +struct NamesRowView: View { + let name: Name + var body: some View { + VStack(alignment: .leading){ + Text(name.name) + .font(.body) + Text(name.translated) + .font(.caption) + } + } +} + +#Preview { + NamesRowView(name: .init(name: "", translated: "")) +} diff --git a/Example/Example/Names/NamesScreen.swift b/Example/Example/Names/NamesScreen.swift new file mode 100644 index 0000000..28279ba --- /dev/null +++ b/Example/Example/Names/NamesScreen.swift @@ -0,0 +1,41 @@ +// +// +// NamesScreen.swift +// Example +// +// Created by Muhammad Azad on 23/03/2024 +// Copyright © 2024 MuslimData. All rights reserved. +// + + +import SwiftUI + +/// Displays a list of the Names of Allah. Handles loading, error states, and data presentation. +struct NamesScreen: View { + @ObservedObject private var viewModel = NamesViewModel() + + var body: some View { + NavigationStack{ + List { + if viewModel.isLoading { + ProgressView("Loading...") + } else if let error = viewModel.error { + ErrorWithRetryView(title: "Error loading names!", + errorMessage: error.localizedDescription) { + viewModel.getNamesOfAllah() + } + } else { + ForEach(viewModel.names, id: \.name) { name in + NamesRowView(name: name) + } + } + } + .listStyle(.plain) + .navigationTitle("Names of Allah") + } + } +} + +#Preview { + NamesScreen() +} diff --git a/Example/Example/Names/NamesViewModel.swift b/Example/Example/Names/NamesViewModel.swift new file mode 100644 index 0000000..d1fa4d0 --- /dev/null +++ b/Example/Example/Names/NamesViewModel.swift @@ -0,0 +1,38 @@ +// +// +// NamesViewModel.swift +// Example +// +// Created by Muhammad Azad on 23/03/2024 +// Copyright © 2024 MuslimData. All rights reserved. +// + + +import Foundation +import MuslimData + +/// Manages the state for a list of Names of Allah. Responsible for fetching data, handling loading states, and potential errors. +class NamesViewModel: ObservableObject { + @Published private(set) var names: [Name] = [] + @Published private(set) var isLoading = false + @Published private(set) var error: Error? = nil + + /// Initializes the view model and starts fetching the Names of Allah. + init() { + getNamesOfAllah() + } + + /// Fetches the Names of Allah from the `MuslimRepository`. Manages loading and error states. + func getNamesOfAllah() { + Task { + isLoading = true + do { + names = try await MuslimRepository().getNamesOfAllah(language: .en) ?? [] + } catch { + self.error = error + } + isLoading = false + } + } +} + diff --git a/Example/Example/Preview Content/Preview Assets.xcassets/Contents.json b/Example/Example/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Example/Example/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/Example/Shared/AppTabs.swift b/Example/Example/Shared/AppTabs.swift new file mode 100644 index 0000000..7d319c4 --- /dev/null +++ b/Example/Example/Shared/AppTabs.swift @@ -0,0 +1,22 @@ +// +// +// AppTabs.swift +// Example +// +// Created by Muhammad Azad on 23/03/2024 +// Copyright © 2024 MuslimData. All rights reserved. +// + + +import Foundation + +/// Represents the different tabs that can be displayed within the application. +enum AppTabs { + /// The tab for displaying prayer times. + case prayerTime + /// The tab for displaying the Names of Allah. + case names + /// The tab for displaying Azkar (remembrances). + case azkar +} + diff --git a/Example/Example/Shared/ErrorWithRetryView.swift b/Example/Example/Shared/ErrorWithRetryView.swift new file mode 100644 index 0000000..10f4bfe --- /dev/null +++ b/Example/Example/Shared/ErrorWithRetryView.swift @@ -0,0 +1,42 @@ +// +// +// ErrorWithRetryView.swift +// Example +// +// Created by Muhammad Azad on 23/03/2024 +// Copyright © 2024 MuslimData. All rights reserved. +// + + +import SwiftUI + +/// Displays an error message with a button to retry an action. +/// +/// - Parameters: +/// - title: The title text displayed above the error message. +/// - errorMessage: The detailed error message to be presented to the user. +/// - retryAction: The closure to be executed when the "Retry" button is tapped. +struct ErrorWithRetryView: View { + let title: String + let errorMessage: String + let retryAction: () -> Void + + var body: some View { + VStack(spacing: 12) { + Text(title) + .font(.headline) + Text(errorMessage) + .multilineTextAlignment(.center) + Button(action: retryAction) { + Label("Retry", systemImage: "arrow.clockwise") + } + } + } +} + +#Preview { + ErrorWithRetryView(title: "Error loading data!", + errorMessage: "This is error messgae."){ + print("Retry") + } +} diff --git a/Example/MuslimData.xcodeproj/project.pbxproj b/Example/MuslimData.xcodeproj/project.pbxproj deleted file mode 100755 index 740783f..0000000 --- a/Example/MuslimData.xcodeproj/project.pbxproj +++ /dev/null @@ -1,539 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 2D1D63A32B9CCF2100DBC74B /* MIGRATION_GUIDE.md in Resources */ = {isa = PBXBuildFile; fileRef = 2D1D63A22B9CCF2100DBC74B /* MIGRATION_GUIDE.md */; }; - 2D27AC4B2188E621004722BD /* LocationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D27AC4A2188E621004722BD /* LocationViewController.swift */; }; - 2DBD7E7B218E01AF00B6595B /* AzkarChaptersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DBD7E7A218E01AF00B6595B /* AzkarChaptersViewController.swift */; }; - 2DBD7E7E218E05FD00B6595B /* AzkarDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DBD7E7D218E05FD00B6595B /* AzkarDetailViewController.swift */; }; - 2DCAA592218C8A7D00F4B065 /* PrayersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DCAA591218C8A7D00F4B065 /* PrayersViewController.swift */; }; - 2DCAA594218C97A800F4B065 /* NamesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DCAA593218C97A800F4B065 /* NamesViewController.swift */; }; - 2DEFB3D9218B29ED005D94F4 /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DEFB3D8218B29ED005D94F4 /* Location.swift */; }; - 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; - 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; - 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; - 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; - AB4BCD02C3DCCBDDC1561720 /* Pods_MuslimData_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADF54AF43802AA1A3AAAFA2C /* Pods_MuslimData_Example.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 1FA7CF45010583A8DE450B74 /* Pods-MuslimData_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MuslimData_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig"; sourceTree = ""; }; - 2D1D63A22B9CCF2100DBC74B /* MIGRATION_GUIDE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = MIGRATION_GUIDE.md; path = ../MIGRATION_GUIDE.md; sourceTree = ""; }; - 2D27AC4A2188E621004722BD /* LocationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationViewController.swift; sourceTree = ""; }; - 2DBD7E7A218E01AF00B6595B /* AzkarChaptersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarChaptersViewController.swift; sourceTree = ""; }; - 2DBD7E7D218E05FD00B6595B /* AzkarDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarDetailViewController.swift; sourceTree = ""; }; - 2DCAA591218C8A7D00F4B065 /* PrayersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrayersViewController.swift; sourceTree = ""; }; - 2DCAA593218C97A800F4B065 /* NamesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesViewController.swift; sourceTree = ""; }; - 2DEFB3D8218B29ED005D94F4 /* Location.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Location.swift; sourceTree = ""; }; - 5665FE91640402C3D36C56F2 /* Pods-MuslimData_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MuslimData_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.release.xcconfig"; sourceTree = ""; }; - 607FACD01AFB9204008FA782 /* MuslimData_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MuslimData_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 74AFAA0290358FD0025B4CFB /* Pods-MuslimData_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MuslimData_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig"; sourceTree = ""; }; - ADF54AF43802AA1A3AAAFA2C /* Pods_MuslimData_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MuslimData_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B03E607FABE06466BB50FF62 /* Pods-MuslimData_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MuslimData_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig"; sourceTree = ""; }; - C7F9702CA1CFE6102812811C /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - CBF44BC9BD957BA32BBAB0D7 /* MuslimData.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = MuslimData.podspec; path = ../MuslimData.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - D6C6730E9A81B0B385FC0760 /* Pods_MuslimData_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MuslimData_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0705505FB7482A035EE85A3 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 607FACCD1AFB9204008FA782 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AB4BCD02C3DCCBDDC1561720 /* Pods_MuslimData_Example.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 209A686A541F4C24A075E63C /* Pods */ = { - isa = PBXGroup; - children = ( - 1FA7CF45010583A8DE450B74 /* Pods-MuslimData_Example.debug.xcconfig */, - B03E607FABE06466BB50FF62 /* Pods-MuslimData_Example.release.xcconfig */, - 74AFAA0290358FD0025B4CFB /* Pods-MuslimData_Tests.debug.xcconfig */, - 5665FE91640402C3D36C56F2 /* Pods-MuslimData_Tests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; - 2DBD7E7C218E01BF00B6595B /* Azkars */ = { - isa = PBXGroup; - children = ( - 2DBD7E7A218E01AF00B6595B /* AzkarChaptersViewController.swift */, - 2DBD7E7D218E05FD00B6595B /* AzkarDetailViewController.swift */, - ); - name = Azkars; - sourceTree = ""; - }; - 2DBD7E7F218E346600B6595B /* Prayers */ = { - isa = PBXGroup; - children = ( - 2DEFB3D7218B29D8005D94F4 /* Locations */, - 2DCAA591218C8A7D00F4B065 /* PrayersViewController.swift */, - ); - name = Prayers; - sourceTree = ""; - }; - 2DBD7E80218E347500B6595B /* Names */ = { - isa = PBXGroup; - children = ( - 2DCAA593218C97A800F4B065 /* NamesViewController.swift */, - ); - name = Names; - sourceTree = ""; - }; - 2DBD7E81218E34A400B6595B /* Assets */ = { - isa = PBXGroup; - children = ( - 607FACD91AFB9204008FA782 /* Main.storyboard */, - 607FACDC1AFB9204008FA782 /* Images.xcassets */, - 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, - ); - name = Assets; - sourceTree = ""; - }; - 2DEFB3D7218B29D8005D94F4 /* Locations */ = { - isa = PBXGroup; - children = ( - 2D27AC4A2188E621004722BD /* LocationViewController.swift */, - 2DEFB3D8218B29ED005D94F4 /* Location.swift */, - ); - name = Locations; - sourceTree = ""; - }; - 41A62F07BE87B6355FB1E1CE /* Frameworks */ = { - isa = PBXGroup; - children = ( - ADF54AF43802AA1A3AAAFA2C /* Pods_MuslimData_Example.framework */, - D6C6730E9A81B0B385FC0760 /* Pods_MuslimData_Tests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 607FACC71AFB9204008FA782 = { - isa = PBXGroup; - children = ( - 607FACF51AFB993E008FA782 /* Podspec Metadata */, - 607FACD21AFB9204008FA782 /* Example for MuslimData */, - 607FACD11AFB9204008FA782 /* Products */, - 209A686A541F4C24A075E63C /* Pods */, - 41A62F07BE87B6355FB1E1CE /* Frameworks */, - ); - sourceTree = ""; - }; - 607FACD11AFB9204008FA782 /* Products */ = { - isa = PBXGroup; - children = ( - 607FACD01AFB9204008FA782 /* MuslimData_Example.app */, - ); - name = Products; - sourceTree = ""; - }; - 607FACD21AFB9204008FA782 /* Example for MuslimData */ = { - isa = PBXGroup; - children = ( - 607FACD51AFB9204008FA782 /* AppDelegate.swift */, - 2DBD7E7F218E346600B6595B /* Prayers */, - 2DBD7E80218E347500B6595B /* Names */, - 2DBD7E7C218E01BF00B6595B /* Azkars */, - 2DBD7E81218E34A400B6595B /* Assets */, - 607FACD31AFB9204008FA782 /* Supporting Files */, - ); - name = "Example for MuslimData"; - path = MuslimData; - sourceTree = ""; - }; - 607FACD31AFB9204008FA782 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 607FACD41AFB9204008FA782 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { - isa = PBXGroup; - children = ( - CBF44BC9BD957BA32BBAB0D7 /* MuslimData.podspec */, - E0705505FB7482A035EE85A3 /* README.md */, - 2D1D63A22B9CCF2100DBC74B /* MIGRATION_GUIDE.md */, - C7F9702CA1CFE6102812811C /* LICENSE */, - ); - name = "Podspec Metadata"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 607FACCF1AFB9204008FA782 /* MuslimData_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "MuslimData_Example" */; - buildPhases = ( - 908034E7F08C00D8F832C38F /* [CP] Check Pods Manifest.lock */, - 2DABCDEA216296CC008F4B9B /* SwiftFormat */, - 607FACCC1AFB9204008FA782 /* Sources */, - 607FACCD1AFB9204008FA782 /* Frameworks */, - 607FACCE1AFB9204008FA782 /* Resources */, - A00438D347074F12FE01F3D3 /* [CP] Embed Pods Frameworks */, - 2DABCDE821628FFF008F4B9B /* SwiftLint */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MuslimData_Example; - productName = MuslimData; - productReference = 607FACD01AFB9204008FA782 /* MuslimData_Example.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 607FACC81AFB9204008FA782 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 1420; - ORGANIZATIONNAME = CocoaPods; - TargetAttributes = { - 607FACCF1AFB9204008FA782 = { - CreatedOnToolsVersion = 6.3.1; - DevelopmentTeam = 4HFFW4423Q; - LastSwiftMigration = 1020; - }; - }; - }; - buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "MuslimData" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 607FACC71AFB9204008FA782; - productRefGroup = 607FACD11AFB9204008FA782 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 607FACCF1AFB9204008FA782 /* MuslimData_Example */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 607FACCE1AFB9204008FA782 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2D1D63A32B9CCF2100DBC74B /* MIGRATION_GUIDE.md in Resources */, - 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, - 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, - 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 2DABCDE821628FFF008F4B9B /* SwiftLint */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = SwiftLint; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#if [[ \"$(uname -m)\" == arm64 ]]; then\n# export PATH=\"/opt/homebrew/bin:$PATH\"\n#fi\n#\n#if which swiftlint > /dev/null; then\n# swiftlint\n#else\n# echo \"warning: SwiftLint not installed, download from #https://github.com/realm/SwiftLint\"\n#fi\n"; - }; - 2DABCDEA216296CC008F4B9B /* SwiftFormat */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = SwiftFormat; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [[ \"$(uname -m)\" == arm64 ]]; then\n export PATH=\"/opt/homebrew/bin:$PATH\"\nfi\n\nif which swiftformat > /dev/null; then\n swiftformat .\nelse\n echo \"warning: SwiftFormat not installed, download from https://github.com/nicklockwood/SwiftFormat\"\nfi\n"; - }; - 908034E7F08C00D8F832C38F /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-MuslimData_Example-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - A00438D347074F12FE01F3D3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/GRDB.swift/GRDB.framework", - "${BUILT_PRODUCTS_DIR}/MuslimData/MuslimData.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GRDB.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MuslimData.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 607FACCC1AFB9204008FA782 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2D27AC4B2188E621004722BD /* LocationViewController.swift in Sources */, - 2DCAA594218C97A800F4B065 /* NamesViewController.swift in Sources */, - 2DBD7E7B218E01AF00B6595B /* AzkarChaptersViewController.swift in Sources */, - 2DEFB3D9218B29ED005D94F4 /* Location.swift in Sources */, - 2DBD7E7E218E05FD00B6595B /* AzkarDetailViewController.swift in Sources */, - 2DCAA592218C8A7D00F4B065 /* PrayersViewController.swift in Sources */, - 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 607FACD91AFB9204008FA782 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 607FACDA1AFB9204008FA782 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { - isa = PBXVariantGroup; - children = ( - 607FACDF1AFB9204008FA782 /* Base */, - ); - name = LaunchScreen.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 607FACED1AFB9204008FA782 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 607FACEE1AFB9204008FA782 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 607FACF01AFB9204008FA782 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1FA7CF45010583A8DE450B74 /* Pods-MuslimData_Example.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = 4HFFW4423Q; - INFOPLIST_FILE = MuslimData/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 607FACF11AFB9204008FA782 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B03E607FABE06466BB50FF62 /* Pods-MuslimData_Example.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = 4HFFW4423Q; - INFOPLIST_FILE = MuslimData/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "MuslimData" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 607FACED1AFB9204008FA782 /* Debug */, - 607FACEE1AFB9204008FA782 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "MuslimData_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 607FACF01AFB9204008FA782 /* Debug */, - 607FACF11AFB9204008FA782 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 607FACC81AFB9204008FA782 /* Project object */; -} diff --git a/Example/MuslimData.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/MuslimData.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100755 index 4273183..0000000 --- a/Example/MuslimData.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Example/MuslimData.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/MuslimData.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/Example/MuslimData.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Example/MuslimData.xcodeproj/xcshareddata/xcschemes/MuslimData-Example.xcscheme b/Example/MuslimData.xcodeproj/xcshareddata/xcschemes/MuslimData-Example.xcscheme deleted file mode 100755 index de1a63f..0000000 --- a/Example/MuslimData.xcodeproj/xcshareddata/xcschemes/MuslimData-Example.xcscheme +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/MuslimData.xcworkspace/contents.xcworkspacedata b/Example/MuslimData.xcworkspace/contents.xcworkspacedata deleted file mode 100755 index 7ac79f1..0000000 --- a/Example/MuslimData.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/Example/MuslimData.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/MuslimData.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100755 index 18d9810..0000000 --- a/Example/MuslimData.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Example/MuslimData/AppDelegate.swift b/Example/MuslimData/AppDelegate.swift deleted file mode 100755 index 54b8afa..0000000 --- a/Example/MuslimData/AppDelegate.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// AppDelegate.swift -// MuslimData -// -// Created by Kosrat D. Ahmad on 09/27/2018. -// Copyright (c) 2018 Kosrat D. Ahmad. All rights reserved. -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - true - } - - func applicationWillResignActive(_ application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - } - - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. - } - - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - } - - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - } -} diff --git a/Example/MuslimData/AzkarChaptersViewController.swift b/Example/MuslimData/AzkarChaptersViewController.swift deleted file mode 100755 index c52cb5b..0000000 --- a/Example/MuslimData/AzkarChaptersViewController.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// AzkarChaptersViewController.swift -// MuslimData_Example -// -// Created by Kosrat D. Ahmad on 11/3/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -import MuslimData -import UIKit - -class AzkarChaptersViewController: UIViewController { - // MARK: - Outlets - - @IBOutlet var chaptersTable: UITableView! - - // MARK: - Properties - - var chapters: [AzkarChapter] = [] - - // MARK: - View Lifecycles - - override func viewDidLoad() { - super.viewDidLoad() - - chaptersTable.delegate = self - chaptersTable.dataSource = self - - // Get azkar chapters from MuslimData library. - Task.init { - let chapters = try! await MuslimRepository().getAzkarChapters(language: .en) - self.chapters = chapters! - self.chaptersTable.reloadData() - } - } -} - -// MARK: - UITableViewDelegate - -extension AzkarChaptersViewController: UITableViewDelegate { - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let controller = storyboard?.instantiateViewController(withIdentifier: "azkarController") as? AzkarDetailViewController - controller?.azkarChapter = chapters[indexPath.row] - navigationController?.pushViewController(controller!, animated: true) - tableView.deselectRow(at: indexPath, animated: true) - } -} - -// MARK: - UITableViewDataSource - -extension AzkarChaptersViewController: UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - chapters.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "chapterCell", for: indexPath) - let chapter = chapters[indexPath.row] - cell.textLabel?.text = chapter.name - - return cell - } -} diff --git a/Example/MuslimData/AzkarDetailViewController.swift b/Example/MuslimData/AzkarDetailViewController.swift deleted file mode 100755 index 883a466..0000000 --- a/Example/MuslimData/AzkarDetailViewController.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// AzkarDetailViewController.swift -// MuslimData_Example -// -// Created by Kosrat D. Ahmad on 11/3/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -import MuslimData -import UIKit - -class AzkarDetailViewController: UIViewController { - // MARK: - Outlets - - @IBOutlet var azkarTable: UITableView! - - // MARK: - Properties - - var azkarChapter: AzkarChapter? - var azkars: [AzkarItem] = [] - - // MARK: - View Lifecycle - - override func viewDidLoad() { - super.viewDidLoad() - - title = azkarChapter!.name - - azkarTable.dataSource = self - azkarTable.tableFooterView = UIView() - - // Get azkar items from MuslimData library. - Task.init { - let items = try! await MuslimRepository().getAzkarItems(language: .en, chapterId: azkarChapter!.id) - self.azkars = items! - self.azkarTable.reloadData() - } - } -} - -// MARK: - UITableViewDataSource - -extension AzkarDetailViewController: UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - azkars.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "azkarCell", for: indexPath) - let azkar = azkars[indexPath.row] - cell.textLabel?.text = azkar.item - cell.detailTextLabel?.text = "\(azkar.translation) \n\nReference: \(azkar.reference)" - - return cell - } -} diff --git a/Example/MuslimData/Base.lproj/LaunchScreen.xib b/Example/MuslimData/Base.lproj/LaunchScreen.xib deleted file mode 100755 index 2b1f6e2..0000000 --- a/Example/MuslimData/Base.lproj/LaunchScreen.xib +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/MuslimData/Base.lproj/Main.storyboard b/Example/MuslimData/Base.lproj/Main.storyboard deleted file mode 100755 index 66b78f6..0000000 --- a/Example/MuslimData/Base.lproj/Main.storyboard +++ /dev/null @@ -1,452 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/MuslimData/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/MuslimData/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100755 index 7006c9e..0000000 --- a/Example/MuslimData/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/Example/MuslimData/Images.xcassets/Contents.json b/Example/MuslimData/Images.xcassets/Contents.json deleted file mode 100755 index da4a164..0000000 --- a/Example/MuslimData/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/MuslimData/Info.plist b/Example/MuslimData/Info.plist deleted file mode 100755 index aab61f4..0000000 --- a/Example/MuslimData/Info.plist +++ /dev/null @@ -1,41 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - - UIUserInterfaceStyle - Light - - diff --git a/Example/MuslimData/Location.swift b/Example/MuslimData/Location.swift deleted file mode 100755 index c2e8c51..0000000 --- a/Example/MuslimData/Location.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// Location.swift -// MuslimData_Example -// -// Created by Kosrat D. Ahmad on 11/1/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -import Foundation -import MuslimData - -// MARK: - Location Extensions - -extension Location { - /// Save location in the User Defaults. - func saveLocation() { - let defaults = UserDefaults.standard - defaults.set(id, forKey: "id") - defaults.set(name, forKey: "name") - defaults.set(latitude, forKey: "latitude") - defaults.set(longitude, forKey: "longitude") - defaults.set(countryCode, forKey: "countryCode") - defaults.set(countryName, forKey: "countryName") - defaults.set(hasFixedPrayerTime, forKey: "hasFixedPrayerTime") - defaults.set(prayerDependentId, forKey: "prayerDependentId") - } - - /// Load saved location from User Defaults. - /// - /// - Returns: Location object. - static func loadSavedLocation() -> Location { - let defaults = UserDefaults.standard - let id = defaults.object(forKey: "id") as? Int ?? 77359 - let name = defaults.string(forKey: "name") ?? "Erbil" - var latitude = defaults.double(forKey: "latitude") - latitude = latitude == 0.0 ? 36.188204 : latitude - var longitude = defaults.double(forKey: "longitude") - longitude = longitude == 0.0 ? 43.966606 : longitude - let countryCode = defaults.string(forKey: "countryCode") ?? "IQ" - let countryName = defaults.string(forKey: "countryName") ?? "Iraq" - let hasFixedPrayerTime = (defaults.object(forKey: "hasFixedPrayerTime") as? Bool) ?? true - let prayerDependentId = defaults.object(forKey: "prayerDependentId") as? Int - - return Location(id: id, name: name, latitude: latitude, longitude: longitude, - countryCode: countryCode, countryName: countryName, hasFixedPrayerTime: hasFixedPrayerTime, - prayerDependentId: prayerDependentId) - } -} diff --git a/Example/MuslimData/LocationViewController.swift b/Example/MuslimData/LocationViewController.swift deleted file mode 100755 index 80b7b60..0000000 --- a/Example/MuslimData/LocationViewController.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// LocationViewController.swift -// MuslimData_Example -// -// Created by Kosrat D. Ahmad on 10/30/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -import MuslimData -import UIKit - -class LocationViewController: UIViewController { - // MARK: - Outlets - - @IBOutlet var locationTitle: UILabel! - @IBOutlet var locationTable: UITableView! - - var locations: [Location] = [] { - didSet { - locationTable.reloadData() - } - } - - // MARK: - View Lifecycle - - override func viewDidLoad() { - super.viewDidLoad() - - if #available(iOS 11.0, *) { - navigationItem.searchController = searchBar() - navigationItem.searchController?.searchBar.placeholder = "Search locations" - } - - locationTable.delegate = self - locationTable.dataSource = self - - displayLocation() - } - - // MARK: - Helper Methods - - /// Create search controller. - /// - /// - Returns: UISearchController - func searchBar() -> UISearchController { - let searchController = UISearchController(searchResultsController: nil) - searchController.searchBar.delegate = self - return searchController - } - - /// Display selected location on the screen. - func displayLocation() { - let location = Location.loadSavedLocation() - locationTitle.text = "\(location.name), \(location.countryName)" - } - - /// Dismiss and return to the parent screen. - /// - /// - Parameter sender: Any - @IBAction func done(_ sender: Any) { - dismiss(animated: true, completion: nil) - } -} - -// MARK: - UISearchBarDelegate - -extension LocationViewController: UISearchBarDelegate { - func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { - if searchText == "" { - locations.removeAll() - return - } - Task.init { - let locations = try! await MuslimRepository().searchLocation(locationName: searchBar.text!) - if let locations = locations { - self.locations = locations - } - } - } -} - -// MARK: - UITableViewDelegate - -extension LocationViewController: UITableViewDelegate { - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let location = locations[indexPath.row] - - location.saveLocation() - displayLocation() - if #available(iOS 11.0, *) { - navigationItem.searchController?.isActive = false - } - } -} - -// MARK: - UITableViewDataSource - -extension LocationViewController: UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - locations.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "locationCell", for: indexPath) - let location = locations[indexPath.row] - cell.textLabel?.text = location.name - cell.detailTextLabel?.text = location.countryName - - return cell - } -} diff --git a/Example/MuslimData/NamesViewController.swift b/Example/MuslimData/NamesViewController.swift deleted file mode 100755 index 480d8b8..0000000 --- a/Example/MuslimData/NamesViewController.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// NamesViewController.swift -// MuslimData_Example -// -// Created by Kosrat D. Ahmad on 11/2/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -import MuslimData -import UIKit - -class NamesViewController: UIViewController { - // MARK: - Outlets - - @IBOutlet var namesTable: UITableView! - - // MARK: - Properties - - var names: [Name] = [] - - // MARK: - View Lifecycle - - override func viewDidLoad() { - super.viewDidLoad() - - namesTable.dataSource = self - - Task.init { - let names = try! await MuslimRepository().getNamesOfAllah(language: .en) - self.names = names! - self.namesTable.reloadData() - } - } -} - -// MARK: - UITableViewDataSource - -extension NamesViewController: UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - names.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "nameCell", for: indexPath) - let name = names[indexPath.row] - cell.textLabel?.text = name.name - cell.detailTextLabel?.text = name.translated - - return cell - } -} diff --git a/Example/MuslimData/PrayersViewController.swift b/Example/MuslimData/PrayersViewController.swift deleted file mode 100755 index 0e31a44..0000000 --- a/Example/MuslimData/PrayersViewController.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// PrayersViewController.swift -// MuslimData_Example -// -// Created by Kosrat D. Ahmad on 11/2/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -import MuslimData -import UIKit - -class PrayersViewController: UIViewController { - // MARK: - Outlets - - @IBOutlet var locationDetail: UILabel! - @IBOutlet var prayerTable: UITableView! - - // MARK: - Properties - - var prayerTimes: [String] = [] - let prayerNames = ["Fajr", "Sunrise", "Dhuhr", "Asr", "Maghrib", "Isha"] - - // MARK: - View Lifecycle - - override func viewDidLoad() { - super.viewDidLoad() - - prayerTable.dataSource = self - prayerTable.tableFooterView = UIView() - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - // Get prayer times - Task.init { - try! await getPrayers() - } - } - - // MARK: - Helper Methods - - /// Get prayer times from the MuslimData library - func getPrayers() async throws { - let offsets = [Double](repeating: 0, count: 6) - let location = Location.loadSavedLocation() - let attributes = PrayerAttribute(method: .makkah, asrMethod: .shafii, adjustAngle: .angleBased, offsets: offsets) - - let prayer = try await MuslimRepository().getPrayerTimes(location: location, date: Date(), attributes: attributes) - prayerTimes = prayer!.formatPrayers(.time12) - prayerTable.reloadData() - - let dateFormatter = DateFormatter() - dateFormatter.dateFormat = "dd MMM yyyy" - let stringDate = dateFormatter.string(from: Date()) - - locationDetail.text = "\(location.name), \(location.countryName)\n\(stringDate)" - } -} - -// MARK: - UITableViewDataSource - -extension PrayersViewController: UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - prayerTimes.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "prayerCell", for: indexPath) - cell.textLabel?.text = prayerNames[indexPath.row] - cell.detailTextLabel?.text = prayerTimes[indexPath.row] - - return cell - } -} diff --git a/Example/Podfile b/Example/Podfile deleted file mode 100755 index eccf6ea..0000000 --- a/Example/Podfile +++ /dev/null @@ -1,12 +0,0 @@ -use_frameworks! -inhibit_all_warnings! - -target 'MuslimData_Example' do - pod 'MuslimData', :path => '../' - - target 'MuslimData_Tests' do - inherit! :search_paths - - - end -end diff --git a/Example/Podfile.lock b/Example/Podfile.lock deleted file mode 100755 index b024598..0000000 --- a/Example/Podfile.lock +++ /dev/null @@ -1,25 +0,0 @@ -PODS: - - GRDB.swift (4.0.1): - - GRDB.swift/standard (= 4.0.1) - - GRDB.swift/standard (4.0.1) - - MuslimData (1.6.0): - - GRDB.swift (~> 4.0.1) - -DEPENDENCIES: - - MuslimData (from `../`) - -SPEC REPOS: - trunk: - - GRDB.swift - -EXTERNAL SOURCES: - MuslimData: - :path: "../" - -SPEC CHECKSUMS: - GRDB.swift: 106a830decf1d92a3fc63c6d6a2f6586f6187297 - MuslimData: 51f505a7cc7bbd67ed9e52b6be0dc832f7b67041 - -PODFILE CHECKSUM: f1a8413ff73c18d27d5283425e84b7905893b20c - -COCOAPODS: 1.15.2 diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Configuration.swift b/Example/Pods/GRDB.swift/GRDB/Core/Configuration.swift deleted file mode 100755 index 0cb8a17..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Configuration.swift +++ /dev/null @@ -1,203 +0,0 @@ -import Foundation -import Dispatch -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// Configuration for a DatabaseQueue or DatabasePool. -public struct Configuration { - - // MARK: - Misc options - - /// If true, foreign key constraints are checked. - /// - /// Default: true - public var foreignKeysEnabled: Bool = true - - /// If true, database modifications are disallowed. - /// - /// Default: false - public var readonly: Bool = false - - /// The database label. - /// - /// You can query this label at runtime: - /// - /// var configuration = Configuration() - /// configuration.label = "MyDatabase" - /// let dbQueue = try DatabaseQueue(path: ..., configuration: configuration) - /// - /// try dbQueue.read { db in - /// print(db.configuration.label) // Prints "MyDatabase" - /// } - /// - /// The database label is also used to name the various dispatch queues - /// created by GRDB, visible in debugging sessions and crash logs. However - /// those dispatch queue labels are intended for debugging only. Their - /// format may change between GRDB releases. Applications should not depend - /// on the GRDB dispatch queue labels. - /// - /// If the database label is nil, the current GRDB implementation uses the - /// following dispatch queue labels: - /// - /// - `GRDB.DatabaseQueue`: the (unique) dispatch queue of a DatabaseQueue - /// - `GRDB.DatabasePool.writer`: the (unique) writer dispatch queue of - /// a DatabasePool - /// - `GRDB.DatabasePool.reader.N`, where N is 1, 2, ...: one of the reader - /// dispatch queue(s) of a DatabasePool. N grows with the number of SQLite - /// connections: it may get bigger than the maximum number of concurrent - /// readers, as SQLite connections get closed and new ones are opened. - /// - `GRDB.DatabasePool.snapshot.N`: the dispatch queue of a - /// DatabaseSnapshot. N grows with the number of snapshots. - /// - /// If the database label is not nil, for example "MyDatabase", the current - /// GRDB implementation uses the following dispatch queue labels: - /// - /// - `MyDatabase`: the (unique) dispatch queue of a DatabaseQueue - /// - `MyDatabase.writer`: the (unique) writer dispatch queue of - /// a DatabasePool - /// - `MyDatabase.reader.N`, where N is 1, 2, ...: one of the reader - /// dispatch queue(s) of a DatabasePool. N grows with the number of SQLite - /// connections: it may get bigger than the maximum number of concurrent - /// readers, as SQLite connections get closed and new ones are opened. - /// - `MyDatabase.snapshot.N`: the dispatch queue of a - /// DatabaseSnapshot. N grows with the number of snapshots. - /// - /// The default label is nil. - public var label: String? = nil - - /// A function that is called on every statement executed by the database. - /// - /// Default: nil - public var trace: TraceFunction? - - - // MARK: - Encryption - - #if SQLITE_HAS_CODEC - /// The passphrase for the encrypted database. - /// - /// Default: nil - public var passphrase: String? - - #endif - - /// If set, allows custom configuration to be run every time - /// a new connection is opened. - /// - /// This block is run after the Database's connection has opened, but - /// before that connection has been made available to any read/write - /// API's. - /// - /// For example: - /// - /// var config = Configuration() - /// config.prepareDatabase = { db in - /// try db.execute(sql: "PRAGMA kdf_iter = 10000") - /// } - public var prepareDatabase: ((Database) throws -> Void)? - - // MARK: - Transactions - - /// The default kind of transaction. - /// - /// Default: deferred - public var defaultTransactionKind: Database.TransactionKind = .deferred - - /// If false, it is a programmer error to leave a transaction opened at the - /// end of a database access block. - /// - /// For example: - /// - /// let dbQueue = DatabaseQueue() - /// - /// // fatal error: A transaction has been left opened at the end of a database access - /// try dbQueue.inDatabase { db in - /// try db.beginTransaction() - /// } - /// - /// If true, one can leave opened transaction at the end of database access - /// blocks: - /// - /// var config = Configuration() - /// config.allowsUnsafeTransactions = true - /// let dbQueue = DatabaseQueue(configuration: config) - /// - /// try dbQueue.inDatabase { db in - /// try db.beginTransaction() - /// } - /// - /// try dbQueue.inDatabase { db in - /// try db.commit() - /// } - /// - /// This configuration flag has no effect on DatabasePool readers: those - /// never allow leaving a transaction opened at the end of a read access. - /// - /// Default: false - public var allowsUnsafeTransactions: Bool = false - - // MARK: - Concurrency - - /// The behavior in case of SQLITE_BUSY error. See https://www.sqlite.org/rescode.html#busy - /// - /// Default: immediateError - public var busyMode: Database.BusyMode = .immediateError - - /// The maximum number of concurrent readers (applies to database - /// pools only). - /// - /// Default: 5 - public var maximumReaderCount: Int = 5 - - /// The quality of service class for the work performed by the database. - /// - /// The quality of service is ignored if you supply a target queue. - /// - /// Default: .default (.unspecified on macOS < 10.10) - public var qos: DispatchQoS - - /// The target queue for the work performed by the database. - /// - /// Default: nil - public var targetQueue: DispatchQueue? = nil - - // MARK: - Factory Configuration - - /// Creates a factory configuration - public init() { - if #available(OSX 10.10, *) { - qos = .default - } else { - qos = .unspecified - } - } - - - // MARK: - Not Public - - var threadingMode: Database.ThreadingMode = .`default` - var SQLiteConnectionDidOpen: (() -> ())? - var SQLiteConnectionWillClose: ((SQLiteConnection) -> ())? - var SQLiteConnectionDidClose: (() -> ())? - var SQLiteOpenFlags: Int32 { - let readWriteFlags = readonly ? SQLITE_OPEN_READONLY : (SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE) - return threadingMode.SQLiteOpenFlags | readWriteFlags - } - - func makeDispatchQueue(defaultLabel: String, purpose: String? = nil) -> DispatchQueue { - let label = (self.label ?? defaultLabel) + (purpose.map { "." + $0 } ?? "") - if let targetQueue = targetQueue { - return DispatchQueue(label: label, target: targetQueue) - } else { - return DispatchQueue(label: label, qos: qos) - } - } -} - -/// A tracing function that takes an SQL string. -public typealias TraceFunction = (String) -> Void diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Cursor.swift b/Example/Pods/GRDB.swift/GRDB/Core/Cursor.swift deleted file mode 100755 index 51ef3b3..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Cursor.swift +++ /dev/null @@ -1,758 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Parts of this file are derived from the Swift.org open source project: -// -// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -// MARK: - Array, Sequence, Set extensions - -extension Array { - /// Creates an array containing the elements of a cursor. - /// - /// let cursor = try String.fetchCursor(db, sql: "SELECT 'foo' UNION ALL SELECT 'bar'") - /// let strings = try Array(cursor) // ["foo", "bar"] - @inlinable - public init(_ cursor: C) throws where C.Element == Element { - self.init() - while let element = try cursor.next() { - append(element) - } - } -} - -extension Sequence { - - /// Returns a cursor over the concatenated results of mapping transform - /// over self. - public func flatMap(_ transform: @escaping (Iterator.Element) throws -> SegmentOfResult) -> FlattenCursor, SegmentOfResult>> { - return AnyCursor(self).flatMap(transform) - } -} - -extension Set { - /// Creates a set containing the elements of a cursor. - /// - /// let cursor = try String.fetchCursor(db, sql: "SELECT 'foo' UNION ALL SELECT 'foo'") - /// let strings = try Set(cursor) // ["foo"] - public init(_ cursor: C) throws where C.Element == Element { - self.init() - while let element = try cursor.next() { - insert(element) - } - } -} - -// MARK: - Cursor - -/// A type that supplies the values of some external resource, one at a time. -/// -/// ## Overview -/// -/// The most common way to iterate over the elements of a cursor is to use a -/// `while` loop: -/// -/// let cursor = ... -/// while let element = try cursor.next() { -/// ... -/// } -/// -/// ## Relationship with standard Sequence and IteratorProtocol -/// -/// Cursors share traits with lazy sequences and iterators from the Swift -/// standard library. Differences are: -/// -/// - Cursor types are classes, and have a lifetime. -/// - Cursor iteration may throw errors. -/// - A cursor can not be repeated. -/// -/// The protocol comes with default implementations for many operations similar -/// to those defined by Swift's Sequence protocol: `contains`, `dropFirst`, -/// `dropLast`, `drop(while:)`, `enumerated`, `filter`, `first`, `flatMap`, -/// `forEach`, `joined`, `joined(separator:)`, `max`, `max(by:)`, `min`, -/// `min(by:)`, `map`, `prefix`, `prefix(while:)`, `reduce`, `reduce(into:)`, -/// `suffix`. -public protocol Cursor : class { - /// The type of element traversed by the cursor. - associatedtype Element - - /// Advances to the next element and returns it, or nil if no next element - /// exists. Once nil has been returned, all subsequent calls return nil. - func next() throws -> Element? -} - -extension Cursor { - /// Returns a Boolean value indicating whether the cursor contains - /// an element. - public func isEmpty() throws -> Bool { - return try next() == nil - } - - /// Returns a Boolean value indicating whether the cursor contains an - /// element that satisfies the given predicate. - /// - /// - parameter predicate: A closure that takes an element of the cursor as - /// its argument and returns a Boolean value that indicates whether the - /// passed element represents a match. - /// - returns: true if the cursor contains an element that satisfies - /// predicate; otherwise, false. - public func contains(where predicate: (Element) throws -> Bool) throws -> Bool { - while let element = try next() { - if try predicate(element) { - return true - } - } - return false - } - - /// Returns a cursor of pairs (n, x), where n represents a consecutive - /// integer starting at zero, and x represents an element of the cursor. - /// - /// let cursor = try String.fetchCursor(db, sql: "SELECT 'foo' UNION ALL SELECT 'bar'") - /// let c = cursor.enumerated() - /// while let (n, x) = c.next() { - /// print("\(n): \(x)") - /// } - /// // Prints: "0: foo" - /// // Prints: "1: bar" - public func enumerated() -> EnumeratedCursor { - return EnumeratedCursor(self) - } - - /// Returns the elements of the cursor that satisfy the given predicate. - public func filter(_ isIncluded: @escaping (Element) throws -> Bool) -> FilterCursor { - return FilterCursor(self, isIncluded) - } - - /// Returns the first element of the cursor that satisfies the given - /// predicate or nil if no such element is found. - public func first(where predicate: (Element) throws -> Bool) throws -> Element? { - while let element = try next() { - if try predicate(element) { - return element - } - } - return nil - } - - /// Returns a cursor over the concatenated non-nil results of mapping - /// transform over this cursor. - public func compactMap(_ transform: @escaping (Element) throws -> ElementOfResult?) -> MapCursor>, ElementOfResult> { - return map(transform).filter { $0 != nil }.map { $0! } - } - - /// Returns a cursor that skips any initial elements that satisfy - /// `predicate`. - /// - /// - Parameter predicate: A closure that takes an element of the cursir as - /// its argument and returns `true` if the element should be skipped or - /// `false` otherwise. Once `predicate` returns `false` it will not be - /// called again. - public func drop(while predicate: @escaping (Element) throws -> Bool) -> DropWhileCursor { - return DropWhileCursor(self, predicate: predicate) - } - - /// Returns a cursor containing all but the given number of initial - /// elements. - /// - /// If the number of elements to drop exceeds the number of elements in - /// the cursor, the result is an empty cursor. - /// - /// let numbers = AnyCursor([1, 2, 3, 4, 5]) - /// try print(numbers.dropFirst(2)) - /// // Prints "[3, 4, 5]" - /// try print(numbers.dropFirst(10)) - /// // Prints "[]" - /// - /// - Parameter n: The number of elements to drop from the beginning of - /// the cursor. `n` must be greater than or equal to zero. - /// - Returns: A cursor starting after the specified number of - /// elements. - public func dropFirst(_ n: Int) -> DropFirstCursor { - return DropFirstCursor(self, limit: n) - } - - /// Returns a cursor containing all but the first element of the cursor. - /// - /// The following example drops the first element from a cursor of integers. - /// - /// let numbers = AnyCursor([1, 2, 3, 4, 5]) - /// try print(numbers.dropFirst()) - /// // Prints "[2, 3, 4, 5]" - /// - /// If the cursor has no elements, the result is an empty cursor. - /// - /// - Returns: A cursor starting after the first element of the cursor. - public func dropFirst() -> DropFirstCursor { - return dropFirst(1) - } - - /// Returns an array containing all but the given number of final - /// elements. - /// - /// The cursor must be finite. If the number of elements to drop exceeds - /// the number of elements in the cursor, the result is an empty array. - /// - /// let numbers = AnyCursor([1, 2, 3, 4, 5]) - /// try print(numbers.dropLast(2)) - /// // Prints "[1, 2, 3]" - /// try print(numbers.dropLast(10)) - /// // Prints "[]" - /// - /// - Parameter n: The number of elements to drop off the end of the - /// cursor. `n` must be greater than or equal to zero. - /// - Returns: An array leaving off the specified number of elements. - public func dropLast(_ n: Int) throws -> [Element] { - GRDBPrecondition(n >= 0, "Can't drop a negative number of elements from a cursor") - if n == 0 { return try Array(self) } - - var result: [Element] = [] - var ringBuffer: [Element] = [] - var i = ringBuffer.startIndex - - while let element = try next() { - if ringBuffer.count < n { - ringBuffer.append(element) - } else { - result.append(ringBuffer[i]) - ringBuffer[i] = element - i = ringBuffer.index(after: i) % n - } - } - return result - } - - /// Returns an array containing all but the last element of the cursor. - /// - /// The following example drops the last element from a cursor of integers. - /// - /// let numbers = AnyCursor([1, 2, 3, 4, 5]) - /// try print(numbers.dropLast()) - /// // Prints "[1, 2, 3, 4]" - /// - /// If the cursor has no elements, the result is an empty cursor. - /// - /// - Returns: An array leaving off the last element of the cursor. - public func dropLast() throws -> [Element] { - return try dropLast(1) - } - - /// Returns a cursor over the concatenated results of mapping transform - /// over self. - public func flatMap(_ transform: @escaping (Element) throws -> SegmentOfResult) -> FlattenCursor>> { - return flatMap { try AnyCursor(transform($0)) } - } - - /// Returns a cursor over the concatenated results of mapping transform - /// over self. - public func flatMap(_ transform: @escaping (Element) throws -> SegmentOfResult) -> FlattenCursor> { - return map(transform).joined() - } - - /// Calls the given closure on each element in the cursor. - public func forEach(_ body: (Element) throws -> Void) throws { - while let element = try next() { - try body(element) - } - } - - /// Returns a cursor over the results of the transform function applied to - /// this cursor's elements. - public func map(_ transform: @escaping (Element) throws -> T) -> MapCursor { - return MapCursor(self, transform) - } - - /// Returns the maximum element in the cursor, using the given predicate as - /// the comparison between elements. - /// - /// - Parameter areInIncreasingOrder: A predicate that returns `true` - /// if its first argument should be ordered before its second - /// argument; otherwise, `false`. - /// - Returns: The cursor's maximum element, according to - /// `areInIncreasingOrder`. If the cursor has no elements, returns `nil`. - public func max(by areInIncreasingOrder: (Element, Element) throws -> Bool) throws -> Element? { - guard var result = try next() else { - return nil - } - while let e = try next() { - if try areInIncreasingOrder(result, e) { - result = e - } - } - return result - } - - /// Returns the minimum element in the cursor, using the given predicate as - /// the comparison between elements. - /// - /// - Parameter areInIncreasingOrder: A predicate that returns `true` - /// if its first argument should be ordered before its second - /// argument; otherwise, `false`. - /// - Returns: The cursor's minimum element, according to - /// `areInIncreasingOrder`. If the cursor has no elements, returns `nil`. - public func min(by areInIncreasingOrder: (Element, Element) throws -> Bool) throws -> Element? { - guard var result = try next() else { - return nil - } - while let e = try next() { - if try areInIncreasingOrder(e, result) { - result = e - } - } - return result - } - - /// Returns a cursor, up to the specified maximum length, containing the - /// initial elements of the cursor. - /// - /// If the maximum length exceeds the number of elements in the cursor, - /// the result contains all the elements in the cursor. - /// - /// let numbers = AnyCursor([1, 2, 3, 4, 5]) - /// try print(numbers.prefix(2)) - /// // Prints "[1, 2]" - /// try print(numbers.prefix(10)) - /// // Prints "[1, 2, 3, 4, 5]" - /// - /// - Parameter maxLength: The maximum number of elements to return. The - /// value of `maxLength` must be greater than or equal to zero. - /// - Returns: A cursor starting at the beginning of this cursor - /// with at most `maxLength` elements. - public func prefix(_ maxLength: Int) -> PrefixCursor { - return PrefixCursor(self, maxLength: maxLength) - } - - /// Returns a cursor of the initial consecutive elements that satisfy - /// `predicate`. - /// - /// - Parameter predicate: A closure that takes an element of the cursor as - /// its argument and returns `true` if the element should be included or - /// `false` otherwise. Once `predicate` returns `false` it will not be - /// called again. - public func prefix(while predicate: @escaping (Element) throws -> Bool) -> PrefixWhileCursor { - return PrefixWhileCursor(self, predicate: predicate) - } - - /// Returns the result of calling the given combining closure with each - /// element of this cursor and an accumulating value. - public func reduce( - _ initialResult: Result, - _ nextPartialResult: (Result, Element) throws -> Result) - throws -> Result - { - var accumulator = initialResult - while let element = try next() { - accumulator = try nextPartialResult(accumulator, element) - } - return accumulator - } - - /// Returns the result of calling the given combining closure with each - /// element of this cursor and an accumulating value. - public func reduce( - into initialResult: Result, - _ updateAccumulatingResult: (inout Result, Element) throws -> Void) - throws -> Result - { - var accumulator = initialResult - while let element = try next() { - try updateAccumulatingResult(&accumulator, element) - } - return accumulator - } - - /// Returns an array, up to the given maximum length, containing the - /// final elements of the cursor. - /// - /// The cursor must be finite. If the maximum length exceeds the number of - /// elements in the cursor, the result contains all the elements in the - /// cursor. - /// - /// let numbers = AnyCursor([1, 2, 3, 4, 5]) - /// try print(numbers.suffix(2)) - /// // Prints "[4, 5]" - /// try print(numbers.suffix(10)) - /// // Prints "[1, 2, 3, 4, 5]" - /// - /// - Parameter maxLength: The maximum number of elements to return. The - /// value of `maxLength` must be greater than or equal to zero. - public func suffix(_ maxLength: Int) throws -> [Element] { - GRDBPrecondition(maxLength >= 0, "Can't take a suffix of negative length from a cursor") - if maxLength == 0 { - return [] - } - - var ringBuffer: [Element] = [] - ringBuffer.reserveCapacity(maxLength) - - var i = ringBuffer.startIndex - - while let element = try next() { - if ringBuffer.count < maxLength { - ringBuffer.append(element) - } else { - ringBuffer[i] = element - i += 1 - i %= maxLength - } - } - - if i != ringBuffer.startIndex { - let s0 = ringBuffer[i.. Bool { - while let e = try next() { - if e == element { - return true - } - } - return false - } -} - -// MARK: Comparable elements - -extension Cursor where Element: Comparable { - /// Returns the maximum element in the cursor. - /// - /// - Parameter areInIncreasingOrder: A predicate that returns `true` - /// if its first argument should be ordered before its second - /// argument; otherwise, `false`. - /// - Returns: The cursor's maximum element, according to - /// `areInIncreasingOrder`. If the cursor has no elements, returns - /// `nil`. - public func max() throws -> Element? { - return try max(by: <) - } - - /// Returns the minimum element in the cursor. - /// - /// - Parameter areInIncreasingOrder: A predicate that returns `true` - /// if its first argument should be ordered before its second - /// argument; otherwise, `false`. - /// - Returns: The cursor's minimum element, according to - /// `areInIncreasingOrder`. If the cursor has no elements, returns - /// `nil`. - public func min() throws -> Element? { - return try min(by: <) - } -} - -// MARK: Cursor elements - -extension Cursor where Element: Cursor { - /// Returns the elements of this cursor of cursors, concatenated. - public func joined() -> FlattenCursor { - return FlattenCursor(self) - } -} - -// MARK: Sequence elements - -extension Cursor where Element: Sequence { - /// Returns the elements of this cursor of sequences, concatenated. - public func joined() -> FlattenCursor>> { - return flatMap { $0 } - } -} - -// MARK: String elements - -extension Cursor where Element: StringProtocol { - /// Returns the elements of this cursor of sequences, concatenated. - public func joined(separator: String = "") throws -> String { - if separator.isEmpty { - var result = "" - while let x = try next() { - result.append(String(x)) - } - return result - } else { - var result = "" - if let first = try next() { - result.append(String(first)) - while let next = try next() { - result.append(separator) - result.append(String(next)) - } - } - return result - } - } -} - -// MARK: Specialized Cursors - -/// A type-erased cursor of Element. -/// -/// This cursor forwards its next() method to an arbitrary underlying cursor -/// having the same Element type, hiding the specifics of the underlying -/// cursor. -public final class AnyCursor : Cursor { - private let element: () throws -> Element? - - /// Creates a cursor that wraps a base cursor but whose type depends only on - /// the base cursor’s element type - public init(_ base: C) where C.Element == Element { - element = base.next - } - - /// Creates a cursor that wraps a base iterator but whose type depends only - /// on the base iterator’s element type - public convenience init(iterator: I) where I.Element == Element { - var iterator = iterator - self.init { iterator.next() } - } - - /// Creates a cursor that wraps a base sequence but whose type depends only - /// on the base sequence’s element type - public convenience init(_ s: S) where S.Element == Element { - self.init(iterator: s.makeIterator()) - } - - /// Creates a cursor that wraps the given closure in its next() method - public init(_ body: @escaping () throws -> Element?) { - element = body - } - - /// Advances to the next element and returns it, or nil if no next - /// element exists. - /// :nodoc: - public func next() throws -> Element? { - return try element() - } -} - -/// :nodoc: -public final class DropFirstCursor : Cursor { - private let base: Base - private let limit: Int - private var dropped: Int = 0 - - init(_ base: Base, limit: Int) { - GRDBPrecondition(limit >= 0, "Can't drop a negative number of elements from a cursor") - self.base = base - self.limit = limit - } - - public func next() throws -> Base.Element? { - while dropped < limit { - if try base.next() == nil { - dropped = limit - return nil - } - dropped += 1 - } - return try base.next() - } -} - -/// A cursor whose elements consist of the elements that follow the initial -/// consecutive elements of some base cursor that satisfy a given predicate. -/// -/// :nodoc: -public final class DropWhileCursor : Cursor { - private let base: Base - private let predicate: (Base.Element) throws -> Bool - private var predicateHasFailed = false - - init(_ base: Base, predicate: @escaping (Base.Element) throws -> Bool) { - self.base = base - self.predicate = predicate - } - - public func next() throws -> Base.Element? { - if predicateHasFailed { - return try base.next() - } - - while let nextElement = try base.next() { - if try !predicate(nextElement) { - predicateHasFailed = true - return nextElement - } - } - return nil - } -} - -/// An enumeration of the elements of a cursor. -/// -/// To create an instance of `EnumeratedCursor`, call the `enumerated()` method -/// on a cursor: -/// -/// let cursor = try String.fetchCursor(db, sql: "SELECT 'foo' UNION ALL SELECT 'bar'") -/// let c = cursor.enumerated() -/// while let (n, x) = c.next() { -/// print("\(n): \(x)") -/// } -/// // Prints: "0: foo" -/// // Prints: "1: bar" -/// -/// :nodoc: -public final class EnumeratedCursor : Cursor { - private let base: Base - private var index: Int - - init(_ base: Base) { - self.base = base - self.index = 0 - } - - /// Advances to the next element and returns it, or nil if no next - /// element exists. - /// :nodoc: - public func next() throws -> (Int, Base.Element)? { - guard let element = try base.next() else { return nil } - defer { index += 1 } - return (index, element) - } -} - -/// A cursor whose elements consist of the elements of some base cursor that -/// also satisfy a given predicate. -/// -/// :nodoc: -public final class FilterCursor : Cursor { - private let base: Base - private let isIncluded: (Base.Element) throws -> Bool - - init(_ base: Base, _ isIncluded: @escaping (Base.Element) throws -> Bool) { - self.base = base - self.isIncluded = isIncluded - } - - /// Advances to the next element and returns it, or nil if no next - /// element exists. - /// :nodoc: - public func next() throws -> Base.Element? { - while let element = try base.next() { - if try isIncluded(element) { - return element - } - } - return nil - } -} - -/// A cursor consisting of all the elements contained in each segment contained -/// in some Base cursor. -/// -/// See Cursor.joined(), Cursor.flatMap(_:), Sequence.flatMap(_:) -/// -/// :nodoc: -public final class FlattenCursor : Cursor where Base.Element: Cursor { - private let base: Base - private var inner: Base.Element? - - init(_ base: Base) { - self.base = base - } - - /// Advances to the next element and returns it, or nil if no next - /// element exists. - /// :nodoc: - public func next() throws -> Base.Element.Element? { - while true { - if let element = try inner?.next() { - return element - } - guard let inner = try base.next() else { - return nil - } - self.inner = inner - } - } -} - -/// A Cursor whose elements consist of those in a Base Cursor passed through a -/// transform function returning Element. -/// -/// See Cursor.map(_:) -/// -/// :nodoc: -public final class MapCursor : Cursor { - private let base: Base - private let transform: (Base.Element) throws -> Element - - init(_ base: Base, _ transform: @escaping (Base.Element) throws -> Element) { - self.base = base - self.transform = transform - } - - /// Advances to the next element and returns it, or nil if no next - /// element exists. - /// :nodoc: - public func next() throws -> Element? { - guard let element = try base.next() else { return nil } - return try transform(element) - } -} - -/// A cursor that only consumes up to `n` elements from an underlying -/// `Base` cursor. -/// -/// :nodoc: -public final class PrefixCursor : Cursor { - private let base: Base - private let maxLength: Int - private var taken = 0 - - init(_ base: Base, maxLength: Int) { - self.base = base - self.maxLength = maxLength - } - - public func next() throws -> Base.Element? { - if taken >= maxLength { return nil } - taken += 1 - - if let next = try base.next() { - return next - } - - taken = maxLength - return nil - } -} - -/// A cursor whose elements consist of the initial consecutive elements of -/// some base cursor that satisfy a given predicate. -/// -/// :nodoc: -public final class PrefixWhileCursor : Cursor { - private let base: Base - private let predicate: (Base.Element) throws -> Bool - private var predicateHasFailed = false - - init(_ base: Base, predicate: @escaping (Base.Element) throws -> Bool) { - self.base = base - self.predicate = predicate - } - - public func next() throws -> Base.Element? { - if !predicateHasFailed, let nextElement = try base.next() { - if try predicate(nextElement) { - return nextElement - } else { - predicateHasFailed = true - } - } - return nil - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Database+Schema.swift b/Example/Pods/GRDB.swift/GRDB/Core/Database+Schema.swift deleted file mode 100755 index 0155a21..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Database+Schema.swift +++ /dev/null @@ -1,616 +0,0 @@ -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -extension Database { - - // MARK: - Database Schema - - /// Clears the database schema cache. - /// - /// You may need to clear the cache manually if the database schema is - /// modified by another connection. - public func clearSchemaCache() { - SchedulingWatchdog.preconditionValidQueue(self) - schemaCache.clear() - - // We also clear updateStatementCache and selectStatementCache despite - // the automatic statement recompilation (see https://www.sqlite.org/c3ref/prepare.html) - // because the automatic statement recompilation only happens a - // limited number of times. - internalStatementCache.clear() - publicStatementCache.clear() - } - - /// Returns whether a table exists. - public func tableExists(_ name: String) throws -> Bool { - return try exists(type: .table, name: name) - } - - /// Returns whether a table is an internal SQLite table. - /// - /// Those are tables whose name begins with "sqlite_". - /// - /// For more information, see https://www.sqlite.org/fileformat2.html - public func isSQLiteInternalTable(_ tableName: String) -> Bool { - // https://www.sqlite.org/fileformat2.html#internal_schema_objects - // > The names of internal schema objects always begin with "sqlite_" - // > and any table, index, view, or trigger whose name begins with - // > "sqlite_" is an internal schema object. SQLite prohibits - // > applications from creating objects whose names begin with - // > "sqlite_". - return tableName.starts(with: "sqlite_") - } - - /// Returns whether a table is an internal GRDB table. - /// - /// Those are tables whose name begins with "grdb_". - public func isGRDBInternalTable(_ tableName: String) -> Bool { - return tableName.starts(with: "grdb_") - } - - /// Returns whether a view exists. - public func viewExists(_ name: String) throws -> Bool { - return try exists(type: .view, name: name) - } - - /// Returns whether a trigger exists. - public func triggerExists(_ name: String) throws -> Bool { - return try exists(type: .trigger, name: name) - } - - private func exists(type: SchemaObjectType, name: String) throws -> Bool { - // SQlite identifiers are case-insensitive, case-preserving: - // http://www.alberton.info/dbms_identifiers_and_case_sensitivity.html - let name = name.lowercased() - return try schema() - .names(ofType: type) - .contains { $0.lowercased() == name } - } - - /// The primary key for table named `tableName`. - /// - /// All tables have a primary key, even when it is not explicit. When a - /// table has no explicit primary key, the result is the hidden - /// "rowid" column. - /// - /// - throws: A DatabaseError if table does not exist. - public func primaryKey(_ tableName: String) throws -> PrimaryKeyInfo { - SchedulingWatchdog.preconditionValidQueue(self) - - if let primaryKey = schemaCache.primaryKey(tableName) { - return primaryKey - } - - // https://www.sqlite.org/pragma.html - // - // > PRAGMA database.table_info(table-name); - // > - // > This pragma returns one row for each column in the named table. - // > Columns in the result set include the column name, data type, - // > whether or not the column can be NULL, and the default value for - // > the column. The "pk" column in the result set is zero for columns - // > that are not part of the primary key, and is the index of the - // > column in the primary key for columns that are part of the primary - // > key. - // - // CREATE TABLE players ( - // id INTEGER PRIMARY KEY, - // name TEXT, - // score INTEGER) - // - // PRAGMA table_info("players") - // - // cid | name | type | notnull | dflt_value | pk | - // 0 | id | INTEGER | 0 | NULL | 1 | - // 1 | name | TEXT | 0 | NULL | 0 | - // 2 | score | INTEGER | 0 | NULL | 0 | - - let columns = try self.columns(in: tableName) - - let primaryKey: PrimaryKeyInfo - let pkColumns = columns - .filter { $0.primaryKeyIndex > 0 } - .sorted { $0.primaryKeyIndex < $1.primaryKeyIndex } - - switch pkColumns.count { - case 0: - // No explicit primary key => primary key is hidden rowID column - primaryKey = .hiddenRowID - case 1: - // Single column - let pkColumn = pkColumns.first! - - // https://www.sqlite.org/lang_createtable.html: - // - // > With one exception noted below, if a rowid table has a primary - // > key that consists of a single column and the declared type of - // > that column is "INTEGER" in any mixture of upper and lower - // > case, then the column becomes an alias for the rowid. Such a - // > column is usually referred to as an "integer primary key". - // > A PRIMARY KEY column only becomes an integer primary key if the - // > declared type name is exactly "INTEGER". Other integer type - // > names like "INT" or "BIGINT" or "SHORT INTEGER" or "UNSIGNED - // > INTEGER" causes the primary key column to behave as an ordinary - // > table column with integer affinity and a unique index, not as - // > an alias for the rowid. - // > - // > The exception mentioned above is that if the declaration of a - // > column with declared type "INTEGER" includes an "PRIMARY KEY - // > DESC" clause, it does not become an alias for the rowid [...] - // - // FIXME: We ignore the exception, and consider all INTEGER primary - // keys as aliases for the rowid: - if pkColumn.type.uppercased() == "INTEGER" { - primaryKey = .rowID(pkColumn.name) - } else { - primaryKey = .regular([pkColumn.name]) - } - default: - // Multi-columns primary key - primaryKey = .regular(pkColumns.map { $0.name }) - } - - schemaCache.set(primaryKey: primaryKey, forTable: tableName) - return primaryKey - } - - /// The indexes on table named `tableName`; returns the empty array if the - /// table does not exist. - /// - /// Note: SQLite does not define any index for INTEGER PRIMARY KEY columns: - /// this method does not return any index that represents this primary key. - /// - /// If you want to know if a set of columns uniquely identify a row, prefer - /// table(_:hasUniqueKey:) instead. - public func indexes(on tableName: String) throws -> [IndexInfo] { - if let indexes = schemaCache.indexes(on: tableName) { - return indexes - } - - let indexes = try Row - .fetchAll(self, sql: "PRAGMA index_list(\(tableName.quotedDatabaseIdentifier))") - .map { row -> IndexInfo in - // [seq:0 name:"index" unique:0 origin:"c" partial:0] - let indexName: String = row[1] - let unique: Bool = row[2] - let columns = try Row - .fetchAll(self, sql: "PRAGMA index_info(\(indexName.quotedDatabaseIdentifier))") - .map { row -> (Int, String) in - // [seqno:0 cid:2 name:"column"] - (row[0] as Int, row[2] as String) - } - .sorted { $0.0 < $1.0 } - .map { $0.1 } - return IndexInfo(name: indexName, columns: columns, unique: unique) - } - - if indexes.isEmpty { - // PRAGMA index_list doesn't throw any error when table does - // not exist. So let's check if table exists: - if try tableExists(tableName) == false { - throw DatabaseError(message: "no such table: \(tableName)") - } - } - - schemaCache.set(indexes: indexes, forTable: tableName) - return indexes - } - - /// True if a sequence of columns uniquely identifies a row, that is to say - /// if the columns are the primary key, or if there is a unique index on them. - public func table(_ tableName: String, hasUniqueKey columns: T) throws -> Bool where T.Iterator.Element == String { - return try columnsForUniqueKey(Array(columns), in: tableName) != nil - } - - /// The foreign keys defined on table named `tableName`. - public func foreignKeys(on tableName: String) throws -> [ForeignKeyInfo] { - if let foreignKeys = schemaCache.foreignKeys(on: tableName) { - return foreignKeys - } - - var rawForeignKeys: [(destinationTable: String, mapping: [(origin: String, destination: String?, seq: Int)])] = [] - var previousId: Int? = nil - for row in try Row.fetchAll(self, sql: "PRAGMA foreign_key_list(\(tableName.quotedDatabaseIdentifier))") { - // row = [id:0 seq:0 table:"parents" from:"parentId" to:"id" on_update:"..." on_delete:"..." match:"..."] - let id: Int = row[0] - let seq: Int = row[1] - let table: String = row[2] - let origin: String = row[3] - let destination: String? = row[4] - - if previousId == id { - rawForeignKeys[rawForeignKeys.count - 1].mapping.append((origin: origin, destination: destination, seq: seq)) - } else { - rawForeignKeys.append((destinationTable: table, mapping: [(origin: origin, destination: destination, seq: seq)])) - previousId = id - } - } - - if rawForeignKeys.isEmpty { - // PRAGMA foreign_key_list doesn't throw any error when table does - // not exist. So let's check if table exists: - if try tableExists(tableName) == false { - throw DatabaseError(message: "no such table: \(tableName)") - } - } - - let foreignKeys = try rawForeignKeys.map { (destinationTable, columnMapping) -> ForeignKeyInfo in - let orderedMapping = columnMapping - .sorted { $0.seq < $1.seq } - .map { (origin: $0.origin, destination: $0 .destination) } - - let completeMapping: [(origin: String, destination: String)] - if orderedMapping.contains(where: { (_, destination) in destination == nil }) { - let pk = try primaryKey(destinationTable) - completeMapping = zip(pk.columns, orderedMapping).map { (pkColumn, arrow) in - (origin: arrow.origin, destination: pkColumn) - } - } else { - completeMapping = orderedMapping.map { (origin, destination) in - (origin: origin, destination: destination!) - } - } - return ForeignKeyInfo(destinationTable: destinationTable, mapping: completeMapping) - } - - schemaCache.set(foreignKeys: foreignKeys, forTable: tableName) - return foreignKeys - } - - /// Returns the actual name of the database table - func canonicalTableName(_ tableName: String) throws -> String { - guard let name = try schema().canonicalName(tableName, ofType: .table) else { - throw DatabaseError(message: "no such table: \(tableName)") - } - return name - } - - func schema() throws -> SchemaInfo { - if let schemaInfo = schemaCache.schemaInfo { - return schemaInfo - } - let schemaInfo = try SchemaInfo(self) - schemaCache.schemaInfo = schemaInfo - return schemaInfo - } -} - -extension Database { - - /// The columns in the table named `tableName` - /// - /// - throws: A DatabaseError if table does not exist. - public func columns(in tableName: String) throws -> [ColumnInfo] { - if let columns = schemaCache.columns(in: tableName) { - return columns - } - - // https://www.sqlite.org/pragma.html - // - // > PRAGMA database.table_info(table-name); - // > - // > This pragma returns one row for each column in the named table. - // > Columns in the result set include the column name, data type, - // > whether or not the column can be NULL, and the default value for - // > the column. The "pk" column in the result set is zero for columns - // > that are not part of the primary key, and is the index of the - // > column in the primary key for columns that are part of the primary - // > key. - // - // CREATE TABLE players ( - // id INTEGER PRIMARY KEY, - // firstName TEXT, - // lastName TEXT) - // - // PRAGMA table_info("players") - // - // cid | name | type | notnull | dflt_value | pk | - // 0 | id | INTEGER | 0 | NULL | 1 | - // 1 | name | TEXT | 0 | NULL | 0 | - // 2 | score | INTEGER | 0 | NULL | 0 | - - if sqlite3_libversion_number() < 3008005 { - // Work around a bug in SQLite where PRAGMA table_info would - // return a result even after the table was deleted. - if try !tableExists(tableName) { - throw DatabaseError(message: "no such table: \(tableName)") - } - } - let columns = try ColumnInfo - .fetchAll(self, sql: "PRAGMA table_info(\(tableName.quotedDatabaseIdentifier))") - .sorted(by: { $0.cid < $1.cid }) - guard columns.count > 0 else { - throw DatabaseError(message: "no such table: \(tableName)") - } - - schemaCache.set(columns: columns, forTable: tableName) - return columns - } - - /// If there exists a unique key on columns, return the columns - /// ordered as the matching index (or primay key). Case of returned columns - /// is not guaranteed. - func columnsForUniqueKey(_ columns: T, in tableName: String) throws -> [String]? where T.Iterator.Element == String { - let primaryKey = try self.primaryKey(tableName) // first, so that we fail early and consistently should the table not exist - let lowercasedColumns = Set(columns.map { $0.lowercased() }) - if Set(primaryKey.columns.map { $0.lowercased() }) == lowercasedColumns { - return primaryKey.columns - } - if let index = try indexes(on: tableName).first(where: { index in index.isUnique && Set(index.columns.map { $0.lowercased() }) == lowercasedColumns }) { - // There is an explicit unique index on the columns - return index.columns - } - return nil - } -} - -/// A column of a database table. -/// -/// This type closely matches the information returned by the -/// `table_info` pragma. -/// -/// > CREATE TABLE player ( -/// id INTEGER PRIMARY KEY, -/// firstName TEXT, -/// lastName TEXT) -/// > PRAGMA table_info("player") -/// cid name type notnull dflt_value pk -/// ---- ----- ------- -------- ---------- --- -/// 0 id INTEGER 0 NULL 1 -/// 1 name TEXT 0 NULL 0 -/// 2 score INTEGER 0 NULL 0 -/// -/// See `Database.columns(in:)` and https://www.sqlite.org/pragma.html#pragma_table_info -public struct ColumnInfo : FetchableRecord { - let cid: Int - - /// The column name - public let name: String - - /// The column data type - public let type: String - - /// True if and only if the column is constrained to be not null. - public let isNotNull: Bool - - /// The SQL snippet that defines the default value, if any. - /// - /// When nil, the column has no default value. - /// - /// When not nil, it contains an SQL string that defines an expression. That - /// expression may be a literal, as `1`, or `'foo'`. It may also contain a - /// non-constant expression such as `CURRENT_TIMESTAMP`. - /// - /// For example: - /// - /// try db.execute(sql: """ - /// CREATE TABLE player( - /// id INTEGER PRIMARY KEY, - /// name TEXT DEFAULT 'Anonymous', - /// score INT DEFAULT 0, - /// creationDate DATE DEFAULT CURRENT_TIMESTAMP - /// ) - /// """) - /// let columnInfos = try db.columns(in: "player") - /// columnInfos[0].defaultValueSQL // nil - /// columnInfos[1].defaultValueSQL // "'Anoynymous'" - /// columnInfos[2].defaultValueSQL // "0" - /// columnInfos[3].defaultValueSQL // "CURRENT_TIMESTAMP" - public let defaultValueSQL: String? - - /// Zero for columns that are not part of the primary key. - /// - /// Before SQLite 3.7.16, it is 1 for columns that are part of the - /// primary key. - /// - /// Starting from SQLite 3.7.16, it is the one-based index of the column in - /// the primary key for columns that are part of the primary key. - /// - /// References: - /// - https://sqlite.org/releaselog/3_7_16.html - /// - http://mailinglists.sqlite.org/cgi-bin/mailman/private/sqlite-users/2013-April/046034.html - public let primaryKeyIndex: Int - - /// :nodoc: - public init(row: Row) { - cid = row["cid"] - name = row["name"] - type = row["type"] - isNotNull = row["notnull"] - defaultValueSQL = row["dflt_value"] - primaryKeyIndex = row["pk"] - } -} - -/// An index on a database table. -/// -/// See `Database.indexes(on:)` -public struct IndexInfo { - /// The name of the index - public let name: String - - /// The indexed columns - public let columns: [String] - - /// True if the index is unique - public let isUnique: Bool - - init(name: String, columns: [String], unique: Bool) { - self.name = name - self.columns = columns - self.isUnique = unique - } -} - -/// Primary keys are returned from the Database.primaryKey(_:) method. -/// -/// When the table's primary key is the rowid: -/// -/// // CREATE TABLE item (name TEXT) -/// let pk = try db.primaryKey("item") -/// pk.columns // ["rowid"] -/// pk.rowIDColumn // nil -/// pk.isRowID // true -/// -/// // CREATE TABLE citizen ( -/// // id INTEGER PRIMARY KEY, -/// // name TEXT -/// // ) -/// let pk = try db.primaryKey("citizen")! -/// pk.columns // ["id"] -/// pk.rowIDColumn // "id" -/// pk.isRowID // true -/// -/// When the table's primary key is not the rowid: -/// -/// // CREATE TABLE country ( -/// // isoCode TEXT NOT NULL PRIMARY KEY -/// // name TEXT -/// // ) -/// let pk = db.primaryKey("country")! -/// pk.columns // ["isoCode"] -/// pk.rowIDColumn // nil -/// pk.isRowID // false -/// -/// // CREATE TABLE citizenship ( -/// // citizenID INTEGER NOT NULL REFERENCES citizen(id) -/// // countryIsoCode TEXT NOT NULL REFERENCES country(isoCode) -/// // PRIMARY KEY (citizenID, countryIsoCode) -/// // ) -/// let pk = db.primaryKey("citizenship")! -/// pk.columns // ["citizenID", "countryIsoCode"] -/// pk.rowIDColumn // nil -/// pk.isRowID // false -public struct PrimaryKeyInfo { - private enum Impl { - /// The hidden rowID. - case hiddenRowID - - /// An INTEGER PRIMARY KEY column that aliases the Row ID. - /// Associated string is the column name. - case rowID(String) - - /// Any primary key, but INTEGER PRIMARY KEY. - /// Associated strings are column names. - case regular([String]) - } - - private let impl: Impl - - static func rowID(_ column: String) -> PrimaryKeyInfo { - return PrimaryKeyInfo(impl: .rowID(column)) - } - - static func regular(_ columns: [String]) -> PrimaryKeyInfo { - assert(!columns.isEmpty) - return PrimaryKeyInfo(impl: .regular(columns)) - } - - static let hiddenRowID = PrimaryKeyInfo(impl: .hiddenRowID) - - /// The columns in the primary key; this array is never empty. - public var columns: [String] { - switch impl { - case .hiddenRowID: - return [Column.rowID.name] - case .rowID(let column): - return [column] - case .regular(let columns): - return columns - } - } - - /// When not nil, the name of the column that contains the INTEGER PRIMARY KEY. - public var rowIDColumn: String? { - switch impl { - case .hiddenRowID: - return nil - case .rowID(let column): - return column - case .regular: - return nil - } - } - - /// When true, the primary key is the rowid: - public var isRowID: Bool { - switch impl { - case .hiddenRowID: - return true - case .rowID: - return true - case .regular: - return false - } - } -} - -/// You get foreign keys from table names, with the -/// `foreignKeys(on:)` method. -public struct ForeignKeyInfo { - /// The name of the destination table - public let destinationTable: String - - /// The column to column mapping - public let mapping: [(origin: String, destination: String)] - - /// The origin columns - public var originColumns: [String] { - return mapping.map { $0.origin } - } - - /// The destination columns - public var destinationColumns: [String] { - return mapping.map { $0.destination } - } -} - -enum SchemaObjectType: String { - case index - case table - case trigger - case view -} - -struct SchemaInfo: Equatable { - private var objects: Set - - init(_ db: Database) throws { - objects = try Set(SchemaObject.fetchCursor(db, sql: """ - SELECT type, name, tbl_name, sql, 0 AS isTemporary FROM sqlite_master \ - UNION \ - SELECT type, name, tbl_name, sql, 1 FROM sqlite_temp_master - """)) - } - - /// All names for a given type - func names(ofType type: SchemaObjectType) -> Set { - return objects.reduce(into: []) { (set, key) in - if key.type == type.rawValue { - set.insert(key.name) - } - } - } - - /// Returns the canonical name of the object: - /// - /// try db.execute(sql: "CREATE TABLE FooBar (...)") - /// try db.schema().canonicalName("foobar", ofType: .table) // "FooBar" - func canonicalName(_ name: String, ofType type: SchemaObjectType) -> String? { - let name = name.lowercased() - return objects.first { $0.name.lowercased() == name }?.name - } - - private struct SchemaObject: Codable, Hashable, FetchableRecord { - var type: String - var name: String - var tbl_name: String? - var sql: String? - var isTemporary: Bool - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Database+Statements.swift b/Example/Pods/GRDB.swift/GRDB/Core/Database+Statements.swift deleted file mode 100755 index 1553dbf..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Database+Statements.swift +++ /dev/null @@ -1,340 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -extension Database { - - // MARK: - Statements - - /// Returns a new prepared statement that can be reused. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT COUNT(*) FROM player WHERE score > ?") - /// let moreThanTwentyCount = try Int.fetchOne(statement, arguments: [20])! - /// let moreThanThirtyCount = try Int.fetchOne(statement, arguments: [30])! - /// - /// - parameter sql: An SQL query. - /// - returns: A SelectStatement. - /// - throws: A DatabaseError whenever SQLite could not parse the sql query. - public func makeSelectStatement(sql: String) throws -> SelectStatement { - return try makeSelectStatement(sql: sql, prepFlags: 0) - } - - /// Returns a new prepared statement that can be reused. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT COUNT(*) FROM player WHERE score > ?", prepFlags: 0) - /// let moreThanTwentyCount = try Int.fetchOne(statement, arguments: [20])! - /// let moreThanThirtyCount = try Int.fetchOne(statement, arguments: [30])! - /// - /// - parameter sql: An SQL query. - /// - parameter prepFlags: Flags for sqlite3_prepare_v3 (available from - /// SQLite 3.20.0, see http://www.sqlite.org/c3ref/prepare.html) - /// - returns: A SelectStatement. - /// - throws: A DatabaseError whenever SQLite could not parse the sql query. - func makeSelectStatement(sql: String, prepFlags: Int32) throws -> SelectStatement { - return try SelectStatement.prepare(sql: sql, prepFlags: prepFlags, in: self) - } - - /// Returns a prepared statement that can be reused. - /// - /// let statement = try db.cachedSelectStatement(sql: "SELECT COUNT(*) FROM player WHERE score > ?") - /// let moreThanTwentyCount = try Int.fetchOne(statement, arguments: [20])! - /// let moreThanThirtyCount = try Int.fetchOne(statement, arguments: [30])! - /// - /// The returned statement may have already been used: it may or may not - /// contain values for its eventual arguments. - /// - /// - parameter sql: An SQL query. - /// - returns: An UpdateStatement. - /// - throws: A DatabaseError whenever SQLite could not parse the sql query. - public func cachedSelectStatement(sql: String) throws -> SelectStatement { - return try publicStatementCache.selectStatement(sql) - } - - /// Returns a cached statement that does not conflict with user's cached statements. - func internalCachedSelectStatement(sql: String) throws -> SelectStatement { - return try internalStatementCache.selectStatement(sql) - } - - /// Returns a new prepared statement that can be reused. - /// - /// let statement = try db.makeUpdateStatement(sql: "INSERT INTO player (name) VALUES (?)") - /// try statement.execute(arguments: ["Arthur"]) - /// try statement.execute(arguments: ["Barbara"]) - /// - /// - parameter sql: An SQL query. - /// - returns: An UpdateStatement. - /// - throws: A DatabaseError whenever SQLite could not parse the sql query. - public func makeUpdateStatement(sql: String) throws -> UpdateStatement { - return try makeUpdateStatement(sql: sql, prepFlags: 0) - } - - /// Returns a new prepared statement that can be reused. - /// - /// let statement = try db.makeUpdateStatement(sql: "INSERT INTO player (name) VALUES (?)", prepFlags: 0) - /// try statement.execute(arguments: ["Arthur"]) - /// try statement.execute(arguments: ["Barbara"]) - /// - /// - parameter sql: An SQL query. - /// - parameter prepFlags: Flags for sqlite3_prepare_v3 (available from - /// SQLite 3.20.0, see http://www.sqlite.org/c3ref/prepare.html) - /// - returns: An UpdateStatement. - /// - throws: A DatabaseError whenever SQLite could not parse the sql query. - func makeUpdateStatement(sql: String, prepFlags: Int32) throws -> UpdateStatement { - return try UpdateStatement.prepare(sql: sql, prepFlags: prepFlags, in: self) - } - - /// Returns a prepared statement that can be reused. - /// - /// let statement = try db.cachedUpdateStatement(sql: "INSERT INTO player (name) VALUES (?)") - /// try statement.execute(arguments: ["Arthur"]) - /// try statement.execute(arguments: ["Barbara"]) - /// - /// The returned statement may have already been used: it may or may not - /// contain values for its eventual arguments. - /// - /// - parameter sql: An SQL query. - /// - returns: An UpdateStatement. - /// - throws: A DatabaseError whenever SQLite could not parse the sql query. - public func cachedUpdateStatement(sql: String) throws -> UpdateStatement { - return try publicStatementCache.updateStatement(sql) - } - - /// Returns a cached statement that does not conflict with user's cached statements. - func internalCachedUpdateStatement(sql: String) throws -> UpdateStatement { - return try internalStatementCache.updateStatement(sql) - } - - /// Executes one or several SQL statements, separated by semi-colons. - /// - /// try db.execute( - /// sql: "INSERT INTO player (name) VALUES (:name)", - /// arguments: ["name": "Arthur"]) - /// - /// try db.execute(sql: """ - /// INSERT INTO player (name) VALUES (?); - /// INSERT INTO player (name) VALUES (?); - /// INSERT INTO player (name) VALUES (?); - /// """, arguments: ["Arthur", "Barbara", "O'Brien"]) - /// - /// This method may throw a DatabaseError. - /// - /// - parameters: - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func execute(sql: String, arguments: StatementArguments = StatementArguments()) throws { - try execute(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// Executes one or several SQL statements, separated by semi-colons. - /// - /// try db.execute(literal: SQLLiteral( - /// sql: "INSERT INTO player (name) VALUES (:name)", - /// arguments: ["name": "Arthur"])) - /// - /// try db.execute(literal: SQLLiteral(sql: """ - /// INSERT INTO player (name) VALUES (?); - /// INSERT INTO player (name) VALUES (?); - /// INSERT INTO player (name) VALUES (?); - /// """, arguments: ["Arthur", "Barbara", "O'Brien"])) - /// - /// With Swift 5, you can safely embed raw values in your SQL queries, - /// without any risk of syntax errors or SQL injection: - /// - /// try db.execute(literal: """ - /// INSERT INTO player (name) VALUES (\("Arthur")); - /// INSERT INTO player (name) VALUES (\("Barbara")); - /// INSERT INTO player (name) VALUES (\("O'Brien")); - /// """) - /// - /// This method may throw a DatabaseError. - /// - /// - parameter sqlLiteral: An SQLLiteral. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func execute(literal sqlLiteral: SQLLiteral) throws { - // This method is like sqlite3_exec (https://www.sqlite.org/c3ref/exec.html) - // It adds support for arguments, and the tricky part is to consume - // arguments as statements are executed. - // - // This job is performed by StatementArguments.extractBindings(forStatement:allowingRemainingValues:) - // - // And before we return, we'll check that all arguments were consumed. - - var arguments = sqlLiteral.arguments - let initialValuesCount = arguments.values.count - - // Build a C string (SQLite wants that), and execute SQL statements one - // after the other. - try sqlLiteral.sql.utf8CString.withUnsafeBufferPointer { buffer in - guard let sqlStart = buffer.baseAddress else { return } - let sqlEnd = sqlStart + buffer.count // past \0 - var statementStart = sqlStart - while statementStart < sqlEnd { - var statementEnd: UnsafePointer? = nil - let nextStatement: UpdateStatement? - - // Compile - do { - let statementCompilationAuthorizer = StatementCompilationAuthorizer() - authorizer = statementCompilationAuthorizer - defer { authorizer = nil } - - nextStatement = try UpdateStatement( - database: self, - statementStart: statementStart, - statementEnd: &statementEnd, - prepFlags: 0, - authorizer: statementCompilationAuthorizer) - } - - guard let statement = nextStatement else { - // End of SQL string - break - } - - // Extract statement arguments - let bindings = try arguments.extractBindings(forStatement: statement, allowingRemainingValues: true) - // unsafe is OK because we just extracted the correct number of arguments - statement.unsafeSetArguments(StatementArguments(bindings)) - - // Execute - try statement.execute() - - // Next - statementStart = statementEnd! - } - } - - // Check that all arguments were consumed: it is a programmer error to - // provide arguments that do not match the statement. - if arguments.values.isEmpty == false { - throw DatabaseError(resultCode: .SQLITE_MISUSE, message: "wrong number of statement arguments: \(initialValuesCount)") - } - } -} - -extension Database { - - func updateStatementWillExecute(_ statement: UpdateStatement) { - observationBroker.updateStatementWillExecute(statement) - } - - func updateStatementDidExecute(_ statement: UpdateStatement) throws { - if statement.invalidatesDatabaseSchemaCache { - clearSchemaCache() - } - - try observationBroker.updateStatementDidExecute(statement) - } - - func updateStatementDidFail(_ statement: UpdateStatement) throws { - // Failed statements can not be reused, because sqlite3_reset won't - // be able to restore the statement to its initial state: - // https://www.sqlite.org/c3ref/reset.html - // - // So make sure we clear this statement from the cache. - internalStatementCache.remove(statement) - publicStatementCache.remove(statement) - - try observationBroker.updateStatementDidFail(statement) - } - - func selectStatementDidFail(_ statement: SelectStatement) { - // Failed statements can not be reused, because sqlite3_reset won't - // be able to restore the statement to its initial state: - // https://www.sqlite.org/c3ref/reset.html - // - // So make sure we clear this statement from the cache. - internalStatementCache.remove(statement) - publicStatementCache.remove(statement) - } -} - -/// A thread-unsafe statement cache -struct StatementCache { - unowned let db: Database - private var selectStatements: [String: SelectStatement] = [:] - private var updateStatements: [String: UpdateStatement] = [:] - - init(database: Database) { - self.db = database - } - - mutating func selectStatement(_ sql: String) throws -> SelectStatement { - if let statement = selectStatements[sql] { - return statement - } - - // http://www.sqlite.org/c3ref/c_prepare_persistent.html#sqlitepreparepersistent - // > The SQLITE_PREPARE_PERSISTENT flag is a hint to the query - // > planner that the prepared statement will be retained for a long - // > time and probably reused many times. - // - // This looks like a perfect match for cached statements. - // - // However SQLITE_PREPARE_PERSISTENT was only introduced in - // SQLite 3.20.0 http://www.sqlite.org/changes.html#version_3_20 - #if GRDBCUSTOMSQLITE || GRDBCIPHER - let statement = try db.makeSelectStatement(sql: sql, prepFlags: SQLITE_PREPARE_PERSISTENT) - #else - let statement: SelectStatement - if #available(iOS 12.0, OSX 10.14, watchOS 5.0, *) { - // SQLite 3.24.0 or more - statement = try db.makeSelectStatement(sql: sql, prepFlags: SQLITE_PREPARE_PERSISTENT) - } else { - // SQLite 3.19.3 or less - statement = try db.makeSelectStatement(sql: sql) - } - #endif - selectStatements[sql] = statement - return statement - } - - mutating func updateStatement(_ sql: String) throws -> UpdateStatement { - if let statement = updateStatements[sql] { - return statement - } - - // http://www.sqlite.org/c3ref/c_prepare_persistent.html#sqlitepreparepersistent - // > The SQLITE_PREPARE_PERSISTENT flag is a hint to the query - // > planner that the prepared statement will be retained for a long - // > time and probably reused many times. - // - // This looks like a perfect match for cached statements. - // - // However SQLITE_PREPARE_PERSISTENT was only introduced in - // SQLite 3.20.0 http://www.sqlite.org/changes.html#version_3_20 - #if GRDBCUSTOMSQLITE || GRDBCIPHER - let statement = try db.makeUpdateStatement(sql: sql, prepFlags: SQLITE_PREPARE_PERSISTENT) - #else - let statement: UpdateStatement - if #available(iOS 12.0, OSX 10.14, watchOS 5.0, *) { - // SQLite 3.24.0 or more - statement = try db.makeUpdateStatement(sql: sql, prepFlags: SQLITE_PREPARE_PERSISTENT) - } else { - // SQLite 3.19.3 or less - statement = try db.makeUpdateStatement(sql: sql) - } - #endif - updateStatements[sql] = statement - return statement - } - - mutating func clear() { - updateStatements = [:] - selectStatements = [:] - } - - mutating func remove(_ statement: SelectStatement) { - selectStatements.removeFirst { $0.value === statement } - } - - mutating func remove(_ statement: UpdateStatement) { - updateStatements.removeFirst { $0.value === statement } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Database.swift b/Example/Pods/GRDB.swift/GRDB/Core/Database.swift deleted file mode 100755 index edf239a..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Database.swift +++ /dev/null @@ -1,1087 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// A raw SQLite connection, suitable for the SQLite C API. -public typealias SQLiteConnection = OpaquePointer - -/// A raw SQLite function argument. -typealias SQLiteValue = OpaquePointer - -let SQLITE_TRANSIENT = unsafeBitCast(OpaquePointer(bitPattern: -1), to: sqlite3_destructor_type.self) - -/// A Database connection. -/// -/// You don't create a database directly. Instead, you use a DatabaseQueue, or -/// a DatabasePool: -/// -/// let dbQueue = DatabaseQueue(...) -/// -/// // The Database is the `db` in the closure: -/// try dbQueue.write { db in -/// try Player(...).insert(db) -/// } -public final class Database { - // The Database class is not thread-safe. An instance should always be - // used through a SerializedDatabase. - - // MARK: - SQLite C API - - /// The raw SQLite connection, suitable for the SQLite C API. - public let sqliteConnection: SQLiteConnection - - // MARK: - Configuration - - /// The error logging function. - /// - /// Quoting https://www.sqlite.org/errlog.html: - /// - /// > SQLite can be configured to invoke a callback function containing an - /// > error code and a terse error message whenever anomalies occur. This - /// > mechanism is very helpful in tracking obscure problems that occur - /// > rarely and in the field. Application developers are encouraged to take - /// > advantage of the error logging facility of SQLite in their products, - /// > as it is very low CPU and memory cost but can be a huge aid - /// > for debugging. - public static var logError: LogErrorFunction? = nil { - didSet { - if logError != nil { - registerErrorLogCallback { (_, code, message) in - guard let logError = Database.logError else { return } - guard let message = message.map({ String(cString: $0) }) else { return } - let resultCode = ResultCode(rawValue: code) - logError(resultCode, message) - } - } else { - registerErrorLogCallback(nil) - } - } - } - - /// The database configuration - public let configuration: Configuration - - // MARK: - Database Information - - /// The rowID of the most recently inserted row. - /// - /// If no row has ever been inserted using this database connection, - /// returns zero. - /// - /// For more detailed information, see https://www.sqlite.org/c3ref/last_insert_rowid.html - public var lastInsertedRowID: Int64 { - SchedulingWatchdog.preconditionValidQueue(self) - return sqlite3_last_insert_rowid(sqliteConnection) - } - - /// The number of rows modified, inserted or deleted by the most recent - /// successful INSERT, UPDATE or DELETE statement. - /// - /// For more detailed information, see https://www.sqlite.org/c3ref/changes.html - public var changesCount: Int { - SchedulingWatchdog.preconditionValidQueue(self) - return Int(sqlite3_changes(sqliteConnection)) - } - - /// The total number of rows modified, inserted or deleted by all successful - /// INSERT, UPDATE or DELETE statements since the database connection was - /// opened. - /// - /// For more detailed information, see https://www.sqlite.org/c3ref/total_changes.html - public var totalChangesCount: Int { - SchedulingWatchdog.preconditionValidQueue(self) - return Int(sqlite3_total_changes(sqliteConnection)) - } - - /// True if the database connection is currently in a transaction. - public var isInsideTransaction: Bool { - // https://sqlite.org/c3ref/get_autocommit.html - // - // > The sqlite3_get_autocommit() interface returns non-zero or zero if - // > the given database connection is or is not in autocommit mode, - // > respectively. - // - // > Autocommit mode is on by default. Autocommit mode is disabled by a - // > BEGIN statement. Autocommit mode is re-enabled by a COMMIT - // > or ROLLBACK. - // - // > If another thread changes the autocommit status of the database - // > connection while this routine is running, then the return value - // > is undefined. - SchedulingWatchdog.preconditionValidQueue(self) - if isClosed { return false } // Support for SerializedDatabasae.deinit - return sqlite3_get_autocommit(sqliteConnection) == 0 - } - - // MARK: - Internal properties - - // Caches - var schemaCache: DatabaseSchemaCache // internal so that it can be tested - lazy var internalStatementCache = StatementCache(database: self) - lazy var publicStatementCache = StatementCache(database: self) - - // Errors - var lastErrorCode: ResultCode { return ResultCode(rawValue: sqlite3_errcode(sqliteConnection)) } - var lastErrorMessage: String? { return String(cString: sqlite3_errmsg(sqliteConnection)) } - - // Statement authorizer - var authorizer: StatementAuthorizer? { - didSet { - switch (oldValue, authorizer) { - case (.some, nil): - sqlite3_set_authorizer(sqliteConnection, nil, nil) - case (nil, .some): - let dbPointer = Unmanaged.passUnretained(self).toOpaque() - sqlite3_set_authorizer(sqliteConnection, { (dbPointer, actionCode, cString1, cString2, cString3, cString4) -> Int32 in - guard let dbPointer = dbPointer else { return SQLITE_OK } - let db = Unmanaged.fromOpaque(dbPointer).takeUnretainedValue() - return db.authorizer!.authorize(actionCode, cString1, cString2, cString3, cString4) - }, dbPointer) - default: - break - } - } - } - - // Transaction observers management - lazy var observationBroker = DatabaseObservationBroker(self) - - /// The list of compile options used when building SQLite - static let sqliteCompileOptions: Set = DatabaseQueue().inDatabase { - try! Set(String.fetchCursor($0, sql: "PRAGMA COMPILE_OPTIONS")) - } - - // MARK: - Private properties - - private var busyCallback: BusyCallback? - - private var functions = Set() - private var collations = Set() - - private var isClosed: Bool = false - - // MARK: - Initializer - - init(path: String, configuration: Configuration, schemaCache: DatabaseSchemaCache) throws { - self.sqliteConnection = try Database.openConnection(path: path, flags: configuration.SQLiteOpenFlags) - self.configuration = configuration - self.schemaCache = schemaCache - } - - deinit { - assert(isClosed) - } -} - -extension Database { - - // MARK: - Database Opening - - private static func openConnection(path: String, flags: Int32) throws -> SQLiteConnection { - // See https://www.sqlite.org/c3ref/open.html - var sqliteConnection: SQLiteConnection? = nil - let code = sqlite3_open_v2(path, &sqliteConnection, flags, nil) - guard code == SQLITE_OK else { - // https://www.sqlite.org/c3ref/open.html - // > Whether or not an error occurs when it is opened, resources - // > associated with the database connection handle should be - // > released by passing it to sqlite3_close() when it is no - // > longer required. - // - // https://www.sqlite.org/c3ref/close.html - // > Calling sqlite3_close() or sqlite3_close_v2() with a NULL - // > pointer argument is a harmless no-op. - sqlite3_close(sqliteConnection) - throw DatabaseError(resultCode: code) - } - if let sqliteConnection = sqliteConnection { - return sqliteConnection - } - throw DatabaseError(resultCode: .SQLITE_INTERNAL) // WTF SQLite? - } -} - -extension Database { - - // MARK: - Database Setup - - /// This method must be called after database initialization - func setup() throws { - // Setup trace first, so that setup queries are traced. - setupTrace() - try setupForeignKeys() - setupBusyMode() - setupDefaultFunctions() - setupDefaultCollations() - observationBroker.installCommitAndRollbackHooks() - try activateExtendedCodes() - - #if SQLITE_HAS_CODEC - try validateSQLCipher() - if let passphrase = configuration.passphrase { - try setCipherPassphrase(passphrase) - } - #endif - - // Last step before we can start accessing the database. - // This is the opportunity to run SQLCipher configuration - // pragmas such as cipher_page_size, for example. - try configuration.prepareDatabase?(self) - try validateFormat() - configuration.SQLiteConnectionDidOpen?() - } - - private func setupTrace() { - guard configuration.trace != nil else { - return - } - // sqlite3_trace_v2 and sqlite3_expanded_sql were introduced in SQLite 3.14.0 http://www.sqlite.org/changes.html#version_3_14 - // It is available from iOS 10.0 and OS X 10.12 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - #if GRDBCUSTOMSQLITE || GRDBCIPHER - let dbPointer = Unmanaged.passUnretained(self).toOpaque() - sqlite3_trace_v2(sqliteConnection, UInt32(SQLITE_TRACE_STMT), { (mask, dbPointer, stmt, unexpandedSQL) -> Int32 in - return Database.trace_v2(mask, dbPointer, stmt, unexpandedSQL, sqlite3_expanded_sql) - }, dbPointer) - #elseif os(Linux) - setupTrace_v1() - #else - if #available(iOS 10.0, OSX 10.12, watchOS 3.0, *) { - let dbPointer = Unmanaged.passUnretained(self).toOpaque() - sqlite3_trace_v2(sqliteConnection, UInt32(SQLITE_TRACE_STMT), { (mask, dbPointer, stmt, unexpandedSQL) -> Int32 in - return Database.trace_v2(mask, dbPointer, stmt, unexpandedSQL, sqlite3_expanded_sql) - }, dbPointer) - } else { - setupTrace_v1() - } - #endif - } - - // Precondition: configuration.trace != nil - private func setupTrace_v1() { - let dbPointer = Unmanaged.passUnretained(self).toOpaque() - sqlite3_trace(sqliteConnection, { (dbPointer, sql) in - guard let sql = sql.map({ String(cString: $0) }) else { return } - let db = Unmanaged.fromOpaque(dbPointer!).takeUnretainedValue() - db.configuration.trace!(sql) - }, dbPointer) - } - - // Precondition: configuration.trace != nil - private static func trace_v2( - _ mask: UInt32, - _ dbPointer: UnsafeMutableRawPointer?, - _ stmt: UnsafeMutableRawPointer?, - _ unexpandedSQL: UnsafeMutableRawPointer?, - _ sqlite3_expanded_sql: @convention(c) (OpaquePointer?) -> UnsafeMutablePointer?) - -> Int32 - { - guard let stmt = stmt else { return SQLITE_OK } - guard let expandedSQLCString = sqlite3_expanded_sql(OpaquePointer(stmt)) else { return SQLITE_OK } - let sql = String(cString: expandedSQLCString) - sqlite3_free(expandedSQLCString) - let db = Unmanaged.fromOpaque(dbPointer!).takeUnretainedValue() - db.configuration.trace!(sql) - return SQLITE_OK - } - - private func setupForeignKeys() throws { - // Foreign keys are disabled by default with SQLite3 - if configuration.foreignKeysEnabled { - try execute(sql: "PRAGMA foreign_keys = ON") - } - } - - private func setupBusyMode() { - switch configuration.busyMode { - case .immediateError: - break - - case .timeout(let duration): - let milliseconds = Int32(duration * 1000) - sqlite3_busy_timeout(sqliteConnection, milliseconds) - - case .callback(let callback): - busyCallback = callback - let dbPointer = Unmanaged.passUnretained(self).toOpaque() - sqlite3_busy_handler( - sqliteConnection, - { (dbPointer, numberOfTries) in - let db = Unmanaged.fromOpaque(dbPointer!).takeUnretainedValue() - let callback = db.busyCallback! - return callback(Int(numberOfTries)) ? 1 : 0 - }, - dbPointer) - } - } - - private func setupDefaultFunctions() { - add(function: .capitalize) - add(function: .lowercase) - add(function: .uppercase) - - if #available(OSX 10.11, watchOS 3.0, *) { - add(function: .localizedCapitalize) - add(function: .localizedLowercase) - add(function: .localizedUppercase) - } - } - - private func setupDefaultCollations() { - add(collation: .unicodeCompare) - add(collation: .caseInsensitiveCompare) - add(collation: .localizedCaseInsensitiveCompare) - add(collation: .localizedCompare) - add(collation: .localizedStandardCompare) - } - - private func activateExtendedCodes() throws { - let code = sqlite3_extended_result_codes(sqliteConnection, 1) - guard code == SQLITE_OK else { - throw DatabaseError(resultCode: code, message: String(cString: sqlite3_errmsg(sqliteConnection))) - } - } - - #if SQLITE_HAS_CODEC - private func validateSQLCipher() throws { - // https://discuss.zetetic.net/t/important-advisory-sqlcipher-with-xcode-8-and-new-sdks/1688 - // - // > In order to avoid situations where SQLite might be used - // > improperly at runtime, we strongly recommend that - // > applications institute a runtime test to ensure that the - // > application is actually using SQLCipher on the active - // > connection. - if try String.fetchOne(self, sql: "PRAGMA cipher_version") == nil { - throw DatabaseError(resultCode: .SQLITE_MISUSE, message: """ - GRDB is not linked against SQLCipher. \ - Check https://discuss.zetetic.net/t/important-advisory-sqlcipher-with-xcode-8-and-new-sdks/1688 - """) - } - } - - private func setCipherPassphrase(_ passphrase: String) throws { - let data = passphrase.data(using: .utf8)! - #if swift(>=5.0) - let code = data.withUnsafeBytes { - sqlite3_key(sqliteConnection, $0.baseAddress, Int32($0.count)) - } - #else - let code = data.withUnsafeBytes { - sqlite3_key(sqliteConnection, $0, Int32(data.count)) - } - #endif - guard code == SQLITE_OK else { - throw DatabaseError(resultCode: code, message: String(cString: sqlite3_errmsg(sqliteConnection))) - } - } - #endif - - private func validateFormat() throws { - // Users are surprised when they open a picture as a database and - // see no error (https://github.com/groue/GRDB.swift/issues/54). - // - // So let's fail early if file is not a database, or encrypted with - // another passphrase. - try makeSelectStatement(sql: "SELECT * FROM sqlite_master LIMIT 1").makeCursor().next() - } -} - -extension Database { - - // MARK: - Database Closing - - /// This method must be called before database deallocation - func close() { - SchedulingWatchdog.preconditionValidQueue(self) - assert(!isClosed) - - configuration.SQLiteConnectionWillClose?(sqliteConnection) - internalStatementCache.clear() - publicStatementCache.clear() - Database.closeConnection(sqliteConnection) - isClosed = true - configuration.SQLiteConnectionDidClose?() - } - - private static func closeConnection(_ sqliteConnection: SQLiteConnection) { - // sqlite3_close_v2 was added in SQLite 3.7.14 http://www.sqlite.org/changes.html#version_3_7_14 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - #if GRDBCUSTOMSQLITE || GRDBCIPHER - closeConnection_v2(sqliteConnection, sqlite3_close_v2) - #else - if #available(OSX 10.10, OSXApplicationExtension 10.10, *) { - closeConnection_v2(sqliteConnection, sqlite3_close_v2) - } else { - closeConnection_v1(sqliteConnection) - } - #endif - } - - private static func closeConnection_v1(_ sqliteConnection: SQLiteConnection) { - // https://www.sqlite.org/c3ref/close.html - // > If the database connection is associated with unfinalized prepared - // > statements or unfinished sqlite3_backup objects then - // > sqlite3_close() will leave the database connection open and - // > return SQLITE_BUSY. - let code = sqlite3_close(sqliteConnection) - if code != SQLITE_OK, let log = logError { - // A rare situation where GRDB doesn't fatalError on - // unprocessed errors. - let message = String(cString: sqlite3_errmsg(sqliteConnection)) - log(ResultCode(rawValue: code), "could not close database: \(message)") - if code == SQLITE_BUSY { - // Let the user know about unfinalized statements that did - // prevent the connection from closing properly. - var stmt: SQLiteStatement? = sqlite3_next_stmt(sqliteConnection, nil) - while stmt != nil { - log(ResultCode(rawValue: code), "unfinalized statement: \(String(cString: sqlite3_sql(stmt)))") - stmt = sqlite3_next_stmt(sqliteConnection, stmt) - } - } - } - } - - private static func closeConnection_v2( - _ sqliteConnection: SQLiteConnection, - _ sqlite3_close_v2: @convention(c) (OpaquePointer?) -> Int32) - { - // https://www.sqlite.org/c3ref/close.html - // > If sqlite3_close_v2() is called with unfinalized prepared - // > statements and/or unfinished sqlite3_backups, then the database - // > connection becomes an unusable "zombie" which will automatically - // > be deallocated when the last prepared statement is finalized or the - // > last sqlite3_backup is finished. - let code = sqlite3_close_v2(sqliteConnection) - if code != SQLITE_OK, let log = logError { - // A rare situation where GRDB doesn't fatalError on - // unprocessed errors. - let message = String(cString: sqlite3_errmsg(sqliteConnection)) - log(ResultCode(rawValue: code), "could not close database: \(message)") - } - } -} - -extension Database { - - // MARK: - Functions - - /// Add or redefine an SQL function. - /// - /// let fn = DatabaseFunction("succ", argumentCount: 1) { dbValues in - /// guard let int = Int.fromDatabaseValue(dbValues[0]) else { - /// return nil - /// } - /// return int + 1 - /// } - /// db.add(function: fn) - /// try Int.fetchOne(db, sql: "SELECT succ(1)")! // 2 - public func add(function: DatabaseFunction) { - functions.update(with: function) - function.install(in: self) - } - - /// Remove an SQL function. - public func remove(function: DatabaseFunction) { - functions.remove(function) - function.uninstall(in: self) - } -} - -extension Database { - - // MARK: - Collations - - /// Add or redefine a collation. - /// - /// let collation = DatabaseCollation("localized_standard") { (string1, string2) in - /// return (string1 as NSString).localizedStandardCompare(string2) - /// } - /// db.add(collation: collation) - /// try db.execute(sql: "CREATE TABLE files (name TEXT COLLATE localized_standard") - public func add(collation: DatabaseCollation) { - collations.update(with: collation) - let collationPointer = Unmanaged.passUnretained(collation).toOpaque() - let code = sqlite3_create_collation_v2( - sqliteConnection, - collation.name, - SQLITE_UTF8, - collationPointer, - { (collationPointer, length1, buffer1, length2, buffer2) -> Int32 in - let collation = Unmanaged.fromOpaque(collationPointer!).takeUnretainedValue() - return Int32(collation.function(length1, buffer1, length2, buffer2).rawValue) - }, nil) - guard code == SQLITE_OK else { - // Assume a GRDB bug: there is no point throwing any error. - fatalError(DatabaseError(resultCode: code, message: lastErrorMessage).description) - } - } - - /// Remove a collation. - public func remove(collation: DatabaseCollation) { - collations.remove(collation) - sqlite3_create_collation_v2( - sqliteConnection, - collation.name, - SQLITE_UTF8, - nil, nil, nil) - } -} - -extension Database { - - // MARK: - Read-Only Access - - /// Grants read-only access, starting SQLite 3.8.0 - func readOnly(_ block: () throws -> T) rethrows -> T { - if configuration.readonly { - return try block() - } - - // query_only pragma was added in SQLite 3.8.0 http://www.sqlite.org/changes.html#version_3_8_0 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - // Assume those pragmas never fail - try! internalCachedUpdateStatement(sql: "PRAGMA query_only = 1").execute() - defer { try! internalCachedUpdateStatement(sql: "PRAGMA query_only = 0").execute() } - return try block() - } -} - -extension Database { - - // MARK: - Transactions & Savepoint - - /// Executes a block inside a database transaction. - /// - /// try dbQueue.inDatabase do { - /// try db.inTransaction { - /// try db.execute(sql: "INSERT ...") - /// return .commit - /// } - /// } - /// - /// If the block throws an error, the transaction is rollbacked and the - /// error is rethrown. - /// - /// This method is not reentrant: you can't nest transactions. - /// - /// - parameters: - /// - kind: The transaction type (default nil). If nil, the transaction - /// type is configuration.defaultTransactionKind, which itself - /// defaults to .deferred. See https://www.sqlite.org/lang_transaction.html - /// for more information. - /// - block: A block that executes SQL statements and return either - /// .commit or .rollback. - /// - throws: The error thrown by the block. - public func inTransaction(_ kind: TransactionKind? = nil, _ block: () throws -> TransactionCompletion) throws { - // Begin transaction - try beginTransaction(kind) - - // Now that transaction has begun, we'll rollback in case of error. - // But we'll throw the first caught error, so that user knows - // what happened. - var firstError: Error? = nil - let needsRollback: Bool - do { - let completion = try block() - switch completion { - case .commit: - try commit() - needsRollback = false - case .rollback: - needsRollback = true - } - } catch { - firstError = error - needsRollback = true - } - - if needsRollback { - do { - try rollback() - } catch { - if firstError == nil { - firstError = error - } - } - } - - if let firstError = firstError { - throw firstError - } - } - - /// Executes a block inside a savepoint. - /// - /// try dbQueue.inDatabase do { - /// try db.inSavepoint { - /// try db.execute(sql: "INSERT ...") - /// return .commit - /// } - /// } - /// - /// If the block throws an error, the savepoint is rollbacked and the - /// error is rethrown. - /// - /// This method is reentrant: you can nest savepoints. - /// - /// - parameter block: A block that executes SQL statements and return - /// either .commit or .rollback. - /// - throws: The error thrown by the block. - public func inSavepoint(_ block: () throws -> TransactionCompletion) throws { - // By default, top level SQLite savepoints open a deferred transaction. - // - // But GRDB database configuration mandates a default transaction kind - // that we have to honor. - // - // So when the default GRDB transaction kind is not deferred, we open a - // transaction instead - if !isInsideTransaction && configuration.defaultTransactionKind != .deferred { - return try inTransaction(configuration.defaultTransactionKind, block) - } - - // If the savepoint is top-level, we'll use ROLLBACK TRANSACTION in - // order to perform the special error handling of rollbacks (see - // the rollback method). - let topLevelSavepoint = !isInsideTransaction - - // Begin savepoint - // - // We use a single name for savepoints because there is no need - // using unique savepoint names. User could still mess with them - // with raw SQL queries, but let's assume that it is unlikely that - // the user uses "grdb" as a savepoint name. - try execute(sql: "SAVEPOINT grdb") - - // Now that savepoint has begun, we'll rollback in case of error. - // But we'll throw the first caught error, so that user knows - // what happened. - var firstError: Error? = nil - let needsRollback: Bool - do { - let completion = try block() - switch completion { - case .commit: - try execute(sql: "RELEASE SAVEPOINT grdb") - assert(!topLevelSavepoint || !isInsideTransaction) - needsRollback = false - case .rollback: - needsRollback = true - } - } catch { - firstError = error - needsRollback = true - } - - if needsRollback { - do { - if topLevelSavepoint { - try rollback() - } else { - // Rollback, and release the savepoint. - // Rollback alone is not enough to clear the savepoint from - // the SQLite savepoint stack. - try execute(sql: "ROLLBACK TRANSACTION TO SAVEPOINT grdb") - try execute(sql: "RELEASE SAVEPOINT grdb") - } - } catch { - if firstError == nil { - firstError = error - } - } - } - - if let firstError = firstError { - throw firstError - } - } - - /// Begins a database transaction. - /// - /// - parameter kind: The transaction type (default nil). If nil, the - /// transaction type is configuration.defaultTransactionKind, which itself - /// defaults to .deferred. See https://www.sqlite.org/lang_transaction.html - /// for more information. - /// - throws: The error thrown by the block. - public func beginTransaction(_ kind: TransactionKind? = nil) throws { - let kind = kind ?? configuration.defaultTransactionKind - try execute(sql: "BEGIN \(kind.rawValue) TRANSACTION") - assert(isInsideTransaction) - } - - /// Begins a database transaction and take a snapshot of the last committed - /// database state. - func beginSnapshotIsolation() throws { - // https://www.sqlite.org/isolation.html - // - // > In WAL mode, SQLite exhibits "snapshot isolation". When a read - // > transaction starts, that reader continues to see an unchanging - // > "snapshot" of the database file as it existed at the moment in time - // > when the read transaction started. Any write transactions that - // > commit while the read transaction is active are still invisible to - // > the read transaction, because the reader is seeing a snapshot of - // > database file from a prior moment in time. - // - // That's exactly what we need. But what does "when read transaction - // starts" mean? - // - // http://www.sqlite.org/lang_transaction.html - // - // > Deferred [transaction] means that no locks are acquired on the - // > database until the database is first accessed. [...] Locks are not - // > acquired until the first read or write operation. [...] Because the - // > acquisition of locks is deferred until they are needed, it is - // > possible that another thread or process could create a separate - // > transaction and write to the database after the BEGIN on the - // > current thread has executed. - // - // Now that's precise enough: SQLite defers "snapshot isolation" until - // the first SELECT: - // - // Reader Writer - // BEGIN DEFERRED TRANSACTION - // UPDATE ... (1) - // Here the change (1) is visible - // SELECT ... - // UPDATE ... (2) - // Here the change (2) is not visible - // - // We thus have to perform a select that establishes the - // snapshot isolation before we release the writer queue: - // - // Reader Writer - // BEGIN DEFERRED TRANSACTION - // SELECT anything - // UPDATE ... - // Here the change is not visible by GRDB user - try beginTransaction(.deferred) - try internalCachedSelectStatement(sql: "SELECT rootpage FROM sqlite_master LIMIT 1").makeCursor().next() - } - - /// Rollbacks a database transaction. - public func rollback() throws { - // The SQLite documentation contains two related but distinct techniques - // to handle rollbacks and errors: - // - // https://www.sqlite.org/lang_transaction.html#immediate - // - // > Response To Errors Within A Transaction - // > - // > If certain kinds of errors occur within a transaction, the - // > transaction may or may not be rolled back automatically. - // > The errors that can cause an automatic rollback include: - // > - // > - SQLITE_FULL: database or disk full - // > - SQLITE_IOERR: disk I/O error - // > - SQLITE_BUSY: database in use by another process - // > - SQLITE_NOMEM: out or memory - // > - // > [...] It is recommended that applications respond to the - // > errors listed above by explicitly issuing a ROLLBACK - // > command. If the transaction has already been rolled back - // > automatically by the error response, then the ROLLBACK - // > command will fail with an error, but no harm is caused - // > by this. - // - // https://sqlite.org/c3ref/get_autocommit.html - // - // > The sqlite3_get_autocommit() interface returns non-zero or zero if - // > the given database connection is or is not in autocommit mode, - // > respectively. - // > - // > [...] If certain kinds of errors occur on a statement within a - // > multi-statement transaction (errors including SQLITE_FULL, - // > SQLITE_IOERR, SQLITE_NOMEM, SQLITE_BUSY, and SQLITE_INTERRUPT) then - // > the transaction might be rolled back automatically. The only way to - // > find out whether SQLite automatically rolled back the transaction - // > after an error is to use this function. - // - // The second technique is more robust, because we don't have to guess - // which rollback errors should be ignored, and which rollback errors - // should be exposed to the library user. - SchedulingWatchdog.preconditionValidQueue(self) // guard sqlite3_get_autocommit - if sqlite3_get_autocommit(sqliteConnection) == 0 { - try execute(sql: "ROLLBACK TRANSACTION") - } - assert(!isInsideTransaction) - } - - /// Commits a database transaction. - public func commit() throws { - try execute(sql: "COMMIT TRANSACTION") - assert(!isInsideTransaction) - } -} - -extension Database { - - // MARK: - Memory Management - - func releaseMemory() { - sqlite3_db_release_memory(sqliteConnection) - schemaCache.clear() - internalStatementCache.clear() - publicStatementCache.clear() - } -} - -extension Database { - - // MARK: - Backup - - static func backup(from dbFrom: Database, to dbDest: Database, afterBackupInit: (() -> ())? = nil, afterBackupStep: (() -> ())? = nil) throws { - guard let backup = sqlite3_backup_init(dbDest.sqliteConnection, "main", dbFrom.sqliteConnection, "main") else { - throw DatabaseError(resultCode: dbDest.lastErrorCode, message: dbDest.lastErrorMessage) - } - guard Int(bitPattern: backup) != Int(SQLITE_ERROR) else { - throw DatabaseError(resultCode: .SQLITE_ERROR) - } - - afterBackupInit?() - - do { - backupLoop: while true { - switch sqlite3_backup_step(backup, -1) { - case SQLITE_DONE: - afterBackupStep?() - break backupLoop - case SQLITE_OK: - afterBackupStep?() - case let code: - throw DatabaseError(resultCode: code, message: dbDest.lastErrorMessage) - } - } - } catch { - sqlite3_backup_finish(backup) - throw error - } - - switch sqlite3_backup_finish(backup) { - case SQLITE_OK: - break - case let code: - throw DatabaseError(resultCode: code, message: dbDest.lastErrorMessage) - } - - // The schema of the destination database has changed: - dbDest.clearSchemaCache() - } -} - -#if SQLITE_HAS_CODEC - extension Database { - - // MARK: - Encryption - - func change(passphrase: String) throws { - // FIXME: sqlite3_rekey is discouraged. - // - // https://github.com/ccgus/fmdb/issues/547#issuecomment-259219320 - // - // > We (Zetetic) have been discouraging the use of sqlite3_rekey in - // > favor of attaching a new database with the desired encryption - // > options and using sqlcipher_export() to migrate the contents and - // > schema of the original db into the new one: - // > https://discuss.zetetic.net/t/how-to-encrypt-a-plaintext-sqlite-database-to-use-sqlcipher-and-avoid-file-is-encrypted-or-is-not-a-database-errors/ - let data = passphrase.data(using: .utf8)! - #if swift(>=5.0) - let code = data.withUnsafeBytes { - sqlite3_rekey(sqliteConnection, $0.baseAddress, Int32($0.count)) - } - #else - let code = data.withUnsafeBytes { - sqlite3_rekey(sqliteConnection, $0, Int32(data.count)) - } - #endif - guard code == SQLITE_OK else { - throw DatabaseError(resultCode: code, message: lastErrorMessage) - } - } - } -#endif - -extension Database { - - /// See BusyMode and https://www.sqlite.org/c3ref/busy_handler.html - public typealias BusyCallback = (_ numberOfTries: Int) -> Bool - - /// When there are several connections to a database, a connection may try - /// to access the database while it is locked by another connection. - /// - /// The BusyMode enum describes the behavior of GRDB when such a situation - /// occurs: - /// - /// - .immediateError: The SQLITE_BUSY error is immediately returned to the - /// connection that tries to access the locked database. - /// - /// - .timeout: The SQLITE_BUSY error will be returned only if the database - /// remains locked for more than the specified duration. - /// - /// - .callback: Perform your custom lock handling. - /// - /// To set the busy mode of a database, use Configuration: - /// - /// // Wait 1 second before failing with SQLITE_BUSY - /// let configuration = Configuration(busyMode: .timeout(1)) - /// let dbQueue = DatabaseQueue(path: "...", configuration: configuration) - /// - /// Relevant SQLite documentation: - /// - /// - https://www.sqlite.org/c3ref/busy_timeout.html - /// - https://www.sqlite.org/c3ref/busy_handler.html - /// - https://www.sqlite.org/lang_transaction.html - /// - https://www.sqlite.org/wal.html - public enum BusyMode { - /// The SQLITE_BUSY error is immediately returned to the connection that - /// tries to access the locked database. - case immediateError - - /// The SQLITE_BUSY error will be returned only if the database remains - /// locked for more than the specified duration (in seconds). - case timeout(TimeInterval) - - /// A custom callback that is called when a database is locked. - /// See https://www.sqlite.org/c3ref/busy_handler.html - case callback(BusyCallback) - } - - /// The available [checkpoint modes](https://www.sqlite.org/c3ref/wal_checkpoint_v2.html). - public enum CheckpointMode: Int32 { - case passive = 0 // SQLITE_CHECKPOINT_PASSIVE - case full = 1 // SQLITE_CHECKPOINT_FULL - case restart = 2 // SQLITE_CHECKPOINT_RESTART - case truncate = 3 // SQLITE_CHECKPOINT_TRUNCATE - } - - /// A built-in SQLite collation. - /// - /// See https://www.sqlite.org/datatype3.html#collation - public struct CollationName : RawRepresentable, Hashable { - /// :nodoc: - public let rawValue: String - - /// :nodoc: - public init(rawValue: String) { - self.rawValue = rawValue - } - - public init(_ rawValue: String) { - self.rawValue = rawValue - } - - /// The `BINARY` built-in SQL collation - public static let binary = CollationName("BINARY") - - /// The `NOCASE` built-in SQL collation - public static let nocase = CollationName("NOCASE") - - /// The `RTRIM` built-in SQL collation - public static let rtrim = CollationName("RTRIM") - } - - /// An SQL column type. - /// - /// try db.create(table: "player") { t in - /// t.autoIncrementedPrimaryKey("id") - /// t.column("title", .text) - /// } - /// - /// See https://www.sqlite.org/datatype3.html - public struct ColumnType : RawRepresentable, Hashable { - /// :nodoc: - public let rawValue: String - - /// :nodoc: - public init(rawValue: String) { - self.rawValue = rawValue - } - - public init(_ rawValue: String) { - self.rawValue = rawValue - } - - /// The `TEXT` SQL column type - public static let text = ColumnType("TEXT") - - /// The `INTEGER` SQL column type - public static let integer = ColumnType("INTEGER") - - /// The `DOUBLE` SQL column type - public static let double = ColumnType("DOUBLE") - - /// The `NUMERIC` SQL column type - public static let numeric = ColumnType("NUMERIC") - - /// The `BOOLEAN` SQL column type - public static let boolean = ColumnType("BOOLEAN") - - /// The `BLOB` SQL column type - public static let blob = ColumnType("BLOB") - - /// The `DATE` SQL column type - public static let date = ColumnType("DATE") - - /// The `DATETIME` SQL column type - public static let datetime = ColumnType("DATETIME") - } - - /// An SQLite conflict resolution. - /// - /// See https://www.sqlite.org/lang_conflict.html. - public enum ConflictResolution : String { - case rollback = "ROLLBACK" - case abort = "ABORT" - case fail = "FAIL" - case ignore = "IGNORE" - case replace = "REPLACE" - } - - /// A foreign key action. - /// - /// See https://www.sqlite.org/foreignkeys.html - public enum ForeignKeyAction : String { - case cascade = "CASCADE" - case restrict = "RESTRICT" - case setNull = "SET NULL" - case setDefault = "SET DEFAULT" - } - - /// log function that takes an error message. - public typealias LogErrorFunction = (_ resultCode: ResultCode, _ message: String) -> Void - - /// The end of a transaction: Commit, or Rollback - public enum TransactionCompletion { - case commit - case rollback - } - - /// An SQLite transaction kind. See https://www.sqlite.org/lang_transaction.html - public enum TransactionKind : String { - case deferred = "DEFERRED" - case immediate = "IMMEDIATE" - case exclusive = "EXCLUSIVE" - } -} - -extension Database { - /// An SQLite threading mode. See https://www.sqlite.org/threadsafe.html. - enum ThreadingMode { - case `default` - case multiThread - case serialized - - var SQLiteOpenFlags: Int32 { - switch self { - case .`default`: - return 0 - case .multiThread: - return SQLITE_OPEN_NOMUTEX - case .serialized: - return SQLITE_OPEN_FULLMUTEX - } - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseCollation.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseCollation.swift deleted file mode 100755 index 530992c..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseCollation.swift +++ /dev/null @@ -1,55 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// A Collation is a string comparison function used by SQLite. -public final class DatabaseCollation { - public let name: String - let function: (Int32, UnsafeRawPointer?, Int32, UnsafeRawPointer?) -> ComparisonResult - - /// Creates a collation. - /// - /// let collation = DatabaseCollation("localized_standard") { (string1, string2) in - /// return (string1 as NSString).localizedStandardCompare(string2) - /// } - /// db.add(collation: collation) - /// try db.execute(sql: "CREATE TABLE file (name TEXT COLLATE localized_standard") - /// - /// - parameters: - /// - name: The function name. - /// - function: A function that compares two strings. - public init(_ name: String, function: @escaping (String, String) -> ComparisonResult) { - self.name = name - self.function = { (length1, buffer1, length2, buffer2) in - // Buffers are not C strings: they do not end with \0. - let string1 = String(bytesNoCopy: UnsafeMutableRawPointer(mutating: buffer1.unsafelyUnwrapped), length: Int(length1), encoding: .utf8, freeWhenDone: false)! - let string2 = String(bytesNoCopy: UnsafeMutableRawPointer(mutating: buffer2.unsafelyUnwrapped), length: Int(length2), encoding: .utf8, freeWhenDone: false)! - return function(string1, string2) - } - } -} - -extension DatabaseCollation: Hashable { - // Collation equality is based on the sqlite3_strnicmp SQLite function. - // (see https://www.sqlite.org/c3ref/create_collation.html). Computing - // a hash value that honors the Swift Hashable contract (value equality - // implies hash equality) is thus non trivial. But it's not that - // important, since this hashValue is only used when one adds - // or removes a collation from a database connection. - /// :nodoc: - public func hash(into hasher: inout Hasher) { - hasher.combine(0) - } - - /// Two collations are equal if they share the same name (case insensitive) - /// :nodoc: - public static func == (lhs: DatabaseCollation, rhs: DatabaseCollation) -> Bool { - // See https://www.sqlite.org/c3ref/create_collation.html - return sqlite3_stricmp(lhs.name, lhs.name) == 0 - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseError.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseError.swift deleted file mode 100755 index d912174..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseError.swift +++ /dev/null @@ -1,270 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -public struct ResultCode : RawRepresentable, Equatable, CustomStringConvertible { - public let rawValue: Int32 - - public init(rawValue: Int32) { - self.rawValue = rawValue - } - - /// A result code limited to the least significant 8 bits of the receiver. - /// See https://www.sqlite.org/rescode.html for more information. - /// - /// let resultCode = .SQLITE_CONSTRAINT_FOREIGNKEY - /// resultCode.primaryResultCode == .SQLITE_CONSTRAINT // true - public var primaryResultCode: ResultCode { - return ResultCode(rawValue: rawValue & 0xFF) - } - - var isPrimary: Bool { - return self == primaryResultCode - } - - /// Returns true if the code on the left matches the code on the right. - /// - /// Primary result codes match themselves and their extended result codes, - /// while extended result codes match only themselves: - /// - /// switch error.extendedResultCode { - /// case .SQLITE_CONSTRAINT_FOREIGNKEY: // foreign key constraint error - /// case .SQLITE_CONSTRAINT: // any other constraint error - /// default: // any other database error - /// } - public static func ~= (pattern: ResultCode, code: ResultCode) -> Bool { - if pattern.isPrimary { - return pattern == code.primaryResultCode - } else { - return pattern == code - } - } - - // Primary Result codes - // https://www.sqlite.org/rescode.html#primary_result_code_list - - public static let SQLITE_OK = ResultCode(rawValue: 0) // Successful result - public static let SQLITE_ERROR = ResultCode(rawValue: 1) // SQL error or missing database - public static let SQLITE_INTERNAL = ResultCode(rawValue: 2) // Internal logic error in SQLite - public static let SQLITE_PERM = ResultCode(rawValue: 3) // Access permission denied - public static let SQLITE_ABORT = ResultCode(rawValue: 4) // Callback routine requested an abort - public static let SQLITE_BUSY = ResultCode(rawValue: 5) // The database file is locked - public static let SQLITE_LOCKED = ResultCode(rawValue: 6) // A table in the database is locked - public static let SQLITE_NOMEM = ResultCode(rawValue: 7) // A malloc() failed - public static let SQLITE_READONLY = ResultCode(rawValue: 8) // Attempt to write a readonly database - public static let SQLITE_INTERRUPT = ResultCode(rawValue: 9) // Operation terminated by sqlite3_interrupt() - public static let SQLITE_IOERR = ResultCode(rawValue: 10) // Some kind of disk I/O error occurred - public static let SQLITE_CORRUPT = ResultCode(rawValue: 11) // The database disk image is malformed - public static let SQLITE_NOTFOUND = ResultCode(rawValue: 12) // Unknown opcode in sqlite3_file_control() - public static let SQLITE_FULL = ResultCode(rawValue: 13) // Insertion failed because database is full - public static let SQLITE_CANTOPEN = ResultCode(rawValue: 14) // Unable to open the database file - public static let SQLITE_PROTOCOL = ResultCode(rawValue: 15) // Database lock protocol error - public static let SQLITE_EMPTY = ResultCode(rawValue: 16) // Database is empty - public static let SQLITE_SCHEMA = ResultCode(rawValue: 17) // The database schema changed - public static let SQLITE_TOOBIG = ResultCode(rawValue: 18) // String or BLOB exceeds size limit - public static let SQLITE_CONSTRAINT = ResultCode(rawValue: 19) // Abort due to constraint violation - public static let SQLITE_MISMATCH = ResultCode(rawValue: 20) // Data type mismatch - public static let SQLITE_MISUSE = ResultCode(rawValue: 21) // Library used incorrectly - public static let SQLITE_NOLFS = ResultCode(rawValue: 22) // Uses OS features not supported on host - public static let SQLITE_AUTH = ResultCode(rawValue: 23) // Authorization denied - public static let SQLITE_FORMAT = ResultCode(rawValue: 24) // Auxiliary database format error - public static let SQLITE_RANGE = ResultCode(rawValue: 25) // 2nd parameter to sqlite3_bind out of range - public static let SQLITE_NOTADB = ResultCode(rawValue: 26) // File opened that is not a database file - public static let SQLITE_NOTICE = ResultCode(rawValue: 27) // Notifications from sqlite3_log() - public static let SQLITE_WARNING = ResultCode(rawValue: 28) // Warnings from sqlite3_log() - public static let SQLITE_ROW = ResultCode(rawValue: 100) // sqlite3_step() has another row ready - public static let SQLITE_DONE = ResultCode(rawValue: 101) // sqlite3_step() has finished executing - - // Extended Result Code - // https://www.sqlite.org/rescode.html#extended_result_code_list - - public static let SQLITE_IOERR_READ = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (1<<8))) - public static let SQLITE_IOERR_SHORT_READ = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (2<<8))) - public static let SQLITE_IOERR_WRITE = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (3<<8))) - public static let SQLITE_IOERR_FSYNC = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (4<<8))) - public static let SQLITE_IOERR_DIR_FSYNC = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (5<<8))) - public static let SQLITE_IOERR_TRUNCATE = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (6<<8))) - public static let SQLITE_IOERR_FSTAT = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (7<<8))) - public static let SQLITE_IOERR_UNLOCK = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (8<<8))) - public static let SQLITE_IOERR_RDLOCK = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (9<<8))) - public static let SQLITE_IOERR_DELETE = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (10<<8))) - public static let SQLITE_IOERR_BLOCKED = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (11<<8))) - public static let SQLITE_IOERR_NOMEM = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (12<<8))) - public static let SQLITE_IOERR_ACCESS = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (13<<8))) - public static let SQLITE_IOERR_CHECKRESERVEDLOCK = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (14<<8))) - public static let SQLITE_IOERR_LOCK = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (15<<8))) - public static let SQLITE_IOERR_CLOSE = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (16<<8))) - public static let SQLITE_IOERR_DIR_CLOSE = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (17<<8))) - public static let SQLITE_IOERR_SHMOPEN = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (18<<8))) - public static let SQLITE_IOERR_SHMSIZE = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (19<<8))) - public static let SQLITE_IOERR_SHMLOCK = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (20<<8))) - public static let SQLITE_IOERR_SHMMAP = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (21<<8))) - public static let SQLITE_IOERR_SEEK = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (22<<8))) - public static let SQLITE_IOERR_DELETE_NOENT = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (23<<8))) - public static let SQLITE_IOERR_MMAP = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (24<<8))) - public static let SQLITE_IOERR_GETTEMPPATH = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (25<<8))) - public static let SQLITE_IOERR_CONVPATH = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (26<<8))) - public static let SQLITE_IOERR_VNODE = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (27<<8))) - public static let SQLITE_IOERR_AUTH = ResultCode(rawValue: (SQLITE_IOERR.rawValue | (28<<8))) - public static let SQLITE_LOCKED_SHAREDCACHE = ResultCode(rawValue: (SQLITE_LOCKED.rawValue | (1<<8))) - public static let SQLITE_BUSY_RECOVERY = ResultCode(rawValue: (SQLITE_BUSY.rawValue | (1<<8))) - public static let SQLITE_BUSY_SNAPSHOT = ResultCode(rawValue: (SQLITE_BUSY.rawValue | (2<<8))) - public static let SQLITE_CANTOPEN_NOTEMPDIR = ResultCode(rawValue: (SQLITE_CANTOPEN.rawValue | (1<<8))) - public static let SQLITE_CANTOPEN_ISDIR = ResultCode(rawValue: (SQLITE_CANTOPEN.rawValue | (2<<8))) - public static let SQLITE_CANTOPEN_FULLPATH = ResultCode(rawValue: (SQLITE_CANTOPEN.rawValue | (3<<8))) - public static let SQLITE_CANTOPEN_CONVPATH = ResultCode(rawValue: (SQLITE_CANTOPEN.rawValue | (4<<8))) - public static let SQLITE_CORRUPT_VTAB = ResultCode(rawValue: (SQLITE_CORRUPT.rawValue | (1<<8))) - public static let SQLITE_READONLY_RECOVERY = ResultCode(rawValue: (SQLITE_READONLY.rawValue | (1<<8))) - public static let SQLITE_READONLY_CANTLOCK = ResultCode(rawValue: (SQLITE_READONLY.rawValue | (2<<8))) - public static let SQLITE_READONLY_ROLLBACK = ResultCode(rawValue: (SQLITE_READONLY.rawValue | (3<<8))) - public static let SQLITE_READONLY_DBMOVED = ResultCode(rawValue: (SQLITE_READONLY.rawValue | (4<<8))) - public static let SQLITE_ABORT_ROLLBACK = ResultCode(rawValue: (SQLITE_ABORT.rawValue | (2<<8))) - public static let SQLITE_CONSTRAINT_CHECK = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (1<<8))) - public static let SQLITE_CONSTRAINT_COMMITHOOK = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (2<<8))) - public static let SQLITE_CONSTRAINT_FOREIGNKEY = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (3<<8))) - public static let SQLITE_CONSTRAINT_FUNCTION = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (4<<8))) - public static let SQLITE_CONSTRAINT_NOTNULL = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (5<<8))) - public static let SQLITE_CONSTRAINT_PRIMARYKEY = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (6<<8))) - public static let SQLITE_CONSTRAINT_TRIGGER = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (7<<8))) - public static let SQLITE_CONSTRAINT_UNIQUE = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (8<<8))) - public static let SQLITE_CONSTRAINT_VTAB = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (9<<8))) - public static let SQLITE_CONSTRAINT_ROWID = ResultCode(rawValue: (SQLITE_CONSTRAINT.rawValue | (10<<8))) - public static let SQLITE_NOTICE_RECOVER_WAL = ResultCode(rawValue: (SQLITE_NOTICE.rawValue | (1<<8))) - public static let SQLITE_NOTICE_RECOVER_ROLLBACK = ResultCode(rawValue: (SQLITE_NOTICE.rawValue | (2<<8))) - public static let SQLITE_WARNING_AUTOINDEX = ResultCode(rawValue: (SQLITE_WARNING.rawValue | (1<<8))) - public static let SQLITE_AUTH_USER = ResultCode(rawValue: (SQLITE_AUTH.rawValue | (1<<8))) - public static let SQLITE_OK_LOAD_PERMANENTLY = ResultCode(rawValue: (SQLITE_OK.rawValue | (1<<8))) -} - -// CustomStringConvertible -extension ResultCode { - var errorString: String? { - // sqlite3_errstr was added in SQLite 3.7.15 http://www.sqlite.org/changes.html#version_3_7_15 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - #if GRDBCUSTOMSQLITE || GRDBCIPHER - return String(cString: sqlite3_errstr(rawValue)) - #else - if #available(OSX 10.10, OSXApplicationExtension 10.10, *) { - return String(cString: sqlite3_errstr(rawValue)) - } else { - return nil - } - #endif - } - - /// :nodoc: - public var description: String { - if let errorString = errorString { - return "\(rawValue) (\(errorString))" - } else { - return "\(rawValue)" - } - } -} - -/// DatabaseError wraps an SQLite error. -public struct DatabaseError : Error, CustomStringConvertible, CustomNSError { - - /// The SQLite error code (see - /// https://www.sqlite.org/rescode.html#primary_result_code_list). - /// - /// do { - /// ... - /// } catch let error as DatabaseError where error.resultCode == .SQL_CONSTRAINT { - /// // A constraint error - /// } - /// - /// This property returns a "primary result code", that is to say the least - /// significant 8 bits of any SQLite result code. See - /// https://www.sqlite.org/rescode.html for more information. - /// - /// See also `extendedResultCode`. - public var resultCode: ResultCode { - return extendedResultCode.primaryResultCode - } - - /// The SQLite extended error code (see - /// https://www.sqlite.org/rescode.html#extended_result_code_list). - /// - /// do { - /// ... - /// } catch let error as DatabaseError where error.extendedResultCode == .SQLITE_CONSTRAINT_FOREIGNKEY { - /// // A foreign key constraint error - /// } - /// - /// See also `resultCode`. - public let extendedResultCode: ResultCode - - /// The SQLite error message. - public let message: String? - - /// The SQL query that yielded the error (if relevant). - public let sql: String? - - /// Creates a Database Error - public init(resultCode: ResultCode = .SQLITE_ERROR, message: String? = nil, sql: String? = nil, arguments: StatementArguments? = nil) { - self.extendedResultCode = resultCode - self.message = message ?? resultCode.errorString - self.sql = sql - self.arguments = arguments - } - - /// Creates a Database Error with a raw Int32 result code. - /// - /// This initializer is not public because library user is not supposed to - /// be exposed to raw result codes. - init(resultCode: Int32, message: String? = nil, sql: String? = nil, arguments: StatementArguments? = nil) { - self.init(resultCode: ResultCode(rawValue: resultCode), message: message, sql: sql, arguments: arguments) - } - - // MARK: Not public - - /// The query arguments that yielded the error (if relevant). - /// Not public because the StatementArguments class has no public method. - let arguments: StatementArguments? -} - -// CustomStringConvertible -extension DatabaseError { - /// :nodoc: - public var description: String { - var description = "SQLite error \(resultCode.rawValue)" - if let sql = sql { - description += " with statement `\(sql)`" - } - if let arguments = arguments, !arguments.isEmpty { - description += " arguments \(arguments)" - } - if let message = message { - description += ": \(message)" - } - return description - } -} - -// CustomNSError -extension DatabaseError { - - /// NSError bridging: the domain of the error. - /// :nodoc: - public static var errorDomain: String { - return "GRDB.DatabaseError" - } - - /// NSError bridging: the error code within the given domain. - /// :nodoc: - public var errorCode: Int { - return Int(extendedResultCode.rawValue) - } - - /// NSError bridging: the user-info dictionary. - /// :nodoc: - public var errorUserInfo: [String : Any] { - return [NSLocalizedDescriptionKey: description] - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseFunction.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseFunction.swift deleted file mode 100755 index 0a9f4e0..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseFunction.swift +++ /dev/null @@ -1,383 +0,0 @@ -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// An SQL function or aggregate. -public final class DatabaseFunction: Hashable { - // SQLite identifies functions by (name + argument count) - private struct Identity: Hashable { - let name: String - let nArg: Int32 // -1 for variadic functions - } - - public var name: String { return identity.name } - private let identity: Identity - let pure: Bool - private let kind: Kind - private var eTextRep: Int32 { return (SQLITE_UTF8 | (pure ? SQLITE_DETERMINISTIC : 0)) } - - /// Returns an SQL function. - /// - /// let fn = DatabaseFunction("succ", argumentCount: 1) { dbValues in - /// guard let int = Int.fromDatabaseValue(dbValues[0]) else { - /// return nil - /// } - /// return int + 1 - /// } - /// db.add(function: fn) - /// try Int.fetchOne(db, sql: "SELECT succ(1)")! // 2 - /// - /// - parameters: - /// - name: The function name. - /// - argumentCount: The number of arguments of the function. If - /// omitted, or nil, the function accepts any number of arguments. - /// - pure: Whether the function is "pure", which means that its results - /// only depends on its inputs. When a function is pure, SQLite has - /// the opportunity to perform additional optimizations. Default value - /// is false. - /// - function: A function that takes an array of DatabaseValue - /// arguments, and returns an optional DatabaseValueConvertible such - /// as Int, String, NSDate, etc. The array is guaranteed to have - /// exactly *argumentCount* elements, provided *argumentCount* is - /// not nil. - public init(_ name: String, argumentCount: Int32? = nil, pure: Bool = false, function: @escaping ([DatabaseValue]) throws -> DatabaseValueConvertible?) { - self.identity = Identity(name: name, nArg: argumentCount ?? -1) - self.pure = pure - self.kind = .function{ (argc, argv) in - let arguments = (0.. DatabaseValueConvertible? { - /// return sum - /// } - /// } - /// - /// let dbQueue = DatabaseQueue() - /// let fn = DatabaseFunction("mysum", argumentCount: 1, aggregate: MySum.self) - /// dbQueue.add(function: fn) - /// try dbQueue.write { db in - /// try db.execute(sql: "CREATE TABLE test(i)") - /// try db.execute(sql: "INSERT INTO test(i) VALUES (1)") - /// try db.execute(sql: "INSERT INTO test(i) VALUES (2)") - /// try Int.fetchOne(db, sql: "SELECT mysum(i) FROM test")! // 3 - /// } - /// - /// - parameters: - /// - name: The function name. - /// - argumentCount: The number of arguments of the aggregate. If - /// omitted, or nil, the aggregate accepts any number of arguments. - /// - pure: Whether the aggregate is "pure", which means that its - /// results only depends on its inputs. When an aggregate is pure, - /// SQLite has the opportunity to perform additional optimizations. - /// Default value is false. - /// - aggregate: A type that implements the DatabaseAggregate protocol. - /// For each step of the aggregation, its `step` method is called with - /// an array of DatabaseValue arguments. The array is guaranteed to - /// have exactly *argumentCount* elements, provided *argumentCount* is - /// not nil. - public init(_ name: String, argumentCount: Int32? = nil, pure: Bool = false, aggregate: Aggregate.Type) { - self.identity = Identity(name: name, nArg: argumentCount ?? -1) - self.pure = pure - self.kind = .aggregate { return Aggregate() } - } - - /// Calls sqlite3_create_function_v2 - /// See https://sqlite.org/c3ref/create_function.html - func install(in db: Database) { - // Retain the function definition - let definition = kind.definition - let definitionP = Unmanaged.passRetained(definition).toOpaque() - - let code = sqlite3_create_function_v2( - db.sqliteConnection, - identity.name, - identity.nArg, - eTextRep, - definitionP, - kind.xFunc, - kind.xStep, - kind.xFinal, - { definitionP in - // Release the function definition - Unmanaged.fromOpaque(definitionP!).release() - }) - - guard code == SQLITE_OK else { - // Assume a GRDB bug: there is no point throwing any error. - fatalError(DatabaseError(resultCode: code, message: db.lastErrorMessage).description) - } - } - - /// Calls sqlite3_create_function_v2 - /// See https://sqlite.org/c3ref/create_function.html - func uninstall(in db: Database) { - let code = sqlite3_create_function_v2( - db.sqliteConnection, - identity.name, - identity.nArg, - eTextRep, - nil, nil, nil, nil, nil) - - guard code == SQLITE_OK else { - // Assume a GRDB bug: there is no point throwing any error. - fatalError(DatabaseError(resultCode: code, message: db.lastErrorMessage).description) - } - } - - /// The way to compute the result of a function. - /// Feeds the `pApp` parameter of sqlite3_create_function_v2 - /// http://sqlite.org/capi3ref.html#sqlite3_create_function - private class FunctionDefinition { - let compute: (Int32, UnsafeMutablePointer?) throws -> DatabaseValueConvertible? - init(compute: @escaping (Int32, UnsafeMutablePointer?) throws -> DatabaseValueConvertible?) { - self.compute = compute - } - } - - /// The way to start an aggregate. - /// Feeds the `pApp` parameter of sqlite3_create_function_v2 - /// http://sqlite.org/capi3ref.html#sqlite3_create_function - private class AggregateDefinition { - let makeAggregate: () -> DatabaseAggregate - init(makeAggregate: @escaping () -> DatabaseAggregate) { - self.makeAggregate = makeAggregate - } - } - - /// The current state of an aggregate, storable in SQLite - private class AggregateContext { - var aggregate: DatabaseAggregate - var hasErrored = false - init(aggregate: DatabaseAggregate) { - self.aggregate = aggregate - } - } - - /// A function kind: an "SQL function" or an "aggregate". - /// See http://sqlite.org/capi3ref.html#sqlite3_create_function - private enum Kind { - /// A regular function: SELECT f(1) - case function((Int32, UnsafeMutablePointer?) throws -> DatabaseValueConvertible?) - - /// An aggregate: SELECT f(foo) FROM bar GROUP BY baz - case aggregate(() -> DatabaseAggregate) - - /// Feeds the `pApp` parameter of sqlite3_create_function_v2 - /// http://sqlite.org/capi3ref.html#sqlite3_create_function - var definition: AnyObject { - switch self { - case .function(let compute): - return FunctionDefinition(compute: compute) - case .aggregate(let makeAggregate): - return AggregateDefinition(makeAggregate: makeAggregate) - } - } - - /// Feeds the `xFunc` parameter of sqlite3_create_function_v2 - /// http://sqlite.org/capi3ref.html#sqlite3_create_function - var xFunc: (@convention(c) (OpaquePointer?, Int32, UnsafeMutablePointer?) -> Void)? { - guard case .function = self else { return nil } - return { (sqliteContext, argc, argv) in - let definition = Unmanaged.fromOpaque(sqlite3_user_data(sqliteContext)).takeUnretainedValue() - do { - try DatabaseFunction.report( - result: definition.compute(argc, argv), - in: sqliteContext) - } catch { - DatabaseFunction.report(error: error, in: sqliteContext) - } - } - } - - /// Feeds the `xStep` parameter of sqlite3_create_function_v2 - /// http://sqlite.org/capi3ref.html#sqlite3_create_function - var xStep: (@convention(c) (OpaquePointer?, Int32, UnsafeMutablePointer?) -> Void)? { - guard case .aggregate = self else { return nil } - return { (sqliteContext, argc, argv) in - let aggregateContextU = DatabaseFunction.unmanagedAggregateContext(sqliteContext) - let aggregateContext = aggregateContextU.takeUnretainedValue() - assert(!aggregateContext.hasErrored) - do { - let arguments = (0.. Void)? { - guard case .aggregate = self else { return nil } - return { (sqliteContext) in - let aggregateContextU = DatabaseFunction.unmanagedAggregateContext(sqliteContext) - let aggregateContext = aggregateContextU.takeUnretainedValue() - aggregateContextU.release() - - guard !aggregateContext.hasErrored else { - return - } - - do { - try DatabaseFunction.report( - result: aggregateContext.aggregate.finalize(), - in: sqliteContext) - } catch { - DatabaseFunction.report(error: error, in: sqliteContext) - } - } - } - } - - /// Helper function that extracts the current state of an aggregate from an - /// sqlite function execution context. - /// - /// The result must be released when the aggregate concludes. - /// - /// See https://sqlite.org/c3ref/context.html - /// See https://sqlite.org/c3ref/aggregate_context.html - private static func unmanagedAggregateContext(_ sqliteContext: OpaquePointer?) -> Unmanaged { - // The current aggregate buffer - let stride = MemoryLayout>.stride - let aggregateContextBufferP = UnsafeMutableRawBufferPointer(start: sqlite3_aggregate_context(sqliteContext, Int32(stride))!, count: stride) - - if aggregateContextBufferP.contains(where: { $0 != 0 }) { // TODO: This testt looks weird. Review. - // Buffer contains non-null pointer: load aggregate context - let aggregateContextP = aggregateContextBufferP.baseAddress!.assumingMemoryBound(to: Unmanaged.self) - return aggregateContextP.pointee - } else { - // Buffer contains null pointer: create aggregate context... - let aggregate = Unmanaged.fromOpaque(sqlite3_user_data(sqliteContext)) - .takeUnretainedValue() - .makeAggregate() - let aggregateContext = AggregateContext(aggregate: aggregate) - - // retain and store in SQLite's buffer - let aggregateContextU = Unmanaged.passRetained(aggregateContext) - let aggregateContextP = aggregateContextU.toOpaque() - withUnsafeBytes(of: aggregateContextP) { - aggregateContextBufferP.copyMemory(from: $0) - } - return aggregateContextU - } - } - - private static func report(result: DatabaseValueConvertible?, in sqliteContext: OpaquePointer?) { - switch result?.databaseValue.storage ?? .null { - case .null: - sqlite3_result_null(sqliteContext) - case .int64(let int64): - sqlite3_result_int64(sqliteContext, int64) - case .double(let double): - sqlite3_result_double(sqliteContext, double) - case .string(let string): - sqlite3_result_text(sqliteContext, string, -1, SQLITE_TRANSIENT) - case .blob(let data): - #if swift(>=5.0) - data.withUnsafeBytes { - sqlite3_result_blob(sqliteContext, $0.baseAddress, Int32($0.count), SQLITE_TRANSIENT) - } - #else - data.withUnsafeBytes { - sqlite3_result_blob(sqliteContext, $0, Int32(data.count), SQLITE_TRANSIENT) - } - #endif - } - } - - private static func report(error: Error, in sqliteContext: OpaquePointer?) { - if let error = error as? DatabaseError { - if let message = error.message { - sqlite3_result_error(sqliteContext, message, -1) - } - sqlite3_result_error_code(sqliteContext, error.extendedResultCode.rawValue) - } else { - sqlite3_result_error(sqliteContext, "\(error)", -1) - } - } -} - -extension DatabaseFunction { - /// :nodoc: - public func hash(into hasher: inout Hasher) { - hasher.combine(identity) - } - - /// Two functions are equal if they share the same name and arity. - /// :nodoc: - public static func == (lhs: DatabaseFunction, rhs: DatabaseFunction) -> Bool { - return lhs.identity == rhs.identity - } -} - -/// The protocol for custom SQLite aggregates. -/// -/// For example: -/// -/// struct MySum : DatabaseAggregate { -/// var sum: Int = 0 -/// -/// mutating func step(_ dbValues: [DatabaseValue]) { -/// if let int = Int.fromDatabaseValue(dbValues[0]) { -/// sum += int -/// } -/// } -/// -/// func finalize() -> DatabaseValueConvertible? { -/// return sum -/// } -/// } -/// -/// let dbQueue = DatabaseQueue() -/// let fn = DatabaseFunction("mysum", argumentCount: 1, aggregate: MySum.self) -/// dbQueue.add(function: fn) -/// try dbQueue.write { db in -/// try db.execute(sql: "CREATE TABLE test(i)") -/// try db.execute(sql: "INSERT INTO test(i) VALUES (1)") -/// try db.execute(sql: "INSERT INTO test(i) VALUES (2)") -/// try Int.fetchOne(db, sql: "SELECT mysum(i) FROM test")! // 3 -/// } -public protocol DatabaseAggregate { - /// Creates an aggregate. - init() - - /// This method is called at each step of the aggregation. - /// - /// The dbValues argument contains as many values as given to the SQL - /// aggregate function. - /// - /// -- One value - /// SELECT maxLength(name) FROM player - /// - /// -- Two values - /// SELECT maxFullNameLength(firstName, lastName) FROM player - /// - /// This method is never called after the finalize() method has been called. - mutating func step(_ dbValues: [DatabaseValue]) throws - - /// Returns the final result - func finalize() throws -> DatabaseValueConvertible? -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabasePool.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabasePool.swift deleted file mode 100755 index 7a8bc43..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabasePool.swift +++ /dev/null @@ -1,692 +0,0 @@ -import Foundation -import Dispatch -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif -#if os(iOS) - import UIKit -#endif - -/// A DatabasePool grants concurrent accesses to an SQLite database. -public final class DatabasePool: DatabaseWriter { - private let writer: SerializedDatabase - private var readerConfig: Configuration - private var readerPool: Pool! - - private var functions = Set() - private var collations = Set() - private var tokenizerRegistrations: [(Database) -> Void] = [] - - var snapshotCount = ReadWriteBox(0) - - #if os(iOS) - private weak var application: UIApplication? - #endif - - // MARK: - Database Information - - /// The path to the database. - public var path: String { - return writer.path - } - - // MARK: - Initializer - - /// Opens the SQLite database at path *path*. - /// - /// let dbPool = try DatabasePool(path: "/path/to/database.sqlite") - /// - /// Database connections get closed when the database pool gets deallocated. - /// - /// - parameters: - /// - path: The path to the database file. - /// - configuration: A configuration. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public init(path: String, configuration: Configuration = Configuration()) throws { - GRDBPrecondition(configuration.maximumReaderCount > 0, "configuration.maximumReaderCount must be at least 1") - - // Writer - writer = try SerializedDatabase( - path: path, - configuration: configuration, - schemaCache: SimpleDatabaseSchemaCache(), - defaultLabel: "GRDB.DatabasePool", - purpose: "writer") - - // Activate WAL Mode unless readonly - if !configuration.readonly { - try writer.sync { db in - let journalMode = try String.fetchOne(db, sql: "PRAGMA journal_mode = WAL") - guard journalMode == "wal" else { - throw DatabaseError(message: "could not activate WAL Mode at path: \(path)") - } - - // https://www.sqlite.org/pragma.html#pragma_synchronous - // > Many applications choose NORMAL when in WAL mode - try db.execute(sql: "PRAGMA synchronous = NORMAL") - - if !FileManager.default.fileExists(atPath: path + "-wal") { - // Create the -wal file if it does not exist yet. This - // avoids an SQLITE_CANTOPEN (14) error whenever a user - // opens a pool to an existing non-WAL database, and - // attempts to read from it. - // See https://github.com/groue/GRDB.swift/issues/102 - try db.execute(sql: "CREATE TABLE grdb_issue_102 (id INTEGER PRIMARY KEY); DROP TABLE grdb_issue_102;") - } - } - } - - // Readers - readerConfig = configuration - readerConfig.readonly = true - readerConfig.defaultTransactionKind = .deferred // Make it the default for readers. Other transaction kinds are forbidden by SQLite in read-only connections. - readerConfig.allowsUnsafeTransactions = false // Because there's no guarantee that one can get the same reader in order to close its opened transaction. - var readerCount = 0 - readerPool = Pool(maximumCount: configuration.maximumReaderCount, makeElement: { [unowned self] in - readerCount += 1 // protected by pool's ReadWriteBox (undocumented behavior and protection) - let reader = try SerializedDatabase( - path: path, - configuration: self.readerConfig, - schemaCache: SimpleDatabaseSchemaCache(), - defaultLabel: "GRDB.DatabasePool", - purpose: "reader.\(readerCount)") - reader.sync { self.setupDatabase($0) } - return reader - }) - } - - #if os(iOS) - deinit { - // Undo job done in setupMemoryManagement() - // - // https://developer.apple.com/library/mac/releasenotes/Foundation/RN-Foundation/index.html#10_11Error - // Explicit unregistration is required before iOS 9 and OS X 10.11. - NotificationCenter.default.removeObserver(self) - } - #endif - - private func setupDatabase(_ db: Database) { - for function in functions { - db.add(function: function) - } - for collation in collations { - db.add(collation: collation) - } - for registration in tokenizerRegistrations { - registration(db) - } - } - - /// Blocks the current thread until all database connections have - /// executed the *body* block. - fileprivate func forEachConnection(_ body: (Database) -> Void) { - writer.sync(body) - readerPool.forEach { $0.sync(body) } - } -} - -extension DatabasePool { - - // MARK: - WAL Checkpoints - - /// Runs a WAL checkpoint - /// - /// See https://www.sqlite.org/wal.html and - /// https://www.sqlite.org/c3ref/wal_checkpoint_v2.html) for - /// more information. - /// - /// - parameter kind: The checkpoint mode (default passive) - public func checkpoint(_ kind: Database.CheckpointMode = .passive) throws { - try writer.sync { db in - // TODO: read https://www.sqlite.org/c3ref/wal_checkpoint_v2.html and - // check whether we need a busy handler on writer and/or readers - // when kind is not .Passive. - let code = sqlite3_wal_checkpoint_v2(db.sqliteConnection, nil, kind.rawValue, nil, nil) - guard code == SQLITE_OK else { - throw DatabaseError(resultCode: code, message: db.lastErrorMessage, sql: nil) - } - } - } -} - -extension DatabasePool { - - // MARK: - Memory management - - /// Free as much memory as possible. - /// - /// This method blocks the current thread until all database accesses are completed. - /// - /// See also setupMemoryManagement(application:) - public func releaseMemory() { - forEachConnection { $0.releaseMemory() } - readerPool.clear() - } - - - #if os(iOS) - /// Listens to UIApplicationDidEnterBackgroundNotification and - /// UIApplicationDidReceiveMemoryWarningNotification in order to release - /// as much memory as possible. - /// - /// - param application: The UIApplication that will start a background - /// task to let the database pool release its memory when the application - /// enters background. - public func setupMemoryManagement(in application: UIApplication) { - self.application = application - let center = NotificationCenter.default - center.addObserver( - self, - selector: #selector(DatabasePool.applicationDidReceiveMemoryWarning(_:)), - name: UIApplication.didReceiveMemoryWarningNotification, - object: nil) - center.addObserver( - self, - selector: #selector(DatabasePool.applicationDidEnterBackground(_:)), - name: UIApplication.didEnterBackgroundNotification, - object: nil) - } - - @objc private func applicationDidEnterBackground(_ notification: NSNotification) { - guard let application = application else { - return - } - - let task: UIBackgroundTaskIdentifier = application.beginBackgroundTask(expirationHandler: nil) - if task == .invalid { - // Perform releaseMemory() synchronously. - releaseMemory() - } else { - // Perform releaseMemory() asynchronously. - DispatchQueue.global().async { - self.releaseMemory() - application.endBackgroundTask(task) - } - } - } - - @objc private func applicationDidReceiveMemoryWarning(_ notification: NSNotification) { - DispatchQueue.global().async { - self.releaseMemory() - } - } - #endif -} - -#if SQLITE_HAS_CODEC - extension DatabasePool { - - // MARK: - Encryption - - /// Changes the passphrase of an encrypted database - public func change(passphrase: String) throws { - try readerPool.clear(andThen: { - try writer.sync { try $0.change(passphrase: passphrase) } - readerConfig.passphrase = passphrase - }) - } - } -#endif - -extension DatabasePool : DatabaseReader { - - // MARK: - Reading from Database - - /// Synchronously executes a read-only block in a protected dispatch queue, - /// and returns its result. The block is wrapped in a deferred transaction. - /// - /// let players = try dbPool.read { db in - /// try Player.fetchAll(...) - /// } - /// - /// The block is completely isolated. Eventual concurrent database updates - /// are *not visible* inside the block: - /// - /// try dbPool.read { db in - /// // Those two values are guaranteed to be equal, even if the - /// // `wine` table is modified between the two requests: - /// let count1 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// let count2 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// } - /// - /// try dbPool.read { db in - /// // Now this value may be different: - /// let count = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// } - /// - /// This method is *not* reentrant. - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block, or any DatabaseError that would - /// happen while establishing the read access to the database. - public func read(_ block: (Database) throws -> T) throws -> T { - GRDBPrecondition(currentReader == nil, "Database methods are not reentrant.") - return try readerPool.get { reader in - try reader.sync { db in - var result: T? = nil - // The block isolation comes from the DEFERRED transaction. - // See DatabasePoolTests.testReadMethodIsolationOfBlock(). - try db.inTransaction(.deferred) { - // Reset the schema cache before running user code in snapshot isolation - db.schemaCache = SimpleDatabaseSchemaCache() - result = try block(db) - return .commit - } - return result! - } - } - } - - /// Synchronously executes a read-only block in a protected dispatch queue, - /// and returns its result. - /// - /// The block argument is not isolated: eventual concurrent database updates - /// are visible inside the block: - /// - /// try dbPool.unsafeRead { db in - /// // Those two values may be different because some other thread - /// // may have inserted or deleted a wine between the two requests: - /// let count1 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// let count2 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// } - /// - /// Cursor iteration is safe, though: - /// - /// try dbPool.unsafeRead { db in - /// // No concurrent update can mess with this iteration: - /// let rows = try Row.fetchCursor(db, sql: "SELECT ...") - /// while let row = try rows.next() { ... } - /// } - /// - /// This method is *not* reentrant. - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block, or any DatabaseError that would - /// happen while establishing the read access to the database. - public func unsafeRead(_ block: (Database) throws -> T) throws -> T { - GRDBPrecondition(currentReader == nil, "Database methods are not reentrant.") - return try readerPool.get { reader in - try reader.sync { db in - // No schema cache when snapshot isolation is not established - db.schemaCache = EmptyDatabaseSchemaCache() - return try block(db) - } - } - } - - /// Synchronously executes a read-only block in a protected dispatch queue, - /// and returns its result. - /// - /// The block argument is not isolated: eventual concurrent database updates - /// are visible inside the block: - /// - /// try dbPool.unsafeReentrantRead { db in - /// // Those two values may be different because some other thread - /// // may have inserted or deleted a wine between the two requests: - /// let count1 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// let count2 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// } - /// - /// Cursor iteration is safe, though: - /// - /// try dbPool.unsafeReentrantRead { db in - /// // No concurrent update can mess with this iteration: - /// let rows = try Row.fetchCursor(db, sql: "SELECT ...") - /// while let row = try rows.next() { ... } - /// } - /// - /// This method is reentrant. It is unsafe because it fosters dangerous - /// concurrency practices. - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block, or any DatabaseError that would - /// happen while establishing the read access to the database. - public func unsafeReentrantRead(_ block: (Database) throws -> T) throws -> T { - if let reader = currentReader { - return try reader.reentrantSync(block) - } else { - return try readerPool.get { reader in - try reader.sync { db in - // No schema cache when snapshot isolation is not established - db.schemaCache = EmptyDatabaseSchemaCache() - return try block(db) - } - } - } - } - - public func concurrentRead(_ block: @escaping (Database) throws -> T) -> DatabaseFuture { - // Check that we're on the writer queue... - writer.execute { db in - // ... and that no transaction is opened. - GRDBPrecondition(!db.isInsideTransaction, """ - concurrentRead must not be called from inside a transaction. \ - If this error is raised from a DatabasePool.write block, use \ - DatabasePool.writeWithoutTransaction instead (and use \ - transactions when needed). - """) - } - - // The semaphore that blocks the writing dispatch queue until snapshot - // isolation has been established: - let isolationSemaphore = DispatchSemaphore(value: 0) - - // The semaphore that blocks until futureResult is defined: - let futureSemaphore = DispatchSemaphore(value: 0) - var futureResult: Result? = nil - - do { - let (reader, releaseReader) = try readerPool.get() - reader.async { db in - defer { - try? db.commit() // Ignore commit error - releaseReader() - } - do { - try db.beginSnapshotIsolation() - } catch { - futureResult = .failure(error) - isolationSemaphore.signal() - futureSemaphore.signal() - return - } - - // Release the writer queue - isolationSemaphore.signal() - - // Reset the schema cache before running user code in snapshot isolation - db.schemaCache = SimpleDatabaseSchemaCache() - - // Fetch and release the future - futureResult = Result { try block(db) } - futureSemaphore.signal() - } - } catch { - return DatabaseFuture { throw error } - } - - // Block the writer queue until snapshot isolation success or error - _ = isolationSemaphore.wait(timeout: .distantFuture) - - return DatabaseFuture { - // Block the future until results are fetched - _ = futureSemaphore.wait(timeout: .distantFuture) - return try futureResult!.get() - } - } - - /// Returns a reader that can be used from the current dispatch queue, - /// if any. - private var currentReader: SerializedDatabase? { - var readers: [SerializedDatabase] = [] - readerPool.forEach { reader in - // We can't check for reader.onValidQueue here because - // Pool.forEach() runs its closure argument in some arbitrary - // dispatch queue. We thus extract the reader so that we can query - // it below. - readers.append(reader) - } - - // Now the readers array contains some readers. The pool readers may - // already be different, because some other thread may have started - // a new read, for example. - // - // This doesn't matter: the reader we are looking for is already on - // its own dispatch queue. If it exists, is still in use, thus still - // in the pool, and thus still relevant for our check: - return readers.first { $0.onValidQueue } - } - - // MARK: - Writing in Database - - /// Synchronously executes an update block in a protected dispatch queue, - /// wrapped inside a transaction, and returns the result of the block. - /// - /// Eventual concurrent database updates are postponed until the block - /// has executed. - /// - /// try dbPool.write { db in - /// try db.execute(...) - /// } - /// - /// Eventual concurrent reads are guaranteed not to see any changes - /// performed in the block until they are all saved in the database. - /// - /// This method is *not* reentrant. - /// - /// - parameters block: A block that executes SQL statements. - /// - throws: The error thrown by the block, or by the wrapping transaction. - public func write(_ block: (Database) throws -> T) throws -> T { - return try writer.sync { db in - var result: T? = nil - try db.inTransaction { - result = try block(db) - return .commit - } - return result! - } - } - - /// Synchronously executes a block that takes a database connection, and - /// returns its result. - /// - /// Eventual concurrent database updates are postponed until the block - /// has executed. - /// - /// Eventual concurrent reads may see changes performed in the block before - /// the block completes. - /// - /// The block is guaranteed to be executed outside of a transaction. - /// - /// This method is *not* reentrant. - /// - /// - parameters block: A block that executes SQL statements and return - /// either .commit or .rollback. - /// - throws: The error thrown by the block. - public func writeWithoutTransaction(_ block: (Database) throws -> T) rethrows -> T { - return try writer.sync(block) - } - - /// Synchronously executes a block in a protected dispatch queue, wrapped - /// inside a transaction. - /// - /// Eventual concurrent database updates are postponed until the block - /// has executed. - /// - /// If the block throws an error, the transaction is rollbacked and the - /// error is rethrown. If the block returns .rollback, the transaction is - /// also rollbacked, but no error is thrown. - /// - /// try dbPool.writeInTransaction { db in - /// db.execute(...) - /// return .commit - /// } - /// - /// Eventual concurrent reads are guaranteed not to see any changes - /// performed in the block until they are all saved in the database. - /// - /// This method is *not* reentrant. - /// - /// - parameters: - /// - kind: The transaction type (default nil). If nil, the transaction - /// type is configuration.defaultTransactionKind, which itself - /// defaults to .deferred. See https://www.sqlite.org/lang_transaction.html - /// for more information. - /// - block: A block that executes SQL statements and return either - /// .commit or .rollback. - /// - throws: The error thrown by the block, or any error establishing the - /// transaction. - public func writeInTransaction(_ kind: Database.TransactionKind? = nil, _ block: (Database) throws -> Database.TransactionCompletion) throws { - try writer.sync { db in - try db.inTransaction(kind) { - try block(db) - } - } - } - - /// Synchronously executes an update block in a protected dispatch queue, - /// and returns its result. - /// - /// Eventual concurrent database updates are postponed until the block - /// has executed. - /// - /// try dbPool.unsafeReentrantWrite { db in - /// try db.execute(...) - /// } - /// - /// Eventual concurrent reads may see changes performed in the block before - /// the block completes. - /// - /// This method is reentrant. It is unsafe because it fosters dangerous - /// concurrency practices. - public func unsafeReentrantWrite(_ block: (Database) throws -> T) rethrows -> T { - return try writer.reentrantSync(block) - } - - // MARK: - Functions - - /// Add or redefine an SQL function. - /// - /// let fn = DatabaseFunction("succ", argumentCount: 1) { dbValues in - /// guard let int = Int.fromDatabaseValue(dbValues[0]) else { - /// return nil - /// } - /// return int + 1 - /// } - /// dbPool.add(function: fn) - /// try dbPool.read { db in - /// try Int.fetchOne(db, sql: "SELECT succ(1)") // 2 - /// } - public func add(function: DatabaseFunction) { - functions.update(with: function) - forEachConnection { $0.add(function: function) } - } - - /// Remove an SQL function. - public func remove(function: DatabaseFunction) { - functions.remove(function) - forEachConnection { $0.remove(function: function) } - } - - // MARK: - Collations - - /// Add or redefine a collation. - /// - /// let collation = DatabaseCollation("localized_standard") { (string1, string2) in - /// return (string1 as NSString).localizedStandardCompare(string2) - /// } - /// dbPool.add(collation: collation) - /// try dbPool.write { db in - /// try db.execute(sql: "CREATE TABLE file (name TEXT COLLATE LOCALIZED_STANDARD") - /// } - public func add(collation: DatabaseCollation) { - collations.update(with: collation) - forEachConnection { $0.add(collation: collation) } - } - - /// Remove a collation. - public func remove(collation: DatabaseCollation) { - collations.remove(collation) - forEachConnection { $0.remove(collation: collation) } - } - - // MARK: - Custom FTS5 Tokenizers - - #if SQLITE_ENABLE_FTS5 - /// Add a custom FTS5 tokenizer. - /// - /// class MyTokenizer : FTS5CustomTokenizer { ... } - /// dbPool.add(tokenizer: MyTokenizer.self) - public func add(tokenizer: Tokenizer.Type) { - func registerTokenizer(db: Database) { - db.add(tokenizer: Tokenizer.self) - } - tokenizerRegistrations.append(registerTokenizer) - forEachConnection(registerTokenizer) - } - #endif -} - -extension DatabasePool { - - // MARK: - Snapshots - - /// Creates a database snapshot. - /// - /// The snapshot sees an unchanging database content, as it existed at the - /// moment it was created. - /// - /// When you want to control the latest committed changes seen by a - /// snapshot, create it from the pool's writer protected dispatch queue: - /// - /// let snapshot1 = try dbPool.write { db -> DatabaseSnapshot in - /// try Player.deleteAll() - /// return try dbPool.makeSnapshot() - /// } - /// // <- Other threads may modify the database here - /// let snapshot2 = try dbPool.makeSnapshot() - /// - /// try snapshot1.read { db in - /// // Guaranteed to be zero - /// try Player.fetchCount(db) - /// } - /// - /// try snapshot2.read { db in - /// // Could be anything - /// try Player.fetchCount(db) - /// } - /// - /// It is forbidden to create a snapshot from the writer protected dispatch - /// queue when a transaction is opened, though, because it is likely a - /// programmer error: - /// - /// try dbPool.write { db in - /// try db.inTransaction { - /// try Player.deleteAll() - /// // fatal error: makeSnapshot() must not be called from inside a transaction - /// let snapshot = try dbPool.makeSnapshot() - /// return .commit - /// } - /// } - /// - /// To avoid this fatal error, create the snapshot *before* or *after* the - /// transaction: - /// - /// try dbPool.writeWithoutTransaction { db in - /// // OK - /// let snapshot = try dbPool.makeSnapshot() - /// - /// try db.inTransaction { - /// try Player.deleteAll() - /// return .commit - /// } - /// - /// // OK - /// let snapshot = try dbPool.makeSnapshot() - /// } - /// - /// You can create as many snapshots as you need, regardless of the maximum - /// number of reader connections in the pool. - /// - /// For more information, read about "snapshot isolation" at https://sqlite.org/isolation.html - public func makeSnapshot() throws -> DatabaseSnapshot { - // Sanity check - if writer.onValidQueue { - writer.execute { db in - GRDBPrecondition(!db.isInsideTransaction, "makeSnapshot() must not be called from inside a transaction.") - } - } - - let snapshot = try DatabaseSnapshot( - path: path, - configuration: writer.configuration, - defaultLabel: "GRDB.DatabasePool", - purpose: "snapshot.\(snapshotCount.increment())") - snapshot.read { setupDatabase($0) } - return snapshot - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseQueue.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseQueue.swift deleted file mode 100755 index 7d87f69..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseQueue.swift +++ /dev/null @@ -1,365 +0,0 @@ -import Foundation - -#if os(iOS) -import UIKit -#endif - -/// A DatabaseQueue serializes access to an SQLite database. -public final class DatabaseQueue: DatabaseWriter { - private var writer: SerializedDatabase - #if os(iOS) - private weak var application: UIApplication? - #endif - - // MARK: - Configuration - - /// The database configuration - public var configuration: Configuration { - return writer.configuration - } - - /// The path to the database file; it is ":memory:" for in-memory databases. - public var path: String { - return writer.path - } - - // MARK: - Initializers - - /// Opens the SQLite database at path *path*. - /// - /// let dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite") - /// - /// Database connections get closed when the database queue gets deallocated. - /// - /// - parameters: - /// - path: The path to the database file. - /// - configuration: A configuration. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public init(path: String, configuration: Configuration = Configuration()) throws { - writer = try SerializedDatabase( - path: path, - configuration: configuration, - schemaCache: SimpleDatabaseSchemaCache(), - defaultLabel: "GRDB.DatabaseQueue") - } - - /// Opens an in-memory SQLite database. - /// - /// let dbQueue = DatabaseQueue() - /// - /// Database memory is released when the database queue gets deallocated. - /// - /// - parameter configuration: A configuration. - public init(configuration: Configuration = Configuration()) { - // Assume SQLite always succeeds creating an in-memory database - writer = try! SerializedDatabase( - path: ":memory:", - configuration: configuration, - schemaCache: SimpleDatabaseSchemaCache(), - defaultLabel: "GRDB.DatabaseQueue") - } - - #if os(iOS) - deinit { - // Undo job done in setupMemoryManagement() - // - // https://developer.apple.com/library/mac/releasenotes/Foundation/RN-Foundation/index.html#10_11Error - // Explicit unregistration is required before iOS 9 and OS X 10.11. - NotificationCenter.default.removeObserver(self) - } - #endif -} - -extension DatabaseQueue { - - // MARK: - Memory management - - /// Free as much memory as possible. - /// - /// This method blocks the current thread until all database accesses are completed. - /// - /// See also setupMemoryManagement(application:) - public func releaseMemory() { - writer.sync { $0.releaseMemory() } - } - - #if os(iOS) - /// Listens to UIApplicationDidEnterBackgroundNotification and - /// UIApplicationDidReceiveMemoryWarningNotification in order to release - /// as much memory as possible. - /// - /// - param application: The UIApplication that will start a background - /// task to let the database queue release its memory when the application - /// enters background. - public func setupMemoryManagement(in application: UIApplication) { - self.application = application - let center = NotificationCenter.default - center.addObserver( - self, - selector: #selector(DatabaseQueue.applicationDidReceiveMemoryWarning(_:)), - name: UIApplication.didReceiveMemoryWarningNotification, - object: nil) - center.addObserver( - self, - selector: #selector(DatabaseQueue.applicationDidEnterBackground(_:)), - name: UIApplication.didEnterBackgroundNotification, - object: nil) - } - - @objc private func applicationDidEnterBackground(_ notification: NSNotification) { - guard let application = application else { - return - } - - let task: UIBackgroundTaskIdentifier = application.beginBackgroundTask(expirationHandler: nil) - if task == .invalid { - // Perform releaseMemory() synchronously. - releaseMemory() - } else { - // Perform releaseMemory() asynchronously. - DispatchQueue.global().async { - self.releaseMemory() - application.endBackgroundTask(task) - } - } - } - - @objc private func applicationDidReceiveMemoryWarning(_ notification: NSNotification) { - DispatchQueue.global().async { - self.releaseMemory() - } - } - #endif -} - -#if SQLITE_HAS_CODEC - extension DatabaseQueue { - - // MARK: - Encryption - - /// Changes the passphrase of an encrypted database - public func change(passphrase: String) throws { - try writer.sync { try $0.change(passphrase: passphrase) } - } - } -#endif - -extension DatabaseQueue { - - // MARK: - Reading from Database - - /// Synchronously executes a read-only block in a protected dispatch queue, - /// and returns its result. - /// - /// let players = try dbQueue.read { db in - /// try Player.fetchAll(db) - /// } - /// - /// This method is *not* reentrant. - /// - /// Starting SQLite 3.8.0 (iOS 8.2+, OSX 10.10+, custom SQLite builds and - /// SQLCipher), attempts to write in the database from this meethod throw a - /// DatabaseError of resultCode `SQLITE_READONLY`. - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block. - public func read(_ block: (Database) throws -> T) rethrows -> T { - return try writer.sync { db in - try db.readOnly { try block(db) } - } - } - - /// Synchronously executes a block in a protected dispatch queue, and - /// returns its result. - /// - /// let players = try dbQueue.unsafeRead { db in - /// try Player.fetchAll(db) - /// } - /// - /// This method is *not* reentrant. - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block. - /// - /// :nodoc: - public func unsafeRead(_ block: (Database) throws -> T) rethrows -> T { - return try writer.sync(block) - } - - /// Synchronously executes a block in a protected dispatch queue, and - /// returns its result. - /// - /// let players = try dbQueue.unsafeReentrantRead { db in - /// try Player.fetchAll(db) - /// } - /// - /// This method is reentrant. It is unsafe because it fosters dangerous - /// concurrency practices. - /// - /// :nodoc: - public func unsafeReentrantRead(_ block: (Database) throws -> T) rethrows -> T { - return try writer.reentrantSync(block) - } - - public func concurrentRead(_ block: @escaping (Database) throws -> T) -> DatabaseFuture { - // DatabaseQueue can't perform parallel reads. - // Perform a blocking read instead. - return DatabaseFuture(Result { - // Check that we're on the writer queue... - try writer.execute { db in - // ... and that no transaction is opened. - GRDBPrecondition(!db.isInsideTransaction, "concurrentRead must not be called from inside a transaction.") - return try db.readOnly { - try block(db) - } - } - }) - } - - // MARK: - Writing in Database - - /// Synchronously executes a block in a protected dispatch queue, wrapped - /// inside a transaction. - /// - /// If the block throws an error, the transaction is rollbacked and the - /// error is rethrown. - /// - /// try dbQueue.write { db in - /// try Player(...).insert(db) - /// } - /// - /// This method is *not* reentrant. - /// - /// - parameter block: A block that executes SQL statements. - /// - throws: An eventual database error, or the error thrown by the block. - public func write(_ block: (Database) throws -> T) throws -> T { - return try writer.sync { db in - var result: T? = nil - try db.inTransaction { - result = try block(db) - return .commit - } - return result! - } - } - - /// Synchronously executes a block in a protected dispatch queue, wrapped - /// inside a transaction. - /// - /// If the block throws an error, the transaction is rollbacked and the - /// error is rethrown. If the block returns .rollback, the transaction is - /// also rollbacked, but no error is thrown. - /// - /// try dbQueue.inTransaction { db in - /// try Player(...).insert(db) - /// return .commit - /// } - /// - /// This method is *not* reentrant. - /// - /// - parameters: - /// - kind: The transaction type (default nil). If nil, the transaction - /// type is configuration.defaultTransactionKind, which itself - /// defaults to .deferred. See https://www.sqlite.org/lang_transaction.html - /// for more information. - /// - block: A block that executes SQL statements and return either - /// .commit or .rollback. - /// - throws: The error thrown by the block. - public func inTransaction(_ kind: Database.TransactionKind? = nil, _ block: (Database) throws -> Database.TransactionCompletion) throws { - try writer.sync { db in - try db.inTransaction(kind) { - try block(db) - } - } - } - - /// Synchronously executes a block in a protected dispatch queue, and - /// returns its result. - /// - /// let players = try dbQueue.writeWithoutTransaction { db in - /// try Player(...).insert(db) - /// } - /// - /// This method is *not* reentrant. - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block. - /// - /// :nodoc: - public func writeWithoutTransaction(_ block: (Database) throws -> T) rethrows -> T { - return try writer.sync(block) - } - - /// Synchronously executes a block in a protected dispatch queue, and - /// returns its result. - /// - /// // INSERT INTO player ... - /// let players = try dbQueue.inDatabase { db in - /// try Player(...).insert(db) - /// } - /// - /// This method is *not* reentrant. - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block. - public func inDatabase(_ block: (Database) throws -> T) rethrows -> T { - return try writer.sync(block) - } - - /// Synchronously executes a block in a protected dispatch queue, and - /// returns its result. - /// - /// // INSERT INTO player ... - /// try dbQueue.unsafeReentrantWrite { db in - /// try Player(...).insert(db) - /// } - /// - /// This method is reentrant. It is unsafe because it fosters dangerous - /// concurrency practices. - public func unsafeReentrantWrite(_ block: (Database) throws -> T) rethrows -> T { - return try writer.reentrantSync(block) - } - - // MARK: - Functions - - /// Add or redefine an SQL function. - /// - /// let fn = DatabaseFunction("succ", argumentCount: 1) { dbValues in - /// guard let int = Int.fromDatabaseValue(dbValues[0]) else { - /// return nil - /// } - /// return int + 1 - /// } - /// dbQueue.add(function: fn) - /// try dbQueue.read { db in - /// try Int.fetchOne(db, sql: "SELECT succ(1)") // 2 - /// } - public func add(function: DatabaseFunction) { - writer.sync { $0.add(function: function) } - } - - /// Remove an SQL function. - public func remove(function: DatabaseFunction) { - writer.sync { $0.remove(function: function) } - } - - // MARK: - Collations - - /// Add or redefine a collation. - /// - /// let collation = DatabaseCollation("localized_standard") { (string1, string2) in - /// return (string1 as NSString).localizedStandardCompare(string2) - /// } - /// dbQueue.add(collation: collation) - /// try dbQueue.write { db in - /// try db.execute(sql: "CREATE TABLE file (name TEXT COLLATE LOCALIZED_STANDARD") - /// } - public func add(collation: DatabaseCollation) { - writer.sync { $0.add(collation: collation) } - } - - /// Remove a collation. - public func remove(collation: DatabaseCollation) { - writer.sync { $0.remove(collation: collation) } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseReader.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseReader.swift deleted file mode 100755 index 3f0a79b..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseReader.swift +++ /dev/null @@ -1,271 +0,0 @@ -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// The protocol for all types that can fetch values from a database. -/// -/// It is adopted by DatabaseQueue and DatabasePool. -/// -/// The protocol comes with isolation guarantees that describe the behavior of -/// adopting types in a multithreaded application. -/// -/// Types that adopt the protocol can provide in practice stronger guarantees. -/// For example, DatabaseQueue provides a stronger isolation level -/// than DatabasePool. -/// -/// **Warning**: Isolation guarantees stand as long as there is no external -/// connection to the database. Should you have to cope with external -/// connections, protect yourself with transactions, and be ready to setup a -/// [busy handler](https://www.sqlite.org/c3ref/busy_handler.html). -public protocol DatabaseReader : class { - - // MARK: - Read From Database - - /// Synchronously executes a read-only block that takes a database - /// connection, and returns its result. - /// - /// Guarantee 1: the block argument is isolated. Eventual concurrent - /// database updates are not visible inside the block: - /// - /// try reader.read { db in - /// // Those two values are guaranteed to be equal, even if the - /// // `wine` table is modified between the two requests: - /// let count1 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// let count2 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// } - /// - /// try reader.read { db in - /// // Now this value may be different: - /// let count = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// } - /// - /// Guarantee 2: Starting iOS 8.2, OSX 10.10, and with custom SQLite builds - /// and SQLCipher, attempts to write in the database throw a DatabaseError - /// whose resultCode is `SQLITE_READONLY`. - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block, or any DatabaseError that would - /// happen while establishing the read access to the database. - func read(_ block: (Database) throws -> T) throws -> T - - /// Synchronously executes a read-only block that takes a database - /// connection, and returns its result. - /// - /// The two guarantees of the safe `read` method are lifted: - /// - /// The block argument is not isolated: eventual concurrent database updates - /// are visible inside the block: - /// - /// try reader.unsafeRead { db in - /// // Those two values may be different because some other thread - /// // may have inserted or deleted a wine between the two requests: - /// let count1 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// let count2 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// } - /// - /// Cursor iterations are isolated, though: - /// - /// try reader.unsafeRead { db in - /// // No concurrent update can mess with this iteration: - /// let rows = try Row.fetchCursor(db, sql: "SELECT ...") - /// while let row = try rows.next() { ... } - /// } - /// - /// The block argument is not prevented from writing (DatabaseQueue, in - /// particular, will accept database modifications in `unsafeRead`). - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block, or any DatabaseError that would - /// happen while establishing the read access to the database. - func unsafeRead(_ block: (Database) throws -> T) throws -> T - - /// Synchronously executes a block that takes a database connection, and - /// returns its result. - /// - /// The two guarantees of the safe `read` method are lifted: - /// - /// The block argument is not isolated: eventual concurrent database updates - /// are visible inside the block: - /// - /// try reader.unsafeReentrantRead { db in - /// // Those two values may be different because some other thread - /// // may have inserted or deleted a wine between the two requests: - /// let count1 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// let count2 = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM wine")! - /// } - /// - /// Cursor iterations are isolated, though: - /// - /// try reader.unsafeReentrantRead { db in - /// // No concurrent update can mess with this iteration: - /// let rows = try Row.fetchCursor(db, sql: "SELECT ...") - /// while let row = try rows.next() { ... } - /// } - /// - /// The block argument is not prevented from writing (DatabaseQueue, in - /// particular, will accept database modifications in `unsafeReentrantRead`). - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block, or any DatabaseError that would - /// happen while establishing the read access to the database. - /// - /// This method is reentrant. It should be avoided because it fosters - /// dangerous concurrency practices. - func unsafeReentrantRead(_ block: (Database) throws -> T) throws -> T - - - // MARK: - Functions - - /// Add or redefine an SQL function. - /// - /// let fn = DatabaseFunction("succ", argumentCount: 1) { dbValues in - /// guard let int = Int.fromDatabaseValue(dbValues[0]) else { - /// return nil - /// } - /// return int + 1 - /// } - /// reader.add(function: fn) - /// try reader.read { db in - /// try Int.fetchOne(db, sql: "SELECT succ(1)")! // 2 - /// } - func add(function: DatabaseFunction) - - /// Remove an SQL function. - func remove(function: DatabaseFunction) - - - // MARK: - Collations - - /// Add or redefine a collation. - /// - /// let collation = DatabaseCollation("localized_standard") { (string1, string2) in - /// return (string1 as NSString).localizedStandardCompare(string2) - /// } - /// reader.add(collation: collation) - /// try reader.execute(sql: "SELECT * FROM file ORDER BY name COLLATE localized_standard") - func add(collation: DatabaseCollation) - - /// Remove a collation. - func remove(collation: DatabaseCollation) - - // MARK: - Value Observation - - /// Starts a value observation. - /// - /// You should use the `ValueObservation.start(in:onError:onChange:)` - /// method instead. - /// - /// - parameter observation: the stared observation - /// - parameter onError: a closure that is provided by eventual errors that happen - /// during observation - /// - parameter onChange: a closure that is provided fresh values - /// - returns: a TransactionObserver - func add( - observation: ValueObservation, - onError: ((Error) -> Void)?, - onChange: @escaping (Reducer.Value) -> Void) - throws -> TransactionObserver - - /// Remove a transaction observer. - func remove(transactionObserver: TransactionObserver) -} - -extension DatabaseReader { - - // MARK: - Backup - - /// Copies the database contents into another database. - /// - /// The `backup` method blocks the current thread until the destination - /// database contains the same contents as the source database. - /// - /// When the source is a DatabasePool, concurrent writes can happen during - /// the backup. Those writes may, or may not, be reflected in the backup, - /// but they won't trigger any error. - public func backup(to writer: DatabaseWriter) throws { - try backup(to: writer, afterBackupInit: nil, afterBackupStep: nil) - } - - func backup(to writer: DatabaseWriter, afterBackupInit: (() -> ())?, afterBackupStep: (() -> ())?) throws { - try read { dbFrom in - try writer.writeWithoutTransaction { dbDest in - try Database.backup(from: dbFrom, to: dbDest, afterBackupInit: afterBackupInit, afterBackupStep: afterBackupStep) - } - } - } -} - -/// A type-erased DatabaseReader -/// -/// Instances of AnyDatabaseReader forward their methods to an arbitrary -/// underlying database reader. -public final class AnyDatabaseReader : DatabaseReader { - private let base: DatabaseReader - - /// Creates a database reader that wraps a base database reader. - public init(_ base: DatabaseReader) { - self.base = base - } - - // MARK: - Reading from Database - - /// :nodoc: - public func read(_ block: (Database) throws -> T) throws -> T { - return try base.read(block) - } - - /// :nodoc: - public func unsafeRead(_ block: (Database) throws -> T) throws -> T { - return try base.unsafeRead(block) - } - - /// :nodoc: - public func unsafeReentrantRead(_ block: (Database) throws -> T) throws -> T { - return try base.unsafeReentrantRead(block) - } - - // MARK: - Functions - - /// :nodoc: - public func add(function: DatabaseFunction) { - base.add(function: function) - } - - /// :nodoc: - public func remove(function: DatabaseFunction) { - base.remove(function: function) - } - - // MARK: - Collations - - /// :nodoc: - public func add(collation: DatabaseCollation) { - base.add(collation: collation) - } - - /// :nodoc: - public func remove(collation: DatabaseCollation) { - base.remove(collation: collation) - } - - // MARK: - Value Observation - - /// :nodoc: - public func add( - observation: ValueObservation, - onError: ((Error) -> Void)?, - onChange: @escaping (Reducer.Value) -> Void) - throws -> TransactionObserver - { - return try base.add(observation: observation, onError: onError, onChange: onChange) - } - - /// :nodoc: - public func remove(transactionObserver: TransactionObserver) { - base.remove(transactionObserver: transactionObserver) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseRegion.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseRegion.swift deleted file mode 100755 index 7df10aa..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseRegion.swift +++ /dev/null @@ -1,355 +0,0 @@ -/// DatabaseRegion defines a region in the database. DatabaseRegion is dedicated -/// to help transaction observers recognize impactful database changes in their -/// `observes(eventsOfKind:)` and `databaseDidChange(with:)` methods. -/// -/// A database region is the union of any number of "table regions", which can -/// cover a full table, or the combination of columns and rows: -/// -/// |Table1 | |Table2 | |Table3 | |Table4 | |Table5 | -/// |-------| |-------| |-------| |-------| |-------| -/// |x|x|x|x| |x| | | | |x|x|x|x| |x|x| |x| | | | | | -/// |x|x|x|x| |x| | | | | | | | | | | | | | | |x| | | -/// |x|x|x|x| |x| | | | | | | | | |x|x| |x| | | | | | -/// |x|x|x|x| |x| | | | | | | | | | | | | | | | | | | -/// -/// To create a database region, you use one of those methods: -/// -/// - `DatabaseRegion.fullDatabase`: the region that covers all database tables. -/// -/// - `DatabaseRegion()`: the empty region. -/// -/// - `DatabaseRegion(table:)`: the region that covers one database table. -/// -/// - `SelectStatement.databaseRegion`: -/// -/// let statement = try db.makeSelectStatement(sql: "SELECT name, score FROM player") -/// let region = statement.databaseRegion -/// -/// - `FetchRequest.databaseRegion(_:)` -/// -/// let request = Player.filter(key: 1) -/// let region = try request.databaseRegion(db) -public struct DatabaseRegion: CustomStringConvertible, Equatable { - private let tableRegions: [String: TableRegion]? - private init(tableRegions: [String: TableRegion]?) { - self.tableRegions = tableRegions - } - - /// Returns whether the region is empty. - public var isEmpty: Bool { - guard let tableRegions = tableRegions else { - // full database - return false - } - return tableRegions.isEmpty - } - - /// The region that covers the full database: all columns and all rows - /// from all tables. - public static let fullDatabase = DatabaseRegion(tableRegions: nil) - - /// Creates an empty database region. - public init() { - self.init(tableRegions: [:]) - } - - /// Creates a region that spans all rows and columns of a database table. - /// - /// - parameter table: A table name. - public init(table: String) { - self.init(tableRegions: [table: TableRegion(columns: nil, rowIds: nil)]) - } - - /// Full columns in a table: (some columns in a table) × (all rows) - init(table: String, columns: Set) { - self.init(tableRegions: [table: TableRegion(columns: columns, rowIds: nil)]) - } - - /// Full rows in a table: (all columns in a table) × (some rows) - init(table: String, rowIds: Set) { - self.init(tableRegions: [table: TableRegion(columns: nil, rowIds: rowIds)]) - } - - /// Returns the intersection of this region and the given one. - /// - /// This method is not public because there is no known public use case for - /// this intersection. It is currently only used as support for - /// the isModified(byEventsOfKind:) method. - func intersection(_ other: DatabaseRegion) -> DatabaseRegion { - guard let tableRegions = tableRegions else { return other } - guard let otherTableRegions = other.tableRegions else { return self } - - var tableRegionsIntersection: [String: TableRegion] = [:] - for (table, tableRegion) in tableRegions { - guard let otherTableRegion = otherTableRegions - .first(where: { (otherTable, _) in otherTable == table })? - .value else { continue } - let tableRegionIntersection = tableRegion.intersection(otherTableRegion) - guard !tableRegionIntersection.isEmpty else { continue } - tableRegionsIntersection[table] = tableRegionIntersection - } - - return DatabaseRegion(tableRegions: tableRegionsIntersection) - } - - /// Only keeps those rowIds in the given table - func tableIntersection(_ table: String, rowIds: Set) -> DatabaseRegion { - guard var tableRegions = tableRegions else { - return DatabaseRegion(table: table, rowIds: rowIds) - } - - guard let tableRegion = tableRegions[table] else { - return self - } - - let intersection = tableRegion.intersection(TableRegion(columns: nil, rowIds: rowIds)) - if intersection.isEmpty { - tableRegions.removeValue(forKey: table) - } else { - tableRegions[table] = intersection - } - return DatabaseRegion(tableRegions: tableRegions) - } - - /// Returns the union of this region and the given one. - public func union(_ other: DatabaseRegion) -> DatabaseRegion { - guard let tableRegions = tableRegions else { return .fullDatabase } - guard let otherTableRegions = other.tableRegions else { return .fullDatabase } - - var tableRegionsUnion: [String: TableRegion] = [:] - let tableNames = Set(tableRegions.keys).union(Set(otherTableRegions.keys)) - for table in tableNames { - let tableRegion = tableRegions[table] - let otherTableRegion = otherTableRegions[table] - let tableRegionUnion: TableRegion - switch (tableRegion, otherTableRegion) { - case (nil, nil): - preconditionFailure() - case (nil, let tableRegion?), (let tableRegion?, nil): - tableRegionUnion = tableRegion - case (let tableRegion?, let otherTableRegion?): - tableRegionUnion = tableRegion.union(otherTableRegion) - } - tableRegionsUnion[table] = tableRegionUnion - } - - return DatabaseRegion(tableRegions: tableRegionsUnion) - } - - /// Inserts the given region into this region - public mutating func formUnion(_ other: DatabaseRegion) { - self = union(other) - } - - func ignoring(_ tables: Set) -> DatabaseRegion { - guard tables.isEmpty == false else { return self } - guard let tableRegions = tableRegions else { return .fullDatabase } - let filteredRegions = tableRegions.filter { tables.contains($0.key) == false } - return DatabaseRegion(tableRegions: filteredRegions) - } -} - -extension DatabaseRegion { - - // MARK: - Database Events - - /// Returns whether the content in the region would be impacted if the - /// database were modified by an event of this kind. - public func isModified(byEventsOfKind eventKind: DatabaseEventKind) -> Bool { - return intersection(eventKind.modifiedRegion).isEmpty == false - } - - /// Returns whether the content in the region is impacted by this event. - /// - /// - precondition: event has been filtered by the same region - /// in the TransactionObserver.observes(eventsOfKind:) method, by calling - /// region.isModified(byEventsOfKind:) - public func isModified(by event: DatabaseEvent) -> Bool { - guard let tableRegions = tableRegions else { - // Full database: all changes are impactful - return true - } - - if tableRegions.count == 1 { - // Fast path when the region contains a single table. - // - // We can apply the precondition: due to the filtering of events - // performed in observes(eventsOfKind:), the event argument is - // guaranteed to be about the fetched table. We thus only have to - // check for rowIds. - assert(event.tableName == tableRegions[tableRegions.startIndex].key) // sanity check in debug mode - let tableRegion = tableRegions[tableRegions.startIndex].value - return tableRegion.contains(rowID: event.rowID) - } else { - // Slow path when several tables are observed. - guard let tableRegion = tableRegions[event.tableName] else { - // Shouldn't happen if the precondition is met. - fatalError("precondition failure: event was not filtered out in observes(eventsOfKind:) by region.isModified(byEventsOfKind:)") - } - return tableRegion.contains(rowID: event.rowID) - } - } -} - -// Equatable -extension DatabaseRegion { - /// :nodoc: - public static func == (lhs: DatabaseRegion, rhs: DatabaseRegion) -> Bool { - switch (lhs.tableRegions, rhs.tableRegions) { - case (nil, nil): - return true - case (let ltableRegions?, let rtableRegions?): - let ltableNames = Set(ltableRegions.keys) - let rtableNames = Set(rtableRegions.keys) - guard ltableNames == rtableNames else { - return false - } - for tableName in ltableNames { - if ltableRegions[tableName]! != rtableRegions[tableName]! { - return false - } - } - return true - default: - return false - } - } -} - -// CustomStringConvertible -extension DatabaseRegion { - /// :nodoc: - public var description: String { - guard let tableRegions = tableRegions else { - return "full database" - } - if tableRegions.isEmpty { - return "empty" - } - return tableRegions - .sorted(by: { (l, r) in l.key < r.key }) - .map { (table, tableRegion) in - var desc = table - if let columns = tableRegion.columns { - desc += "(" + columns.sorted().joined(separator: ",") + ")" - } else { - desc += "(*)" - } - if let rowIds = tableRegion.rowIds { - desc += "[" + rowIds.sorted().map { "\($0)" }.joined(separator: ",") + "]" - } - return desc - } - .joined(separator: ",") - } -} - -private struct TableRegion: Equatable { - var columns: Set? // nil means "all columns" - var rowIds: Set? // nil means "all rowids" - - var isEmpty: Bool { - if let columns = columns, columns.isEmpty { return true } - if let rowIds = rowIds, rowIds.isEmpty { return true } - return false - } - - func intersection(_ other: TableRegion) -> TableRegion { - let columnsIntersection: Set? - switch (self.columns, other.columns) { - case (nil, let columns), (let columns, nil): - columnsIntersection = columns - case (let columns?, let other?): - columnsIntersection = columns.intersection(other) - } - - let rowIdsIntersection: Set? - switch (self.rowIds, other.rowIds) { - case (nil, let rowIds), (let rowIds, nil): - rowIdsIntersection = rowIds - case (let rowIds?, let other?): - rowIdsIntersection = rowIds.intersection(other) - } - - return TableRegion(columns: columnsIntersection, rowIds: rowIdsIntersection) - } - - func union(_ other: TableRegion) -> TableRegion { - let columnsUnion: Set? - switch (self.columns, other.columns) { - case (nil, _), (_, nil): - columnsUnion = nil - case (let columns?, let other?): - columnsUnion = columns.union(other) - } - - let rowIdsUnion: Set? - switch (self.rowIds, other.rowIds) { - case (nil, _), (_, nil): - rowIdsUnion = nil - case (let rowIds?, let other?): - rowIdsUnion = rowIds.union(other) - } - - return TableRegion(columns: columnsUnion, rowIds: rowIdsUnion) - } - - func contains(rowID: Int64) -> Bool { - guard let rowIds = rowIds else { - return true - } - return rowIds.contains(rowID) - } -} - -// MARK: - DatabaseRegionConvertible - -public protocol DatabaseRegionConvertible { - /// Returns a database region. - /// - /// - parameter db: A database connection. - func databaseRegion(_ db: Database) throws -> DatabaseRegion -} - -extension DatabaseRegion: DatabaseRegionConvertible { - /// :nodoc: - public func databaseRegion(_ db: Database) throws -> DatabaseRegion { - return self - } -} - -/// A type-erased DatabaseRegionConvertible -public struct AnyDatabaseRegionConvertible: DatabaseRegionConvertible { - let _region: (Database) throws -> DatabaseRegion - - public init(_ region: @escaping (Database) throws -> DatabaseRegion) { - _region = region - } - - public init(_ region: DatabaseRegionConvertible) { - _region = { try region.databaseRegion($0) } - } - - /// :nodoc: - public func databaseRegion(_ db: Database) throws -> DatabaseRegion { - return try _region(db) - } -} - -// MARK: - Utils - -extension DatabaseRegion { - static func union(_ regions: DatabaseRegion...) -> DatabaseRegion { - return regions.reduce(into: DatabaseRegion()) { union, region in - union.formUnion(region) - } - } - - static func union(_ regions: [DatabaseRegionConvertible]) -> (Database) throws -> DatabaseRegion { - return { db in - try regions.reduce(into: DatabaseRegion()) { union, region in - try union.formUnion(region.databaseRegion(db)) - } - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseRegionObservation.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseRegionObservation.swift deleted file mode 100755 index a55fd2b..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseRegionObservation.swift +++ /dev/null @@ -1,133 +0,0 @@ -/// DatabaseRegionObservation tracks changes in the results of database -/// requests, and notifies each database transaction whenever the -/// database changes. -/// -/// For example: -/// -/// let observation = DatabaseRegionObservation(tracking: Player.all) -/// let observer = try observation.start(in: dbQueue) { db: Database in -/// print("Players have changed.") -/// } -public struct DatabaseRegionObservation { - /// The extent of the database observation. The default is - /// `.observerLifetime`: the observation lasts until the - /// observer returned by the `start(in:onChange:)` method - /// is deallocated. - public var extent = Database.TransactionObservationExtent.observerLifetime - - /// A closure that is evaluated when the observation starts, and returns - /// the observed database region. - var observedRegion: (Database) throws -> DatabaseRegion - - // Not public because we foster DatabaseRegionConvertible. - init(tracking region: @escaping (Database) throws -> DatabaseRegion) { - self.observedRegion = { db in - // Remove views from the observed region. - // - // We can do it because we are only interested in modifications in - // actual tables. And we want to do it because we have a fast path - // for simple regions that span a single table. - let views = try db.schema().names(ofType: .view) - return try region(db).ignoring(views) - } - } - - /// Creates a DatabaseRegionObservation which observes *regions*, and - /// notifies whenever one of the observed regions is modified by a - /// database transaction. - /// - /// For example, this sample code counts the number of a times the player - /// table is modified: - /// - /// let observation = DatabaseRegionObservation(tracking: Player.all()) - /// - /// var count = 0 - /// let observer = observation.start(in: dbQueue) { _ in - /// count += 1 - /// print("Players have been modified \(count) times.") - /// } - /// - /// The observation lasts until the observer returned by `start` is - /// deallocated. See the `extent` property for more information. - /// - /// - parameter regions: A list of observed regions. - public init(tracking regions: DatabaseRegionConvertible...) { - self.init(tracking: regions) - } - - /// Creates a DatabaseRegionObservation which observes *regions*, and - /// notifies whenever one of the observed regions is modified by a - /// database transaction. - /// - /// For example, this sample code counts the number of a times the player - /// table is modified: - /// - /// let observation = DatabaseRegionObservation(tracking: [Player.all()]) - /// - /// var count = 0 - /// let observer = observation.start(in: dbQueue) { _ in - /// count += 1 - /// print("Players have been modified \(count) times.") - /// } - /// - /// The observation lasts until the observer returned by `start` is - /// deallocated. See the `extent` property for more information. - /// - /// - parameter regions: A list of observed regions. - public init(tracking regions: [DatabaseRegionConvertible]) { - self.init(tracking: DatabaseRegion.union(regions)) - } -} - -extension DatabaseRegionObservation { - /// Starts the observation in the provided database writer (such as - /// a database queue or database pool), and returns a transaction observer. - /// - /// - parameter reader: A DatabaseWriter. - /// - parameter onChange: A closure that is provided a database connection - /// with write access each time the observed region has been modified. - /// - returns: a TransactionObserver - public func start(in dbWriter: DatabaseWriter, onChange: @escaping (Database) -> Void) throws -> TransactionObserver { - // Use unsafeReentrantWrite so that observation can start from any - // dispatch queue. - return try dbWriter.unsafeReentrantWrite { db -> TransactionObserver in - let region = try observedRegion(db) - let observer = DatabaseRegionObserver(region: region, onChange: onChange) - db.add(transactionObserver: observer, extent: extent) - return observer - } - } -} - -private class DatabaseRegionObserver: TransactionObserver { - let region: DatabaseRegion - let onChange: (Database) -> Void - var isChanged = false - - init(region: DatabaseRegion, onChange: @escaping (Database) -> Void) { - self.region = region - self.onChange = onChange - } - - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { - return region.isModified(byEventsOfKind: eventKind) - } - - func databaseDidChange(with event: DatabaseEvent) { - if region.isModified(by: event) { - isChanged = true - stopObservingDatabaseChangesUntilNextTransaction() - } - } - - func databaseDidCommit(_ db: Database) { - guard isChanged else { return } - isChanged = false - - onChange(db) - } - - func databaseDidRollback(_ db: Database) { - isChanged = false - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseSchemaCache.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseSchemaCache.swift deleted file mode 100755 index 4f29cef..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseSchemaCache.swift +++ /dev/null @@ -1,89 +0,0 @@ -/// The protocol for database schema cache. -protocol DatabaseSchemaCache { - mutating func clear() - - var schemaInfo: SchemaInfo? { get set } - - func primaryKey(_ table: String) -> PrimaryKeyInfo? - mutating func set(primaryKey: PrimaryKeyInfo, forTable table: String) - - func columns(in table: String) -> [ColumnInfo]? - mutating func set(columns: [ColumnInfo], forTable table: String) - - func indexes(on table: String) -> [IndexInfo]? - mutating func set(indexes: [IndexInfo], forTable table: String) - - func foreignKeys(on table: String) -> [ForeignKeyInfo]? - mutating func set(foreignKeys: [ForeignKeyInfo], forTable table: String) -} - -/// A thread-unsafe database schema cache -struct SimpleDatabaseSchemaCache: DatabaseSchemaCache { - var schemaInfo: SchemaInfo? - private var primaryKeys: [String: PrimaryKeyInfo] = [:] - private var columns: [String: [ColumnInfo]] = [:] - private var indexes: [String: [IndexInfo]] = [:] - private var foreignKeys: [String: [ForeignKeyInfo]] = [:] - - mutating func clear() { - primaryKeys = [:] - columns = [:] - indexes = [:] - foreignKeys = [:] - schemaInfo = nil - } - - func primaryKey(_ table: String) -> PrimaryKeyInfo? { - return primaryKeys[table] - } - - mutating func set(primaryKey: PrimaryKeyInfo, forTable table: String) { - primaryKeys[table] = primaryKey - } - - func columns(in table: String) -> [ColumnInfo]? { - return columns[table] - } - - mutating func set(columns: [ColumnInfo], forTable table: String) { - self.columns[table] = columns - } - - func indexes(on table: String) -> [IndexInfo]? { - return indexes[table] - } - - mutating func set(indexes: [IndexInfo], forTable table: String) { - self.indexes[table] = indexes - } - - func foreignKeys(on table: String) -> [ForeignKeyInfo]? { - return foreignKeys[table] - } - - mutating func set(foreignKeys: [ForeignKeyInfo], forTable table: String) { - self.foreignKeys[table] = foreignKeys - } -} - -/// An always empty database schema cache -struct EmptyDatabaseSchemaCache: DatabaseSchemaCache { - func clear() { } - - var schemaInfo: SchemaInfo? { - get { return nil } - set { } - } - - func primaryKey(_ table: String) -> PrimaryKeyInfo? { return nil } - func set(primaryKey: PrimaryKeyInfo, forTable table: String) { } - - func columns(in table: String) -> [ColumnInfo]? { return nil } - func set(columns: [ColumnInfo], forTable table: String) { } - - func indexes(on table: String) -> [IndexInfo]? { return nil } - func set(indexes: [IndexInfo], forTable table: String) { } - - func foreignKeys(on table: String) -> [ForeignKeyInfo]? { return nil } - func set(foreignKeys: [ForeignKeyInfo], forTable table: String) { } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseSnapshot.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseSnapshot.swift deleted file mode 100755 index fc7b28a..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseSnapshot.swift +++ /dev/null @@ -1,160 +0,0 @@ -import Dispatch - -/// A DatabaseSnapshot sees an unchanging database content, as it existed at the -/// moment it was created. -/// -/// See DatabasePool.makeSnapshot() -/// -/// For more information, read about "snapshot isolation" at https://sqlite.org/isolation.html -public class DatabaseSnapshot : DatabaseReader { - private var serializedDatabase: SerializedDatabase - - /// The database configuration - var configuration: Configuration { - return serializedDatabase.configuration - } - - init(path: String, configuration: Configuration = Configuration(), defaultLabel: String, purpose: String) throws { - var configuration = configuration - configuration.readonly = true - configuration.allowsUnsafeTransactions = true // Snaphost keeps a long-lived transaction - - serializedDatabase = try SerializedDatabase( - path: path, - configuration: configuration, - schemaCache: SimpleDatabaseSchemaCache(), - defaultLabel: defaultLabel, - purpose: purpose) - - try serializedDatabase.sync { db in - // Assert WAL mode - let journalMode = try String.fetchOne(db, sql: "PRAGMA journal_mode") - guard journalMode == "wal" else { - throw DatabaseError(message: "WAL mode is not activated at path: \(path)") - } - try db.beginSnapshotIsolation() - } - } - - deinit { - // Leave snapshot isolation - serializedDatabase.sync { db in - try? db.commit() - } - } -} - -// DatabaseReader -extension DatabaseSnapshot { - - // MARK: - Reading from Database - - /// Synchronously executes a read-only block that takes a database - /// connection, and returns its result. - /// - /// let players = try snapshot.read { db in - /// try Player.fetchAll(...) - /// } - /// - /// - parameter block: A block that accesses the database. - /// - throws: The error thrown by the block. - public func read(_ block: (Database) throws -> T) rethrows -> T { - return try serializedDatabase.sync(block) - } - - /// Alias for `read`. See `DatabaseReader.unsafeRead`. - /// - /// :nodoc: - public func unsafeRead(_ block: (Database) throws -> T) rethrows -> T { - return try serializedDatabase.sync(block) - } - - /// Alias for `read`. See `DatabaseReader.unsafeReentrantRead`. - /// - /// :nodoc: - public func unsafeReentrantRead(_ block: (Database) throws -> T) throws -> T { - return try serializedDatabase.sync(block) - } - - // MARK: - Functions - - public func add(function: DatabaseFunction) { - serializedDatabase.sync { $0.add(function: function) } - } - - public func remove(function: DatabaseFunction) { - serializedDatabase.sync { $0.remove(function: function) } - } - - // MARK: - Collations - - public func add(collation: DatabaseCollation) { - serializedDatabase.sync { $0.add(collation: collation) } - } - - public func remove(collation: DatabaseCollation) { - serializedDatabase.sync { $0.remove(collation: collation) } - } - - // MARK: - Value Observation - - public func add( - observation: ValueObservation, - onError: ((Error) -> Void)?, - onChange: @escaping (Reducer.Value) -> Void) - throws -> TransactionObserver - { - // Deal with initial value - switch observation.scheduling { - case .mainQueue: - if let value = try unsafeReentrantRead(observation.initialValue) { - if DispatchQueue.isMain { - onChange(value) - } else { - DispatchQueue.main.async { - onChange(value) - } - } - } - case let .async(onQueue: queue, startImmediately: startImmediately): - if startImmediately { - if let value = try unsafeReentrantRead(observation.initialValue) { - queue.async { - onChange(value) - } - } - } - case let .unsafe(startImmediately: startImmediately): - if startImmediately { - if let value = try unsafeReentrantRead(observation.initialValue) { - onChange(value) - } - } - } - - // Return a dummy observer, because snapshots never change - return SnapshotValueObserver() - } - - public func remove(transactionObserver: TransactionObserver) { - // Can't remove an observer which could not be added :-) - } -} - -extension ValueObservation where Reducer: ValueReducer { - /// Helper method for DatabaseSnapshot.add(observation:onError:onChange:) - fileprivate func initialValue(_ db: Database) throws -> Reducer.Value? { - var reducer = try makeReducer(db) - let fetched = try reducer.fetch(db) - return reducer.value(fetched) - } -} - -/// An observer that does nothing, support for -/// `DatabaseSnapshot.add(observation:onError:onChange:)`. -private class SnapshotValueObserver: TransactionObserver { - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { return false } - func databaseDidChange(with event: DatabaseEvent) { } - func databaseDidCommit(_ db: Database) { } - func databaseDidRollback(_ db: Database) { } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseValue.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseValue.swift deleted file mode 100755 index d2b44f8..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseValue.swift +++ /dev/null @@ -1,341 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -// MARK: - DatabaseValue - -/// DatabaseValue is the intermediate type between SQLite and your values. -/// -/// See https://www.sqlite.org/datatype3.html -public struct DatabaseValue: Hashable, CustomStringConvertible, DatabaseValueConvertible, SQLExpression { - /// The SQLite storage - public let storage: Storage - - /// The NULL DatabaseValue. - public static let null = DatabaseValue(storage: .null) - - /// An SQLite storage (NULL, INTEGER, REAL, TEXT, BLOB). - public enum Storage : Equatable { - /// The NULL storage class. - case null - - /// The INTEGER storage class, wrapping an Int64. - case int64(Int64) - - /// The REAL storage class, wrapping a Double. - case double(Double) - - /// The TEXT storage class, wrapping a String. - case string(String) - - /// The BLOB storage class, wrapping Data. - case blob(Data) - - /// Returns Int64, Double, String, Data or nil. - public var value: DatabaseValueConvertible? { - switch self { - case .null: - return nil - case .int64(let int64): - return int64 - case .double(let double): - return double - case .string(let string): - return string - case .blob(let data): - return data - } - } - - /// Return true if the storages are identical. - /// - /// Unlike DatabaseValue equality that considers the integer 1 to be - /// equal to the 1.0 double (as SQLite does), int64 and double storages - /// are never equal. - public static func == (_ lhs: Storage, _ rhs: Storage) -> Bool { - switch (lhs, rhs) { - case (.null, .null): return true - case (.int64(let lhs), .int64(let rhs)): return lhs == rhs - case (.double(let lhs), .double(let rhs)): return lhs == rhs - case (.string(let lhs), .string(let rhs)): return lhs == rhs - case (.blob(let lhs), .blob(let rhs)): return lhs == rhs - default: return false - } - } - } - - /// Creates a DatabaseValue from Any. - /// - /// The result is nil unless object adopts DatabaseValueConvertible. - public init?(value: Any) { - guard let convertible = value as? DatabaseValueConvertible else { - return nil - } - self = convertible.databaseValue - } - - // MARK: - Extracting Value - - /// Returns true if databaseValue is NULL. - public var isNull: Bool { - switch storage { - case .null: - return true - default: - return false - } - } - - // MARK: - Not Public - - init(storage: Storage) { - self.storage = storage - } - - // SQLite function argument - init(sqliteValue: SQLiteValue) { - switch sqlite3_value_type(sqliteValue) { - case SQLITE_NULL: - storage = .null - case SQLITE_INTEGER: - storage = .int64(sqlite3_value_int64(sqliteValue)) - case SQLITE_FLOAT: - storage = .double(sqlite3_value_double(sqliteValue)) - case SQLITE_TEXT: - storage = .string(String(cString: sqlite3_value_text(sqliteValue)!)) - case SQLITE_BLOB: - if let bytes = sqlite3_value_blob(sqliteValue) { - let count = Int(sqlite3_value_bytes(sqliteValue)) - storage = .blob(Data(bytes: bytes, count: count)) // copy bytes - } else { - storage = .blob(Data()) - } - case let type: - // Assume a GRDB bug: there is no point throwing any error. - fatalError("Unexpected SQLite value type: \(type)") - } - } - - /// Returns a DatabaseValue initialized from a raw SQLite statement pointer. - init(sqliteStatement: SQLiteStatement, index: Int32) { - switch sqlite3_column_type(sqliteStatement, index) { - case SQLITE_NULL: - storage = .null - case SQLITE_INTEGER: - storage = .int64(sqlite3_column_int64(sqliteStatement, index)) - case SQLITE_FLOAT: - storage = .double(sqlite3_column_double(sqliteStatement, index)) - case SQLITE_TEXT: - storage = .string(String(cString: sqlite3_column_text(sqliteStatement, index))) - case SQLITE_BLOB: - if let bytes = sqlite3_column_blob(sqliteStatement, index) { - let count = Int(sqlite3_column_bytes(sqliteStatement, index)) - storage = .blob(Data(bytes: bytes, count: count)) // copy bytes - } else { - storage = .blob(Data()) - } - case let type: - // Assume a GRDB bug: there is no point throwing any error. - fatalError("Unexpected SQLite column type: \(type)") - } - } -} - -// MARK: - Hashable & Equatable - -// Hashable -extension DatabaseValue { - - /// :nodoc: - public func hash(into hasher: inout Hasher) { - switch storage { - case .null: - hasher.combine(0) - case .int64(let int64): - // 1 == 1.0, hence 1 and 1.0 must have the same hash: - hasher.combine(Double(int64)) - case .double(let double): - hasher.combine(double) - case .string(let string): - hasher.combine(string) - case .blob(let data): - hasher.combine(data) - } - } - - /// Returns whether two DatabaseValues are equal. - /// - /// 1.databaseValue == "foo".databaseValue // false - /// 1.databaseValue == 1.databaseValue // true - /// - /// When comparing integers and doubles, the result is true if and only - /// values are equal, and if converting one type to the other does - /// not lose information: - /// - /// 1.databaseValue == 1.0.databaseValue // true - /// - /// For a comparison that distinguishes integer and doubles, compare - /// storages instead: - /// - /// 1.databaseValue.storage == 1.0.databaseValue.storage // false - public static func == (lhs: DatabaseValue, rhs: DatabaseValue) -> Bool { - switch (lhs.storage, rhs.storage) { - case (.null, .null): - return true - case (.int64(let lhs), .int64(let rhs)): - return lhs == rhs - case (.double(let lhs), .double(let rhs)): - return lhs == rhs - case (.int64(let lhs), .double(let rhs)): - return Int64(exactly: rhs) == lhs - case (.double(let lhs), .int64(let rhs)): - return rhs == Int64(exactly: lhs) - case (.string(let lhs), .string(let rhs)): - return lhs == rhs - case (.blob(let lhs), .blob(let rhs)): - return lhs == rhs - default: - return false - } - } -} - -// DatabaseValueConvertible -extension DatabaseValue { - /// Returns self - public var databaseValue: DatabaseValue { - return self - } - - /// Returns the database value - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> DatabaseValue? { - return dbValue - } -} - -// SQLExpressible -extension DatabaseValue { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public var sqlExpression: SQLExpression { - return self - } -} - -// SQLExpression -extension DatabaseValue { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func expressionSQL(_ context: inout SQLGenerationContext) -> String { - // fast path for NULL - if isNull { - return "NULL" - } - - if context.append(arguments: [self]) { - return "?" - } else { - // Correctness above all: use SQLite to quote the value. - // Assume that the Quote function always succeeds - return DatabaseQueue().inDatabase { try! String.fetchOne($0, sql: "SELECT QUOTE(?)", arguments: [self])! } - } - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public var negated: SQLExpression { - switch storage { - case .null: - // SELECT NOT NULL -- NULL - return DatabaseValue.null - case .int64(let int64): - return (int64 == 0).sqlExpression - case .double(let double): - return (double == 0.0).sqlExpression - case .string: - // We can't assume all strings are true, and return false: - // - // SELECT NOT '1' -- 0 (because '1' is turned into the integer 1, which is negated into 0) - // SELECT NOT '0' -- 1 (because '0' is turned into the integer 0, which is negated into 1) - return SQLExpressionNot(self) - case .blob: - // We can't assume all blobs are true, and return false: - // - // SELECT NOT X'31' -- 0 (because X'31' is turned into the string '1', then into integer 1, which is negated into 0) - // SELECT NOT X'30' -- 1 (because X'30' is turned into the string '0', then into integer 0, which is negated into 1) - return SQLExpressionNot(self) - } - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return self - } -} - -// CustomStringConvertible -extension DatabaseValue { - /// :nodoc: - public var description: String { - switch storage { - case .null: - return "NULL" - case .int64(let int64): - return String(int64) - case .double(let double): - return String(double) - case .string(let string): - return String(reflecting: string) - case .blob(let data): - return "Data(\(data.description))" - } - } -} - -/// Compares DatabaseValue like SQLite. -/// -/// See RxGRDB for tests. -/// -/// This comparison is not public because it does not handle text collations, -/// and may be dangerous when put in user hands. -/// -/// So far, the only goal of this sorting method so far is aesthetic, and -/// easier testing. -func < (lhs: DatabaseValue, rhs: DatabaseValue) -> Bool { - switch (lhs.storage, rhs.storage) { - case (.int64(let lhs), .int64(let rhs)): - return lhs < rhs - case (.double(let lhs), .double(let rhs)): - return lhs < rhs - case (.int64(let lhs), .double(let rhs)): - return Double(lhs) < rhs - case (.double(let lhs), .int64(let rhs)): - return lhs < Double(rhs) - case (.string(let lhs), .string(let rhs)): - return lhs.utf8.lexicographicallyPrecedes(rhs.utf8) - case (.blob(let lhs), .blob(let rhs)): - return lhs.lexicographicallyPrecedes(rhs, by: <) - case (.blob, _): - return false - case (_, .blob): - return true - case (.string, _): - return false - case (_, .string): - return true - case (.int64, _), (.double, _): - return false - case (_, .int64), (_, .double): - return true - case (.null, _): - return false - case (_, .null): - return true - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseValueConversion.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseValueConversion.swift deleted file mode 100755 index a752e34..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseValueConversion.swift +++ /dev/null @@ -1,269 +0,0 @@ -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -// MARK: - Conversion Context and Errors - -/// A type that helps the user understanding value conversion errors -struct ValueConversionContext { - private enum Column { - case columnIndex(Int) - case columnName(String) - } - var row: Row? - var sql: String? - var arguments: StatementArguments? - private var column: Column? - - func atColumn(_ columnIndex: Int) -> ValueConversionContext { - var result = self - result.column = .columnIndex(columnIndex) - return result - } - - func atColumn(_ columnName: String) -> ValueConversionContext { - var result = self - result.column = .columnName(columnName) - return result - } - - var columnIndex: Int? { - guard let column = column else { return nil } - switch column { - case .columnIndex(let index): - return index - case .columnName(let name): - return row?.index(ofColumn: name) - } - } - - var columnName: String? { - guard let column = column else { return nil } - switch column { - case .columnIndex(let index): - guard let row = row else { return nil } - return Array(row.columnNames)[index] - case .columnName(let name): - return name - } - } -} - -extension ValueConversionContext { - init(_ statement: SelectStatement) { - self.init( - row: Row(statement: statement).copy(), - sql: statement.sql, - arguments: statement.arguments, - column: nil) - } - - init(_ row: Row) { - if let statement = row.statement { - self.init( - row: row.copy(), - sql: statement.sql, - arguments: statement.arguments, - column: nil) - } else if let sqliteStatement = row.sqliteStatement { - let sql = String(cString: sqlite3_sql(sqliteStatement)).trimmingCharacters(in: .sqlStatementSeparators) - self.init( - row: row.copy(), - sql: sql, - arguments: nil, - column: nil) - } else { - self.init( - row: row.copy(), - sql: nil, - arguments: nil, - column: nil) - } - } -} - -/// The canonical conversion error message -/// -/// - parameter dbValue: nil means "missing column" -func conversionErrorMessage(to: T.Type, from dbValue: DatabaseValue?, conversionContext: ValueConversionContext?) -> String { - var message: String - var extras: [String] = [] - - if let dbValue = dbValue { - message = "could not convert database value \(dbValue) to \(T.self)" - if let columnName = conversionContext?.columnName { - extras.append("column: `\(columnName)`") - } - if let columnIndex = conversionContext?.columnIndex { - extras.append("column index: \(columnIndex)") - } - } else { - message = "could not read \(T.self) from missing column" - if let columnName = conversionContext?.columnName { - message += " `\(columnName)`" - } - } - - if let row = conversionContext?.row { - extras.append("row: \(row)") - } - - if let sql = conversionContext?.sql { - extras.append("sql: `\(sql)`") - if let arguments = conversionContext?.arguments, arguments.isEmpty == false { - extras.append("arguments: \(arguments)") - } - } - - if extras.isEmpty == false { - message += " (" + extras.joined(separator: ", ") + ")" - } - return message -} - -/// The canonical conversion fatal error -/// -/// - parameter dbValue: nil means "missing column", for consistency with (row["missing"] as DatabaseValue? == nil) -func fatalConversionError(to: T.Type, from dbValue: DatabaseValue?, conversionContext: ValueConversionContext?, file: StaticString = #file, line: UInt = #line) -> Never { - fatalError(conversionErrorMessage(to: T.self, from: dbValue, conversionContext: conversionContext), file: file, line: line) -} - -@usableFromInline -func fatalConversionError(to: T.Type, from dbValue: DatabaseValue?, in row: Row, atColumn columnName: String, file: StaticString = #file, line: UInt = #line) -> Never { - fatalConversionError( - to: T.self, - from: dbValue, - conversionContext: ValueConversionContext(row).atColumn(columnName)) -} - -@usableFromInline -func fatalConversionError(to: T.Type, sqliteStatement: SQLiteStatement, index: Int32, file: StaticString = #file, line: UInt = #line) -> Never { - let row = Row(sqliteStatement: sqliteStatement) - fatalConversionError( - to: T.self, - from: DatabaseValue(sqliteStatement: sqliteStatement, index: index), - conversionContext: ValueConversionContext(row).atColumn(Int(index))) -} - -@usableFromInline -func fatalConversionError(to: T.Type, from dbValue: DatabaseValue?, sqliteStatement: SQLiteStatement, index: Int32, file: StaticString = #file, line: UInt = #line) -> Never { - let row = Row(sqliteStatement: sqliteStatement) - fatalConversionError( - to: T.self, - from: dbValue, - conversionContext: ValueConversionContext(row).atColumn(Int(index))) -} - -// MARK: - DatabaseValueConvertible - -/// Lossless conversions from database values and rows -extension DatabaseValueConvertible { - @usableFromInline - static func decode(from sqliteStatement: SQLiteStatement, atUncheckedIndex index: Int32) -> Self { - let dbValue = DatabaseValue(sqliteStatement: sqliteStatement, index: index) - if let value = fromDatabaseValue(dbValue) { - return value - } else { - fatalConversionError(to: Self.self, from: dbValue, sqliteStatement: sqliteStatement, index: index) - } - } - - static func decode(from dbValue: DatabaseValue, conversionContext: @autoclosure () -> ValueConversionContext?) -> Self { - if let value = fromDatabaseValue(dbValue) { - return value - } else { - fatalConversionError(to: Self.self, from: dbValue, conversionContext: conversionContext()) - } - } - - @usableFromInline - static func decode(from row: Row, atUncheckedIndex index: Int) -> Self { - return decode( - from: row.impl.databaseValue(atUncheckedIndex: index), - conversionContext: ValueConversionContext(row).atColumn(index)) - } - - @usableFromInline - static func decodeIfPresent(from sqliteStatement: SQLiteStatement, atUncheckedIndex index: Int32) -> Self? { - let dbValue = DatabaseValue(sqliteStatement: sqliteStatement, index: index) - if let value = fromDatabaseValue(dbValue) { - return value - } else if dbValue.isNull { - return nil - } else { - fatalConversionError(to: Self.self, from: dbValue, sqliteStatement: sqliteStatement, index: index) - } - } - - static func decodeIfPresent(from dbValue: DatabaseValue, conversionContext: @autoclosure () -> ValueConversionContext?) -> Self? { - // Use fromDatabaseValue before checking for null: this allows DatabaseValue to convert NULL to .null. - if let value = fromDatabaseValue(dbValue) { - return value - } else if dbValue.isNull { - return nil - } else { - fatalConversionError(to: Self.self, from: dbValue, conversionContext: conversionContext()) - } - } - - @usableFromInline - static func decodeIfPresent(from row: Row, atUncheckedIndex index: Int) -> Self? { - return decodeIfPresent( - from: row.impl.databaseValue(atUncheckedIndex: index), - conversionContext: ValueConversionContext(row).atColumn(index)) - } -} - -// MARK: - DatabaseValueConvertible & StatementColumnConvertible - -/// Lossless conversions from database values and rows -extension DatabaseValueConvertible where Self: StatementColumnConvertible { - @inlinable - static func fastDecode(from sqliteStatement: SQLiteStatement, atUncheckedIndex index: Int32) -> Self { - if sqlite3_column_type(sqliteStatement, index) == SQLITE_NULL { - fatalConversionError(to: Self.self, sqliteStatement: sqliteStatement, index: index) - } - return self.init(sqliteStatement: sqliteStatement, index: index) - } - - @inlinable - static func fastDecode(from row: Row, atUncheckedIndex index: Int) -> Self { - if let sqliteStatement = row.sqliteStatement { - return fastDecode(from: sqliteStatement, atUncheckedIndex: Int32(index)) - } - return row.fastDecode(Self.self, atUncheckedIndex: index) - } - - @inlinable - static func fastDecodeIfPresent(from sqliteStatement: SQLiteStatement, atUncheckedIndex index: Int32) -> Self? { - if sqlite3_column_type(sqliteStatement, index) == SQLITE_NULL { - return nil - } - return self.init(sqliteStatement: sqliteStatement, index: index) - } - - @inlinable - static func fastDecodeIfPresent(from row: Row, atUncheckedIndex index: Int) -> Self? { - if let sqliteStatement = row.sqliteStatement { - return fastDecodeIfPresent(from: sqliteStatement, atUncheckedIndex: Int32(index)) - } - return row.fastDecodeIfPresent(Self.self, atUncheckedIndex: index) - } -} - -// Support for @inlinable decoding -extension Row { - @usableFromInline - func fastDecode(_ type: Value.Type, atUncheckedIndex index: Int) -> Value { - return impl.fastDecode(type, atUncheckedIndex: index) - } - - @usableFromInline - func fastDecodeIfPresent(_ type: Value.Type, atUncheckedIndex index: Int) -> Value? { - return impl.fastDecodeIfPresent(type, atUncheckedIndex: index) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseValueConvertible.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseValueConvertible.swift deleted file mode 100755 index 3c0095e..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseValueConvertible.swift +++ /dev/null @@ -1,575 +0,0 @@ -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -// MARK: - DatabaseValueConvertible - -/// Types that adopt DatabaseValueConvertible can be initialized from -/// database values. -/// -/// The protocol comes with built-in methods that allow to fetch cursors, -/// arrays, or single values: -/// -/// try String.fetchCursor(db, sql: "SELECT name FROM ...", arguments:...) // Cursor of String -/// try String.fetchAll(db, sql: "SELECT name FROM ...", arguments:...) // [String] -/// try String.fetchOne(db, sql: "SELECT name FROM ...", arguments:...) // String? -/// -/// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") -/// try String.fetchCursor(statement, arguments:...) // Cursor of String -/// try String.fetchAll(statement, arguments:...) // [String] -/// try String.fetchOne(statement, arguments:...) // String? -/// -/// DatabaseValueConvertible is adopted by Bool, Int, String, etc. -public protocol DatabaseValueConvertible : SQLExpressible { - /// Returns a value that can be stored in the database. - var databaseValue: DatabaseValue { get } - - /// Returns a value initialized from *dbValue*, if possible. - static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? -} - -extension DatabaseValueConvertible { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public var sqlExpression: SQLExpression { - return databaseValue - } -} - -/// A cursor of database values extracted from a single column. -/// For example: -/// -/// try dbQueue.read { db in -/// let urls: DatabaseValueCursor = try URL.fetchCursor(db, sql: "SELECT url FROM link") -/// while let url = urls.next() { // URL -/// print(url) -/// } -/// } -public final class DatabaseValueCursor : Cursor { - @usableFromInline let _statement: SelectStatement - @usableFromInline let _sqliteStatement: SQLiteStatement - @usableFromInline let _columnIndex: Int32 - @usableFromInline var _done = false - - init(statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws { - _statement = statement - _sqliteStatement = statement.sqliteStatement - if let adapter = adapter { - // adapter may redefine the index of the leftmost column - _columnIndex = try Int32(adapter.baseColumnIndex(atIndex: 0, layout: statement)) - } else { - _columnIndex = 0 - } - _statement.reset(withArguments: arguments) - } - - deinit { - // Statement reset fails when sqlite3_step has previously failed. - // Just ignore reset error. - try? _statement.reset() - } - - /// :nodoc: - @inlinable - public func next() throws -> Value? { - if _done { - // make sure this instance never yields a value again, even if the - // statement is reset by another cursor. - return nil - } - switch sqlite3_step(_sqliteStatement) { - case SQLITE_DONE: - _done = true - return nil - case SQLITE_ROW: - return Value.decode(from: _sqliteStatement, atUncheckedIndex: _columnIndex) - case let code: - try _statement.didFail(withResultCode: code) - } - } -} - -/// A cursor of optional database values extracted from a single column. -/// For example: -/// -/// try dbQueue.read { db in -/// let urls: NullableDatabaseValueCursor = try Optional.fetchCursor(db, sql: "SELECT url FROM link") -/// while let url = urls.next() { // URL? -/// print(url) -/// } -/// } -public final class NullableDatabaseValueCursor : Cursor { - @usableFromInline let _statement: SelectStatement - @usableFromInline let _sqliteStatement: SQLiteStatement - @usableFromInline let _columnIndex: Int32 - @usableFromInline var _done = false - - init(statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws { - _statement = statement - _sqliteStatement = statement.sqliteStatement - if let adapter = adapter { - // adapter may redefine the index of the leftmost column - _columnIndex = try Int32(adapter.baseColumnIndex(atIndex: 0, layout: statement)) - } else { - _columnIndex = 0 - } - _statement.reset(withArguments: arguments) - } - - deinit { - // Statement reset fails when sqlite3_step has previously failed. - // Just ignore reset error. - try? _statement.reset() - } - - /// :nodoc: - @inlinable - public func next() throws -> Value?? { - if _done { - // make sure this instance never yields a value again, even if the - // statement is reset by another cursor. - return nil - } - switch sqlite3_step(_sqliteStatement) { - case SQLITE_DONE: - _done = true - return nil - case SQLITE_ROW: - return Value.decodeIfPresent(from: _sqliteStatement, atUncheckedIndex: _columnIndex) - case let code: - try _statement.didFail(withResultCode: code) - } - } -} - -/// DatabaseValueConvertible comes with built-in methods that allow to fetch -/// cursors, arrays, or single values: -/// -/// try String.fetchCursor(db, sql: "SELECT name FROM ...", arguments:...) // Cursor of String -/// try String.fetchAll(db, sql: "SELECT name FROM ...", arguments:...) // [String] -/// try String.fetchOne(db, sql: "SELECT name FROM ...", arguments:...) // String? -/// -/// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") -/// try String.fetchCursor(statement, arguments:...) // Cursor of String -/// try String.fetchAll(statement, arguments:...) // [String] -/// try String.fetchOne(statement, arguments:...) // String -/// -/// DatabaseValueConvertible is adopted by Bool, Int, String, etc. -extension DatabaseValueConvertible { - - // MARK: Fetching From SelectStatement - - /// Returns a cursor over values fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let names = try String.fetchCursor(statement) // Cursor of String - /// while let name = try names.next() { // String - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> DatabaseValueCursor { - return try DatabaseValueCursor(statement: statement, arguments: arguments, adapter: adapter) - } - - /// Returns an array of values fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let names = try String.fetchAll(statement) // [String] - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Self] { - return try Array(fetchCursor(statement, arguments: arguments, adapter: adapter)) - } - - /// Returns a single value fetched from a prepared statement. - /// - /// The result is nil if the query returns no row, or if no value can be - /// extracted from the first row. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let name = try String.fetchOne(statement) // String? - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An optional value. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> Self? { - // fetchOne returns nil if there is no row, or if there is a row with a null value - let cursor = try NullableDatabaseValueCursor(statement: statement, arguments: arguments, adapter: adapter) - return try cursor.next() ?? nil - } -} - -extension DatabaseValueConvertible { - - // MARK: Fetching From SQL - - /// Returns a cursor over values fetched from an SQL query. - /// - /// let names = try String.fetchCursor(db, sql: "SELECT name FROM ...") // Cursor of String - /// while let name = try name.next() { // String - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> DatabaseValueCursor { - return try fetchCursor(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns an array of values fetched from an SQL query. - /// - /// let names = try String.fetchAll(db, sql: "SELECT name FROM ...") // [String] - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> [Self] { - return try fetchAll(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns a single value fetched from an SQL query. - /// - /// The result is nil if the query returns no row, or if no value can be - /// extracted from the first row. - /// - /// let name = try String.fetchOne(db, sql: "SELECT name FROM ...") // String? - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An optional value. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> Self? { - return try fetchOne(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } -} - -extension DatabaseValueConvertible { - - // MARK: Fetching From FetchRequest - - /// Returns a cursor over values fetched from a fetch request. - /// - /// let request = Player.select(Column("name")) - /// let names = try String.fetchCursor(db, request) // Cursor of String - /// while let name = try name.next() { // String - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, _ request: R) throws -> DatabaseValueCursor { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchCursor(statement, adapter: adapter) - } - - /// Returns an array of values fetched from a fetch request. - /// - /// let request = Player.select(Column("name")) - /// let names = try String.fetchAll(db, request) // [String] - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An array. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, _ request: R) throws -> [Self] { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchAll(statement, adapter: adapter) - } - - /// Returns a single value fetched from a fetch request. - /// - /// The result is nil if the query returns no row, or if no value can be - /// extracted from the first row. - /// - /// let request = Player.filter(key: 1).select(Column("name")) - /// let name = try String.fetchOne(db, request) // String? - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An optional value. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, _ request: R) throws -> Self? { - let (statement, adapter) = try request.prepare(db, forSingleResult: true) - return try fetchOne(statement, adapter: adapter) - } -} - -extension FetchRequest where RowDecoder: DatabaseValueConvertible { - - // MARK: Fetching Values - - /// A cursor over fetched values. - /// - /// let request: ... // Some FetchRequest that fetches String - /// let strings = try request.fetchCursor(db) // Cursor of String - /// while let string = try strings.next() { // String - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameter db: A database connection. - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchCursor(_ db: Database) throws -> DatabaseValueCursor { - return try RowDecoder.fetchCursor(db, self) - } - - /// An array of fetched values. - /// - /// let request: ... // Some FetchRequest that fetches String - /// let strings = try request.fetchAll(db) // [String] - /// - /// - parameter db: A database connection. - /// - returns: An array of values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchAll(_ db: Database) throws -> [RowDecoder] { - return try RowDecoder.fetchAll(db, self) - } - - /// The first fetched value. - /// - /// The result is nil if the request returns no row, or if no value can be - /// extracted from the first row. - /// - /// let request: ... // Some FetchRequest that fetches String - /// let string = try request.fetchOne(db) // String? - /// - /// - parameter db: A database connection. - /// - returns: An optional value. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchOne(_ db: Database) throws -> RowDecoder? { - return try RowDecoder.fetchOne(db, self) - } -} - -/// Swift's Optional comes with built-in methods that allow to fetch cursors -/// and arrays of optional DatabaseValueConvertible: -/// -/// try Optional.fetchCursor(db, sql: "SELECT name FROM ...", arguments:...) // Cursor of String? -/// try Optional.fetchAll(db, sql: "SELECT name FROM ...", arguments:...) // [String?] -/// -/// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") -/// try Optional.fetchCursor(statement, arguments:...) // Cursor of String? -/// try Optional.fetchAll(statement, arguments:...) // [String?] -/// -/// DatabaseValueConvertible is adopted by Bool, Int, String, etc. -extension Optional where Wrapped: DatabaseValueConvertible { - - // MARK: Fetching From SelectStatement - - /// Returns a cursor over optional values fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let names = try Optional.fetchCursor(statement) // Cursor of String? - /// while let name = try names.next() { // String? - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> NullableDatabaseValueCursor { - return try NullableDatabaseValueCursor(statement: statement, arguments: arguments, adapter: adapter) - } - - /// Returns an array of optional values fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let names = try Optional.fetchAll(statement) // [String?] - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Wrapped?] { - return try Array(fetchCursor(statement, arguments: arguments, adapter: adapter)) - } -} - -extension Optional where Wrapped: DatabaseValueConvertible { - - // MARK: Fetching From SQL - - /// Returns a cursor over optional values fetched from an SQL query. - /// - /// let names = try Optional.fetchCursor(db, sql: "SELECT name FROM ...") // Cursor of String? - /// while let name = try names.next() { // String? - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> NullableDatabaseValueCursor { - return try fetchCursor(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns an array of optional values fetched from an SQL query. - /// - /// let names = try String.fetchAll(db, sql: "SELECT name FROM ...") // [String?] - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> [Wrapped?] { - return try fetchAll(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } -} - -extension Optional where Wrapped: DatabaseValueConvertible { - - // MARK: Fetching From FetchRequest - - /// Returns a cursor over optional values fetched from a fetch request. - /// - /// let request = Player.select(Column("name")) - /// let names = try Optional.fetchCursor(db, request) // Cursor of String? - /// while let name = try names.next() { // String? - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: A cursor over fetched optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, _ request: R) throws -> NullableDatabaseValueCursor { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchCursor(statement, adapter: adapter) - } - - /// Returns an array of optional values fetched from a fetch request. - /// - /// let request = Player.select(Column("name")) - /// let names = try Optional.fetchAll(db, request) // [String?] - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An array of optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, _ request: R) throws -> [Wrapped?] { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchAll(statement, adapter: adapter) - } -} - -extension FetchRequest where RowDecoder: _OptionalProtocol, RowDecoder._Wrapped: DatabaseValueConvertible { - - // MARK: Fetching Optional values - - /// A cursor over fetched optional values. - /// - /// let request: ... // Some FetchRequest that fetches Optional - /// let strings = try request.fetchCursor(db) // Cursor of String? - /// while let string = try strings.next() { // String? - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameter db: A database connection. - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchCursor(_ db: Database) throws -> NullableDatabaseValueCursor { - return try Optional.fetchCursor(db, self) - } - - /// An array of fetched optional values. - /// - /// let request: ... // Some FetchRequest that fetches Optional - /// let strings = try request.fetchAll(db) // [String?] - /// - /// - parameter db: A database connection. - /// - returns: An array of values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchAll(_ db: Database) throws -> [RowDecoder._Wrapped?] { - return try Optional.fetchAll(db, self) - } -} - diff --git a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseWriter.swift b/Example/Pods/GRDB.swift/GRDB/Core/DatabaseWriter.swift deleted file mode 100755 index c313ef2..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/DatabaseWriter.swift +++ /dev/null @@ -1,396 +0,0 @@ -import Dispatch - -/// The protocol for all types that can update a database. -/// -/// It is adopted by DatabaseQueue and DatabasePool. -/// -/// The protocol comes with isolation guarantees that describe the behavior of -/// adopting types in a multithreaded application. -/// -/// Types that adopt the protocol can in practice provide stronger guarantees. -/// For example, DatabaseQueue provides a stronger isolation level -/// than DatabasePool. -/// -/// **Warning**: Isolation guarantees stand as long as there is no external -/// connection to the database. Should you have to cope with external -/// connections, protect yourself with transactions, and be ready to setup a -/// [busy handler](https://www.sqlite.org/c3ref/busy_handler.html). -public protocol DatabaseWriter : DatabaseReader { - - // MARK: - Writing in Database - - /// Synchronously executes a block that takes a database connection, and - /// returns its result. - /// - /// Eventual concurrent database updates are postponed until the block - /// has executed. - /// - /// Eventual concurrent reads are guaranteed not to see any changes - /// performed in the block until they are all saved in the database. - /// - /// The block may, or may not, be wrapped inside a transaction. - /// - /// This method is *not* reentrant. - func write(_ block: (Database) throws -> T) throws -> T - - /// Synchronously executes a block that takes a database connection, and - /// returns its result. - /// - /// Eventual concurrent database updates are postponed until the block - /// has executed. - /// - /// Eventual concurrent reads may see changes performed in the block before - /// the block completes. - /// - /// The block is guaranteed to be executed outside of a transaction. - /// - /// This method is *not* reentrant. - func writeWithoutTransaction(_ block: (Database) throws -> T) rethrows -> T - - /// Synchronously executes a block that takes a database connection, and - /// returns its result. - /// - /// Eventual concurrent database updates are postponed until the block - /// has executed. - /// - /// Eventual concurrent reads may see changes performed in the block before - /// the block completes. - /// - /// This method is reentrant. It should be avoided because it fosters - /// dangerous concurrency practices. - func unsafeReentrantWrite(_ block: (Database) throws -> T) rethrows -> T - - // MARK: - Reading from Database - - /// Concurrently executes a read-only block that takes a - /// database connection. - /// - /// This method must be called from a writing dispatch queue, outside of any - /// transaction. You'll get a fatal error otherwise. - /// - /// The *block* argument is guaranteed to see the database in the last - /// committed state at the moment this method is called. Eventual concurrent - /// database updates are *not visible* inside the block. - /// - /// This method returns as soon as the isolation guarantees described above - /// are established. To access the fetched results, you call the wait() - /// method of the returned future, on any dispatch queue. - /// - /// In the example below, the number of players is fetched concurrently with - /// the player insertion. Yet the future is guaranteed to return zero: - /// - /// try writer.writeWithoutTransaction { db in - /// // Delete all players - /// try Player.deleteAll() - /// - /// // Count players concurrently - /// let future = writer.concurrentRead { db in - /// return try Player.fetchCount() - /// } - /// - /// // Insert a player - /// try Player(...).insert(db) - /// - /// // Guaranteed to be zero - /// let count = try future.wait() - /// } - func concurrentRead(_ block: @escaping (Database) throws -> T) -> DatabaseFuture -} - -extension DatabaseWriter { - - // MARK: - Transaction Observers - - /// Add a transaction observer, so that it gets notified of - /// database changes. - /// - /// To remove the observer, use `DatabaseReader.remove(transactionObserver:)`. - /// - /// - parameter transactionObserver: A transaction observer. - /// - parameter extent: The duration of the observation. The default is - /// the observer lifetime (observation lasts until observer - /// is deallocated). - public func add(transactionObserver: TransactionObserver, extent: Database.TransactionObservationExtent = .observerLifetime) { - writeWithoutTransaction { $0.add(transactionObserver: transactionObserver, extent: extent) } - } - - /// Default implementation for the DatabaseReader requirement. - /// :nodoc: - public func remove(transactionObserver: TransactionObserver) { - writeWithoutTransaction { $0.remove(transactionObserver: transactionObserver) } - } - - // MARK: - Erasing the content of the database - - /// Erases the content of the database. - /// - /// - precondition: database is not accessed concurrently during the - /// execution of this method. - public func erase() throws { - #if SQLITE_HAS_CODEC - // SQLCipher does not support the backup API: https://discuss.zetetic.net/t/using-the-sqlite-online-backup-api/2631 - // So we'll drop all database objects one after the other. - try writeWithoutTransaction { db in - // Prevent foreign keys from messing with drop table statements - let foreignKeysEnabled = try Bool.fetchOne(db, sql: "PRAGMA foreign_keys")! - if foreignKeysEnabled { - try db.execute(sql: "PRAGMA foreign_keys = OFF") - } - - // Remove all database objects, one after the other - do { - try db.inTransaction { - while let row = try Row.fetchOne(db, sql: "SELECT type, name FROM sqlite_master WHERE name NOT LIKE 'sqlite_%'") { - let type: String = row["type"] - let name: String = row["name"] - try db.execute(sql: "DROP \(type) \(name.quotedDatabaseIdentifier)") - } - return .commit - } - - // Restore foreign keys if needed - if foreignKeysEnabled { - try db.execute(sql: "PRAGMA foreign_keys = ON") - } - } catch { - // Restore foreign keys if needed - if foreignKeysEnabled { - try? db.execute(sql: "PRAGMA foreign_keys = ON") - } - throw error - } - } - #else - try DatabaseQueue().backup(to: self) - #endif - } - - // MARK: - Claiming Disk Space - - /// Rebuilds the database file, repacking it into a minimal amount of - /// disk space. - /// - /// See https://www.sqlite.org/lang_vacuum.html for more information. - public func vacuum() throws { - try writeWithoutTransaction { try $0.execute(sql: "VACUUM") } - } - - // MARK: - Value Observation - - /// Default implementation for the DatabaseReader requirement. - /// :nodoc: - public func add( - observation: ValueObservation, - onError: ((Error) -> Void)?, - onChange: @escaping (Reducer.Value) -> Void) - throws -> TransactionObserver - { - let calledOnMainQueue = DispatchQueue.isMain - var startValue: Reducer.Value? = nil - defer { - if let startValue = startValue { - onChange(startValue) - } - } - - // Use unsafeReentrantWrite so that observation can start from any - // dispatch queue. - return try unsafeReentrantWrite { db in - // Create the reducer - var reducer = try observation.makeReducer(db) - - // Take care of initial value. Make sure it is dispatched before - // any future transaction can trigger a change. - switch observation.scheduling { - case .mainQueue: - if let value = try reducer.initialValue(db, requiresWriteAccess: observation.requiresWriteAccess) { - if calledOnMainQueue { - startValue = value - } else { - DispatchQueue.main.async { onChange(value) } - } - } - case let .async(onQueue: queue, startImmediately: startImmediately): - if startImmediately { - if let value = try reducer.initialValue(db, requiresWriteAccess: observation.requiresWriteAccess) { - queue.async { onChange(value) } - } - } - case let .unsafe(startImmediately: startImmediately): - if startImmediately { - startValue = try reducer.initialValue(db, requiresWriteAccess: observation.requiresWriteAccess) - } - } - - // Start observing the database - let valueObserver = try ValueObserver( - region: observation.observedRegion(db), - reducer: reducer, - configuration: db.configuration, - fetch: observation.fetchAfterChange(in: self), - notificationQueue: observation.notificationQueue, - onError: onError, - onChange: onChange) - db.add(transactionObserver: valueObserver, extent: .observerLifetime) - - return valueObserver - } - } -} - -extension ValueReducer { - /// Helper method for DatabaseWriter.add(observation:onError:onChange:) - fileprivate mutating func initialValue(_ db: Database, requiresWriteAccess: Bool) throws -> Value? { - if requiresWriteAccess { - var fetchedValue: Fetched! - try db.inSavepoint { - fetchedValue = try fetch(db) - return .commit - } - return value(fetchedValue) - } else { - return try value(db.readOnly { try fetch(db) }) - } - } -} - -extension ValueObservation where Reducer: ValueReducer { - /// Helper method for DatabaseWriter.add(observation:onError:onChange:) - fileprivate func fetchAfterChange(in writer: DatabaseWriter) -> (Database, Reducer) -> DatabaseFuture { - // The technique to return a future value after database has changed - // depends on the requiresWriteAccess flag: - if requiresWriteAccess { - // Synchronous fetch - return { (db, reducer) in - DatabaseFuture(Result { - var fetchedValue: Reducer.Fetched! - try db.inTransaction { - fetchedValue = try reducer.fetch(db) - return .commit - } - return fetchedValue - }) - } - } else { - // Concurrent fetch - return { [unowned writer] (_, reducer) in - writer.concurrentRead(reducer.fetch) - } - } - } -} - -/// A future database value, returned by the DatabaseWriter.concurrentRead(_:) -/// method. -/// -/// let futureCount: Future = try writer.writeWithoutTransaction { db in -/// try Player(...).insert() -/// -/// // Count players concurrently -/// return writer.concurrentRead { db in -/// return try Player.fetchCount() -/// } -/// } -/// -/// let count: Int = try futureCount.wait() -public class DatabaseFuture { - private var consumed = false - private let _wait: () throws -> Value - - init(_ wait: @escaping () throws -> Value) { - _wait = wait - } - - init(_ result: Result) { - _wait = result.get - } - - /// Blocks the current thread until the value is available, and returns it. - /// - /// It is a programmer error to call this method several times. - /// - /// - throws: Any error that prevented the value from becoming available. - public func wait() throws -> Value { - // Not thread-safe and quick and dirty. - // Goal is that users learn not to call this method twice. - GRDBPrecondition(consumed == false, "DatabaseFuture.wait() must be called only once") - consumed = true - return try _wait() - } -} - -/// A type-erased DatabaseWriter -/// -/// Instances of AnyDatabaseWriter forward their methods to an arbitrary -/// underlying database writer. -public final class AnyDatabaseWriter : DatabaseWriter { - private let base: DatabaseWriter - - /// Creates a database writer that wraps a base database writer. - public init(_ base: DatabaseWriter) { - self.base = base - } - - // MARK: - Reading from Database - - /// :nodoc: - public func read(_ block: (Database) throws -> T) throws -> T { - return try base.read(block) - } - - /// :nodoc: - public func unsafeRead(_ block: (Database) throws -> T) throws -> T { - return try base.unsafeRead(block) - } - - /// :nodoc: - public func unsafeReentrantRead(_ block: (Database) throws -> T) throws -> T { - return try base.unsafeReentrantRead(block) - } - - /// :nodoc: - public func concurrentRead(_ block: @escaping (Database) throws -> T) -> DatabaseFuture { - return base.concurrentRead(block) - } - - // MARK: - Writing in Database - - /// :nodoc: - public func write(_ block: (Database) throws -> T) throws -> T { - return try base.write(block) - } - - /// :nodoc: - public func writeWithoutTransaction(_ block: (Database) throws -> T) rethrows -> T { - return try base.writeWithoutTransaction(block) - } - - /// :nodoc: - public func unsafeReentrantWrite(_ block: (Database) throws -> T) rethrows -> T { - return try base.unsafeReentrantWrite(block) - } - - // MARK: - Functions - - /// :nodoc: - public func add(function: DatabaseFunction) { - base.add(function: function) - } - - /// :nodoc: - public func remove(function: DatabaseFunction) { - base.remove(function: function) - } - - // MARK: - Collations - - /// :nodoc: - public func add(collation: DatabaseCollation) { - base.add(collation: collation) - } - - /// :nodoc: - public func remove(collation: DatabaseCollation) { - base.remove(collation: collation) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/FetchRequest.swift b/Example/Pods/GRDB.swift/GRDB/Core/FetchRequest.swift deleted file mode 100755 index 70b3f21..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/FetchRequest.swift +++ /dev/null @@ -1,159 +0,0 @@ -// MARK: - FetchRequest - -/// The protocol for all requests that run from a single select statement, and -/// tell how fetched rows should be interpreted. -/// -/// struct Player: FetchableRecord { ... } -/// let request: ... // Some FetchRequest that fetches Player -/// try request.fetchCursor(db) // Cursor of Player -/// try request.fetchAll(db) // [Player] -/// try request.fetchOne(db) // Player? -public protocol FetchRequest: DatabaseRegionConvertible { - /// The type that tells how fetched database rows should be interpreted. - associatedtype RowDecoder - - /// Returns a tuple that contains a prepared statement that is ready to be - /// executed, and an eventual row adapter. - /// - /// - parameter db: A database connection. - /// - parameter singleResult: A hint that the query should return a single - /// result. Implementations can optionally use - /// this to optimize the prepared statement. - /// - returns: A prepared statement and an eventual row adapter. - func prepare(_ db: Database, forSingleResult singleResult: Bool) throws -> (SelectStatement, RowAdapter?) - - /// Returns the number of rows fetched by the request. - /// - /// The default implementation builds a naive SQL query based on the - /// statement returned by the `prepare` method: - /// `SELECT COUNT(*) FROM (...)`. - /// - /// Adopting types can refine this method in order to use more - /// efficient SQL. - /// - /// - parameter db: A database connection. - func fetchCount(_ db: Database) throws -> Int -} - -extension FetchRequest { - - /// Returns an adapted request. - public func adapted(_ adapter: @escaping (Database) throws -> RowAdapter) -> AdaptedFetchRequest { - return AdaptedFetchRequest(self, adapter) - } - - /// Returns the number of rows fetched by the request. - /// - /// This default implementation builds a naive SQL query based on the - /// statement returned by the `prepare` method: `SELECT COUNT(*) FROM (...)`. - /// - /// - parameter db: A database connection. - public func fetchCount(_ db: Database) throws -> Int { - let (statement, _) = try prepare(db, forSingleResult: false) - let sql = "SELECT COUNT(*) FROM (\(statement.sql))" - return try Int.fetchOne(db, sql: sql, arguments: statement.arguments)! - } - - /// Returns the database region that the request looks into. - /// - /// This default implementation returns a region built from the statement - /// returned by the `prepare` method. - /// - /// - parameter db: A database connection. - public func databaseRegion(_ db: Database) throws -> DatabaseRegion { - let (statement, _) = try prepare(db, forSingleResult: false) - return statement.databaseRegion - } -} - -// MARK: - AdaptedFetchRequest - -/// An adapted request. -public struct AdaptedFetchRequest : FetchRequest { - public typealias RowDecoder = Base.RowDecoder - - private let base: Base - private let adapter: (Database) throws -> RowAdapter - - /// Creates an adapted request from a base request and a closure that builds - /// a row adapter from a database connection. - init(_ base: Base, _ adapter: @escaping (Database) throws -> RowAdapter) { - self.base = base - self.adapter = adapter - } - - /// :nodoc: - public func prepare(_ db: Database, forSingleResult singleResult: Bool) throws -> (SelectStatement, RowAdapter?) { - let (statement, baseAdapter) = try base.prepare(db, forSingleResult: singleResult) - if let baseAdapter = baseAdapter { - return try (statement, ChainedAdapter(first: baseAdapter, second: adapter(db))) - } else { - return try (statement, adapter(db)) - } - } - - /// :nodoc: - public func fetchCount(_ db: Database) throws -> Int { - return try base.fetchCount(db) - } - - /// :nodoc: - public func databaseRegion(_ db: Database) throws -> DatabaseRegion { - return try base.databaseRegion(db) - } -} - -// MARK: - AnyFetchRequest - -/// A type-erased FetchRequest. -/// -/// An AnyFetchRequest forwards its operations to an underlying request, -/// hiding its specifics. -public struct AnyFetchRequest : FetchRequest { - public typealias RowDecoder = T - - private let _prepare: (Database, _ singleResult: Bool) throws -> (SelectStatement, RowAdapter?) - private let _fetchCount: (Database) throws -> Int - private let _databaseRegion: (Database) throws -> DatabaseRegion - - /// Creates a request that wraps and forwards operations to `request`. - public init(_ request: Request) { - _prepare = request.prepare - _fetchCount = request.fetchCount - _databaseRegion = request.databaseRegion - } - - /// Creates a request whose `prepare()` method wraps and forwards - /// operations the argument closure. - public init(_ prepare: @escaping (Database, _ singleResult: Bool) throws -> (SelectStatement, RowAdapter?)) { - _prepare = { db, singleResult in - try prepare(db, singleResult) - } - - _fetchCount = { db in - let (statement, _) = try prepare(db, false) - let sql = "SELECT COUNT(*) FROM (\(statement.sql))" - return try Int.fetchOne(db, sql: sql, arguments: statement.arguments)! - } - - _databaseRegion = { db in - let (statement, _) = try prepare(db, false) - return statement.databaseRegion - } - } - - /// :nodoc: - public func prepare(_ db: Database, forSingleResult singleResult: Bool) throws -> (SelectStatement, RowAdapter?) { - return try _prepare(db, singleResult) - } - - /// :nodoc: - public func fetchCount(_ db: Database) throws -> Int { - return try _fetchCount(db) - } - - /// :nodoc: - public func databaseRegion(_ db: Database) throws -> DatabaseRegion { - return try _databaseRegion(db) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Row.swift b/Example/Pods/GRDB.swift/GRDB/Core/Row.swift deleted file mode 100755 index c204fde..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Row.swift +++ /dev/null @@ -1,1806 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// A database row. -public final class Row : Equatable, Hashable, RandomAccessCollection, ExpressibleByDictionaryLiteral, CustomStringConvertible, CustomDebugStringConvertible { - // It is not a violation of the Demeter law when another type uses this - // property, which is exposed for optimizations. - let impl: RowImpl - - /// Unless we are producing a row array, we use a single row when iterating - /// a statement: - /// - /// let rows = try Row.fetchCursor(db, sql: "SELECT ...") - /// let players = try Player.fetchAll(db, sql: "SELECT ...") - /// - /// This row keeps an unmanaged reference to the statement, and a handle to - /// the sqlite statement, so that we avoid many retain/release invocations. - /// - /// The statementRef is released in deinit. - let statementRef: Unmanaged? - @usableFromInline let sqliteStatement: SQLiteStatement? - var statement: SelectStatement? { - return statementRef?.takeUnretainedValue() - } - - /// The number of columns in the row. - public let count: Int - - /// A view on the prefetched associated rows. - /// - /// For example: - /// - /// let request = Author.including(all: Author.books) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(row) - /// // Prints [id:1 name:"Herman Melville"] - /// - /// let bookRows = row.prefetchedRows["books"] - /// print(bookRows[0]) - /// // Prints [id:42 title:"Moby-Dick"] - public internal(set) var prefetchedRows: PrefetchedRowsView = PrefetchedRowsView() - - // MARK: - Building rows - - /// Creates an empty row. - public convenience init() { - self.init(impl: EmptyRowImpl()) - } - - /// Creates a row from a dictionary of values. - public convenience init(_ dictionary: [String: DatabaseValueConvertible?]) { - self.init(impl: ArrayRowImpl(columns: dictionary.map { ($0, $1?.databaseValue ?? .null) })) - } - - /// Creates a row from [AnyHashable: Any]. - /// - /// The result is nil unless all dictionary keys are strings, and values - /// adopt DatabaseValueConvertible. - public convenience init?(_ dictionary: [AnyHashable: Any]) { - var initDictionary = [String: DatabaseValueConvertible?]() - for (key, value) in dictionary { - guard let columnName = key as? String else { - return nil - } - guard let dbValue = DatabaseValue(value: value) else { - return nil - } - initDictionary[columnName] = dbValue - } - self.init(initDictionary) - } - - /// Returns an immutable copy of the row. - /// - /// For performance reasons, rows fetched from a cursor are reused during - /// the iteration of a query: make sure to make a copy of it whenever you - /// want to keep a specific one: `row.copy()`. - public func copy() -> Row { - return impl.copiedRow(self) - } - - // MARK: - Not Public - - /// Returns true if and only if the row was fetched from a database. - var isFetched: Bool { - return impl.isFetched - } - - deinit { - statementRef?.release() - } - - /// Creates a row that maps an SQLite statement. Further calls to - /// sqlite3_step() modify the row. - /// - /// The row is implemented on top of StatementRowImpl, which grants *direct* - /// access to the SQLite statement. Iteration of the statement does modify - /// the row. - init(statement: SelectStatement) { - let statementRef = Unmanaged.passRetained(statement) // released in deinit - self.statementRef = statementRef - self.sqliteStatement = statement.sqliteStatement - self.impl = StatementRowImpl(sqliteStatement: statement.sqliteStatement, statementRef: statementRef) - self.count = Int(sqlite3_column_count(sqliteStatement)) - } - - /// Creates a row that maps an SQLite statement. Further calls to - /// sqlite3_step() modify the row. - init(sqliteStatement: SQLiteStatement) { - self.sqliteStatement = sqliteStatement - self.statementRef = nil - self.impl = SQLiteStatementRowImpl(sqliteStatement: sqliteStatement) - self.count = Int(sqlite3_column_count(sqliteStatement)) - } - - /// Creates a row that contain a copy of the current state of the - /// SQLite statement. Further calls to sqlite3_step() do not modify the row. - /// - /// The row is implemented on top of StatementCopyRowImpl, which *copies* - /// the values from the SQLite statement so that further iteration of the - /// statement does not modify the row. - convenience init(copiedFromSQLiteStatement sqliteStatement: SQLiteStatement, statementRef: Unmanaged) { - self.init(impl: StatementCopyRowImpl(sqliteStatement: sqliteStatement, columnNames: statementRef.takeUnretainedValue().columnNames)) - } - - init(impl: RowImpl) { - self.impl = impl - self.count = impl.count - self.statementRef = nil - self.sqliteStatement = nil - } -} - -extension Row { - - // MARK: - Columns - - /// The names of columns in the row. - /// - /// Columns appear in the same order as they occur as the `.0` member - /// of column-value pairs in `self`. - public var columnNames: LazyMapCollection { - return lazy.map { $0.0 } - } - - /// Returns true if and only if the row has that column. - /// - /// This method is case-insensitive. - public func hasColumn(_ columnName: String) -> Bool { - return index(ofColumn: columnName) != nil - } - - @usableFromInline - func index(ofColumn name: String) -> Int? { - return impl.index(ofColumn: name) - } -} - -extension Row { - - // MARK: - Extracting Values - - /// Fatal errors if index is out of bounds - @inlinable - func _checkIndex(_ index: Int, file: StaticString = #file, line: UInt = #line) { - GRDBPrecondition(index >= 0 && index < count, "row index out of range", file: file, line: line) - } - - /// Returns true if and only if one column contains a non-null value, or if - /// the row was fetched with a row adapter that defines a scoped row that - /// contains a non-null value. - /// - /// For example: - /// - /// let row = try Row.fetchOne(db, sql: "SELECT 'foo', 1")! - /// row.containsNonNullValue // true - /// - /// let row = try Row.fetchOne(db, sql: "SELECT NULL, NULL")! - /// row.containsNonNullValue // false - public var containsNonNullValue: Bool { - for i in (0.. Bool { - _checkIndex(index) - return impl.hasNull(atUncheckedIndex: index) - } - - /// Returns Int64, Double, String, Data or nil, depending on the value - /// stored at the given index. - /// - /// Indexes span from 0 for the leftmost column to (row.count - 1) for the - /// righmost column. - public subscript(_ index: Int) -> DatabaseValueConvertible? { - _checkIndex(index) - return impl.databaseValue(atUncheckedIndex: index).storage.value - } - - /// Returns the value at given index, converted to the requested type. - /// - /// Indexes span from 0 for the leftmost column to (row.count - 1) for the - /// righmost column. - /// - /// If the SQLite value is NULL, the result is nil. Otherwise the SQLite - /// value is converted to the requested type `Value`. Should this conversion - /// fail, a fatal error is raised. - @inlinable - public subscript(_ index: Int) -> Value? { - _checkIndex(index) - return Value.decodeIfPresent(from: self, atUncheckedIndex: index) - } - - /// Returns the value at given index, converted to the requested type. - /// - /// Indexes span from 0 for the leftmost column to (row.count - 1) for the - /// righmost column. - /// - /// If the SQLite value is NULL, the result is nil. Otherwise the SQLite - /// value is converted to the requested type `Value`. Should this conversion - /// fail, a fatal error is raised. - /// - /// This method exists as an optimization opportunity for types that adopt - /// StatementColumnConvertible. It *may* trigger SQLite built-in conversions - /// (see https://www.sqlite.org/datatype3.html). - @inlinable - public subscript(_ index: Int) -> Value? { - _checkIndex(index) - return Value.fastDecodeIfPresent(from: self, atUncheckedIndex: index) - } - - /// Returns the value at given index, converted to the requested type. - /// - /// Indexes span from 0 for the leftmost column to (row.count - 1) for the - /// righmost column. - /// - /// This method crashes if the fetched SQLite value is NULL, or if the - /// SQLite value can not be converted to `Value`. - @inlinable - public subscript(_ index: Int) -> Value { - _checkIndex(index) - return Value.decode(from: self, atUncheckedIndex: index) - } - - /// Returns the value at given index, converted to the requested type. - /// - /// Indexes span from 0 for the leftmost column to (row.count - 1) for the - /// righmost column. - /// - /// This method crashes if the fetched SQLite value is NULL, or if the - /// SQLite value can not be converted to `Value`. - /// - /// This method exists as an optimization opportunity for types that adopt - /// StatementColumnConvertible. It *may* trigger SQLite built-in conversions - /// (see https://www.sqlite.org/datatype3.html). - @inlinable - public subscript(_ index: Int) -> Value { - _checkIndex(index) - return Value.fastDecode(from: self, atUncheckedIndex: index) - } - - /// Returns Int64, Double, String, Data or nil, depending on the value - /// stored at the given column. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// The result is nil if the row does not contain the column. - public subscript(_ columnName: String) -> DatabaseValueConvertible? { - // IMPLEMENTATION NOTE - // This method has a single know use case: checking if the value is nil, - // as in: - // - // if row["foo"] != nil { ... } - // - // Without this method, the code above would not compile. - guard let index = index(ofColumn: columnName) else { - return nil - } - return impl.databaseValue(atUncheckedIndex: index).storage.value - } - - /// Returns the value at given column, converted to the requested type. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the column is missing or if the SQLite value is NULL, the result is - /// nil. Otherwise the SQLite value is converted to the requested type - /// `Value`. Should this conversion fail, a fatal error is raised. - @inlinable - public subscript(_ columnName: String) -> Value? { - guard let index = index(ofColumn: columnName) else { - return nil - } - return Value.decodeIfPresent(from: self, atUncheckedIndex: index) - } - - /// Returns the value at given column, converted to the requested type. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the column is missing or if the SQLite value is NULL, the result is - /// nil. Otherwise the SQLite value is converted to the requested type - /// `Value`. Should this conversion fail, a fatal error is raised. - /// - /// This method exists as an optimization opportunity for types that adopt - /// StatementColumnConvertible. It *may* trigger SQLite built-in conversions - /// (see https://www.sqlite.org/datatype3.html). - @inlinable - public subscript(_ columnName: String) -> Value? { - guard let index = index(ofColumn: columnName) else { - return nil - } - return Value.fastDecodeIfPresent(from: self, atUncheckedIndex: index) - } - - /// Returns the value at given column, converted to the requested type. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the row does not contain the column, a fatal error is raised. - /// - /// This method crashes if the fetched SQLite value is NULL, or if the - /// SQLite value can not be converted to `Value`. - @inlinable - public subscript(_ columnName: String) -> Value { - guard let index = index(ofColumn: columnName) else { - // No such column - fatalConversionError(to: Value.self, from: nil, in: self, atColumn: columnName) - } - return Value.decode(from: self, atUncheckedIndex: index) - } - - /// Returns the value at given column, converted to the requested type. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the row does not contain the column, a fatal error is raised. - /// - /// This method crashes if the fetched SQLite value is NULL, or if the - /// SQLite value can not be converted to `Value`. - /// - /// This method exists as an optimization opportunity for types that adopt - /// StatementColumnConvertible. It *may* trigger SQLite built-in conversions - /// (see https://www.sqlite.org/datatype3.html). - @inlinable - public subscript(_ columnName: String) -> Value { - guard let index = index(ofColumn: columnName) else { - // No such column - fatalConversionError(to: Value.self, from: nil, in: self, atColumn: columnName) - } - return Value.fastDecode(from: self, atUncheckedIndex: index) - } - - /// Returns Int64, Double, String, NSData or nil, depending on the value - /// stored at the given column. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// The result is nil if the row does not contain the column. - @inlinable - public subscript(_ column: Column) -> DatabaseValueConvertible? { - return self[column.name] - } - - /// Returns the value at given column, converted to the requested type. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the column is missing or if the SQLite value is NULL, the result is - /// nil. Otherwise the SQLite value is converted to the requested type - /// `Value`. Should this conversion fail, a fatal error is raised. - @inlinable - public subscript(_ column: Column) -> Value? { - return self[column.name] - } - - /// Returns the value at given column, converted to the requested type. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the column is missing or if the SQLite value is NULL, the result is - /// nil. Otherwise the SQLite value is converted to the requested type - /// `Value`. Should this conversion fail, a fatal error is raised. - /// - /// This method exists as an optimization opportunity for types that adopt - /// StatementColumnConvertible. It *may* trigger SQLite built-in conversions - /// (see https://www.sqlite.org/datatype3.html). - @inlinable - public subscript(_ column: Column) -> Value? { - return self[column.name] - } - - /// Returns the value at given column, converted to the requested type. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the row does not contain the column, a fatal error is raised. - /// - /// This method crashes if the fetched SQLite value is NULL, or if the - /// SQLite value can not be converted to `Value`. - @inlinable - public subscript(_ column: Column) -> Value { - return self[column.name] - } - - /// Returns the value at given column, converted to the requested type. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the row does not contain the column, a fatal error is raised. - /// - /// This method crashes if the fetched SQLite value is NULL, or if the - /// SQLite value can not be converted to `Value`. - /// - /// This method exists as an optimization opportunity for types that adopt - /// StatementColumnConvertible. It *may* trigger SQLite built-in conversions - /// (see https://www.sqlite.org/datatype3.html). - @inlinable - public subscript(_ column: Column) -> Value { - return self[column.name] - } - - /// Returns the optional Data at given index. - /// - /// Indexes span from 0 for the leftmost column to (row.count - 1) for the - /// righmost column. - /// - /// If the SQLite value is NULL, the result is nil. If the SQLite value can - /// not be converted to Data, a fatal error is raised. - /// - /// The returned data does not owns its bytes: it must not be used longer - /// than the row's lifetime. - public func dataNoCopy(atIndex index: Int) -> Data? { - _checkIndex(index) - return impl.dataNoCopy(atUncheckedIndex: index) - } - - /// Returns the optional Data at given column. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the column is missing or if the SQLite value is NULL, the result is - /// nil. If the SQLite value can not be converted to Data, a fatal error - /// is raised. - /// - /// The returned data does not owns its bytes: it must not be used longer - /// than the row's lifetime. - public func dataNoCopy(named columnName: String) -> Data? { - guard let index = index(ofColumn: columnName) else { - return nil - } - return impl.dataNoCopy(atUncheckedIndex: index) - } - - /// Returns the optional `NSData` at given column. - /// - /// Column name lookup is case-insensitive, and when several columns have - /// the same name, the leftmost column is considered. - /// - /// If the column is missing or if the SQLite value is NULL, the result is - /// nil. If the SQLite value can not be converted to NSData, a fatal error - /// is raised. - /// - /// The returned data does not owns its bytes: it must not be used longer - /// than the row's lifetime. - public func dataNoCopy(_ column: Column) -> Data? { - return dataNoCopy(named: column.name) - } -} - -extension Row { - - // MARK: - Extracting DatabaseValue - - /// The database values in the row. - /// - /// Values appear in the same order as they occur as the `.1` member - /// of column-value pairs in `self`. - public var databaseValues: LazyMapCollection { - return lazy.map { $0.1 } - } -} - -extension Row { - - // MARK: - Extracting Records - - /// Returns the record associated with the given scope. - /// - /// For example: - /// - /// let request = Book.including(required: Book.author) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(Book(row: row).title) - /// // Prints "Moby-Dick" - /// - /// let author: Author = row["author"] - /// print(author.name) - /// // Prints "Herman Melville" - /// - /// Associated records stored in nested associations are available, too: - /// - /// let request = Book.including(required: Book.author.including(required: Author.country)) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(Book(row: row).title) - /// // Prints "Moby-Dick" - /// - /// let country: Country = row["country"] - /// print(country.name) - /// // Prints "United States" - /// - /// A fatal error is raised if the scope is not available, or contains only - /// null values. - /// - /// See https://github.com/groue/GRDB.swift/blob/master/README.md#joined-queries-support - /// for more information. - public subscript(_ scope: String) -> Record { - guard let scopedRow = scopesTree[scope] else { - // Programmer error - let names = scopesTree.names - if names.isEmpty { - fatalError("missing scope `\(scope)` (row: \(self))") - } else { - fatalError("missing scope `\(scope)` (row: \(self), available scopes: \(names.sorted()))") - } - } - guard scopedRow.containsNonNullValue else { - // Programmer error - fatalError("scope `\(scope)` only contains null values (row: \(self))") - } - return Record(row: scopedRow) - } - - /// Returns the eventual record associated with the given scope. - /// - /// For example: - /// - /// let request = Book.including(optional: Book.author) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(Book(row: row).title) - /// // Prints "Moby-Dick" - /// - /// let author: Author? = row["author"] - /// print(author.name) - /// // Prints "Herman Melville" - /// - /// Associated records stored in nested associations are available, too: - /// - /// let request = Book.including(optional: Book.author.including(optional: Author.country)) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(Book(row: row).title) - /// // Prints "Moby-Dick" - /// - /// let country: Country? = row["country"] - /// print(country.name) - /// // Prints "United States" - /// - /// Nil is returned if the scope is not available, or contains only - /// null values. - /// - /// See https://github.com/groue/GRDB.swift/blob/master/README.md#joined-queries-support - /// for more information. - public subscript(_ scope: String) -> Record? { - guard let scopedRow = scopesTree[scope], scopedRow.containsNonNullValue else { - return nil - } - return Record(row: scopedRow) - } - - /// Returns the records encoded in the given prefetched rows. - /// - /// For example: - /// - /// let request = Author.including(all: Author.books) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(Author(row: row).name) - /// // Prints "Herman Melville" - /// - /// let books: [Book] = row["books"] - /// print(books[0].title) - /// // Prints "Moby-Dick" - public subscript(_ key: String) - -> Collection - where - Collection: RangeReplaceableCollection, - Collection.Element: FetchableRecord - { - guard let rows = prefetchedRows[key] else { - // Programmer error - let keys = prefetchedRows.keys - if keys.isEmpty { - fatalError("missing key for prefetched rows `\(key)` (row: \(self))") - } else { - fatalError("missing key for prefetched rows `\(key)` (row: \(self), available keys: \(keys.sorted()))") - } - } - var collection = Collection() - collection.reserveCapacity(rows.count) - for row in rows { - collection.append(Collection.Element(row: row)) - } - return collection - } - - /// Returns the set of records encoded in the given prefetched rows. - /// - /// For example: - /// - /// let request = Author.including(all: Author.books) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(Author(row: row).name) - /// // Prints "Herman Melville" - /// - /// let books: Set = row["books"] - /// print(books.first!.title) - /// // Prints "Moby-Dick" - public subscript(_ key: String) -> Set { - guard let rows = prefetchedRows[key] else { - // Programmer error - let keys = prefetchedRows.keys - if keys.isEmpty { - fatalError("missing key for prefetched rows `\(key)` (row: \(self))") - } else { - fatalError("missing key for prefetched rows `\(key)` (row: \(self), available keys: \(keys.sorted()))") - } - } - var set = Set(minimumCapacity: rows.count) - for row in rows { - set.insert(Record(row: row)) - } - return set - } -} - -extension Row { - - // MARK: - Scopes - - /// Returns a view on the scopes defined by row adapters. - /// - /// For example: - /// - /// // Define a tree of nested scopes - /// let adapter = ScopeAdapter([ - /// "foo": RangeRowAdapter(0..<1), - /// "bar": RangeRowAdapter(1..<2).addingScopes([ - /// "baz" : RangeRowAdapter(2..<3)])]) - /// - /// // Fetch - /// let sql = "SELECT 1 AS foo, 2 AS bar, 3 AS baz" - /// let row = try Row.fetchOne(db, sql: sql, adapter: adapter)! - /// - /// row.scopes.count // 2 - /// row.scopes.names // ["foo", "bar"] - /// - /// row.scopes["foo"] // [foo:1] - /// row.scopes["bar"] // [bar:2] - /// row.scopes["baz"] // nil - public var scopes: ScopesView { - return impl.scopes(prefetchedRows: prefetchedRows) - } - - /// Returns a view on the scopes tree defined by row adapters. - /// - /// For example: - /// - /// // Define a tree of nested scopes - /// let adapter = ScopeAdapter([ - /// "foo": RangeRowAdapter(0..<1), - /// "bar": RangeRowAdapter(1..<2).addingScopes([ - /// "baz" : RangeRowAdapter(2..<3)])]) - /// - /// // Fetch - /// let sql = "SELECT 1 AS foo, 2 AS bar, 3 AS baz" - /// let row = try Row.fetchOne(db, sql: sql, adapter: adapter)! - /// - /// row.scopesTree.names // ["foo", "bar", "baz"] - /// - /// row.scopesTree["foo"] // [foo:1] - /// row.scopesTree["bar"] // [bar:2] - /// row.scopesTree["baz"] // [baz:3] - public var scopesTree: ScopesTreeView { - return ScopesTreeView(scopes: scopes) - } - - /// Returns a copy of the row, without any scopes. - /// - /// This property can turn out useful when you want to test the content of - /// adapted rows, such as rows fetched from joined requests. - /// - /// let row = ... - /// // Failure because row equality tests for row scopes: - /// XCTAssertEqual(row, ["id": 1, "name": "foo"]) - /// // Success: - /// XCTAssertEqual(row.unscoped, ["id": 1, "name": "foo"]) - public var unscoped: Row { - var row = impl.unscopedRow(self) - - // Remove prefetchedRows - if row.prefetchedRows.isEmpty == false { - // Make sure we build another Row instance - row = Row(impl: row.copy().impl) - assert(row !== self) - assert(row.prefetchedRows.isEmpty) - } - return row - } - - /// Return the raw row fetched from the database. - /// - /// This property can turn out useful when you debug the consumption of - /// adapted rows, such as rows fetched from joined requests. - public var unadapted: Row { - return impl.unadaptedRow(self) - } -} - -// MARK: - RowCursor - -/// A cursor of database rows. For example: -/// -/// try dbQueue.read { db in -/// let rows: RowCursor = try Row.fetchCursor(db, sql: "SELECT * FROM player") -/// } -public final class RowCursor : Cursor { - public let statement: SelectStatement - @usableFromInline let _sqliteStatement: SQLiteStatement - @usableFromInline let _row: Row // Reused for performance - @usableFromInline var _done = false - - init(statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws { - self.statement = statement - self._row = try Row(statement: statement).adapted(with: adapter, layout: statement) - self._sqliteStatement = statement.sqliteStatement - statement.reset(withArguments: arguments) - } - - deinit { - // Statement reset fails when sqlite3_step has previously failed. - // Just ignore reset error. - try? statement.reset() - } - - /// :nodoc: - @inlinable - public func next() throws -> Row? { - if _done { - // make sure this instance never yields a value again, even if the - // statement is reset by another cursor. - return nil - } - switch sqlite3_step(_sqliteStatement) { - case SQLITE_DONE: - _done = true - return nil - case SQLITE_ROW: - return _row - case let code: - try statement.didFail(withResultCode: code) - } - } -} - -extension Row { - - // MARK: - Fetching From SelectStatement - - /// Returns a cursor over rows fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT ...") - /// let rows = try Row.fetchCursor(statement) // RowCursor - /// while let row = try rows.next() { // Row - /// let id: Int64 = row[0] - /// let name: String = row[1] - /// } - /// - /// Fetched rows are reused during the cursor iteration: don't turn a row - /// cursor into an array with `Array(rows)` or `rows.filter { ... }` since - /// you would not get the distinct rows you expect. Use `Row.fetchAll(...)` - /// instead. - /// - /// For the same reason, make sure you make a copy whenever you extract a - /// row for later use: `row.copy()`. - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> RowCursor { - return try RowCursor(statement: statement, arguments: arguments, adapter: adapter) - } - - /// Returns an array of rows fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT ...") - /// let rows = try Row.fetchAll(statement) - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Row] { - // The cursor reuses a single mutable row. Return immutable copies. - return try Array(fetchCursor(statement, arguments: arguments, adapter: adapter).map { $0.copy() }) - } - - /// Returns a single row fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT ...") - /// let row = try Row.fetchOne(statement) - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An optional row. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> Row? { - let cursor = try fetchCursor(statement, arguments: arguments, adapter: adapter) - // Keep cursor alive until we can copy the fetched row - return try withExtendedLifetime(cursor) { - try cursor.next().map { $0.copy() } - } - } -} - -extension Row { - - // MARK: - Fetching From SQL - - /// Returns a cursor over rows fetched from an SQL query. - /// - /// let rows = try Row.fetchCursor(db, sql: "SELECT id, name FROM player") // RowCursor - /// while let row = try rows.next() { // Row - /// let id: Int64 = row[0] - /// let name: String = row[1] - /// } - /// - /// Fetched rows are reused during the cursor iteration: don't turn a row - /// cursor into an array with `Array(rows)` or `rows.filter { ... }` since - /// you would not get the distinct rows you expect. Use `Row.fetchAll(...)` - /// instead. - /// - /// For the same reason, make sure you make a copy whenever you extract a - /// row for later use: `row.copy()`. - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> RowCursor { - return try fetchCursor(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns an array of rows fetched from an SQL query. - /// - /// let rows = try Row.fetchAll(db, sql: "SELECT id, name FROM player") // [Row] - /// for row in rows { - /// let id: Int64 = row[0] - /// let name: String = row[1] - /// } - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> [Row] { - return try fetchAll(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns a single row fetched from an SQL query. - /// - /// let row = try Row.fetchOne(db, sql: "SELECT id, name FROM player") // Row? - /// if let row = row { - /// let id: Int64 = row[0] - /// let name: String = row[1] - /// } - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An optional row. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> Row? { - return try fetchOne(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } -} - -extension Row { - - // MARK: - Fetching From FetchRequest - - /// Returns a cursor over rows fetched from a fetch request. - /// - /// let request = Player.all() - /// let rows = try Row.fetchCursor(db, request) // RowCursor - /// while let row = try rows.next() { // Row - /// let id: Int64 = row["id"] - /// let name: String = row["name"] - /// } - /// - /// Fetched rows are reused during the cursor iteration: don't turn a row - /// cursor into an array with `Array(rows)` or `rows.filter { ... }` since - /// you would not get the distinct rows you expect. Use `Row.fetchAll(...)` - /// instead. - /// - /// For the same reason, make sure you make a copy whenever you extract a - /// row for later use: `row.copy()`. - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: A cursor over fetched rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, _ request: R) throws -> RowCursor { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchCursor(statement, adapter: adapter) - } - - /// Returns an array of rows fetched from a fetch request. - /// - /// let request = Player.all() - /// let rows = try Row.fetchAll(db, request) - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An array of rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, _ request: R) throws -> [Row] { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchAll(statement, adapter: adapter) - } - - /// Returns a single row fetched from a fetch request. - /// - /// let request = Player.filter(key: 1) - /// let row = try Row.fetchOne(db, request) - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An optional row. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, _ request: R) throws -> Row? { - let (statement, adapter) = try request.prepare(db, forSingleResult: true) - return try fetchOne(statement, adapter: adapter) - } -} - -extension FetchRequest where RowDecoder == Row { - - // MARK: Fetching Rows - - /// A cursor over fetched rows. - /// - /// let request: ... // Some FetchRequest that fetches Row - /// let rows = try request.fetchCursor(db) // RowCursor - /// while let row = try rows.next() { // Row - /// let id: Int64 = row[0] - /// let name: String = row[1] - /// } - /// - /// Fetched rows are reused during the cursor iteration: don't turn a row - /// cursor into an array with `Array(rows)` or `rows.filter { ... }` since - /// you would not get the distinct rows you expect. Use `Row.fetchAll(...)` - /// instead. - /// - /// For the same reason, make sure you make a copy whenever you extract a - /// row for later use: `row.copy()`. - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameter db: A database connection. - /// - returns: A cursor over fetched rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchCursor(_ db: Database) throws -> RowCursor { - return try Row.fetchCursor(db, self) - } - - /// An array of fetched rows. - /// - /// let request: ... // Some FetchRequest that fetches Row - /// let rows = try request.fetchAll(db) - /// - /// - parameter db: A database connection. - /// - returns: An array of fetched rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchAll(_ db: Database) throws -> [Row] { - return try Row.fetchAll(db, self) - } - - /// The first fetched row. - /// - /// let request: ... // Some FetchRequest that fetches Row - /// let row = try request.fetchOne(db) - /// - /// - parameter db: A database connection. - /// - returns: An optional row. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchOne(_ db: Database) throws -> Row? { - return try Row.fetchOne(db, self) - } -} - -// ExpressibleByDictionaryLiteral -extension Row { - - /// Creates a row initialized with elements. Column order is preserved, and - /// duplicated columns names are allowed. - /// - /// let row: Row = ["foo": 1, "foo": "bar", "baz": nil] - /// print(row) - /// // Prints [foo:1 foo:"bar" baz:NULL] - public convenience init(dictionaryLiteral elements: (String, DatabaseValueConvertible?)...) { - self.init(impl: ArrayRowImpl(columns: elements.map { ($0, $1?.databaseValue ?? .null) })) - } -} - -// RandomAccessCollection -extension Row { - - // MARK: - Row as a Collection of (ColumnName, DatabaseValue) Pairs - - /// The index of the first (ColumnName, DatabaseValue) pair. - /// :nodoc: - public var startIndex: RowIndex { - return Index(0) - } - - /// The "past-the-end" index, successor of the index of the last - /// (ColumnName, DatabaseValue) pair. - /// :nodoc: - public var endIndex: RowIndex { - return Index(count) - } - - /// Accesses the (ColumnName, DatabaseValue) pair at given index. - public subscript(position: RowIndex) -> (String, DatabaseValue) { - let index = position.index - _checkIndex(index) - return ( - impl.columnName(atUncheckedIndex: index), - impl.databaseValue(atUncheckedIndex: index)) - } -} - -// Equatable -extension Row { - - /// Returns true if and only if both rows have the same columns and values, - /// in the same order. Columns are compared in a case-sensitive way. - /// :nodoc: - public static func == (lhs: Row, rhs: Row) -> Bool { - if lhs === rhs { - return true - } - - guard lhs.count == rhs.count else { - return false - } - - for ((lcol, lval), (rcol, rval)) in zip(lhs, rhs) { - guard lcol == rcol else { - return false - } - guard lval == rval else { - return false - } - } - - let lscopeNames = lhs.scopes.names - let rscopeNames = rhs.scopes.names - guard lscopeNames == rscopeNames else { - return false - } - - for name in lscopeNames { - let lscope = lhs.scopes[name] - let rscope = rhs.scopes[name] - guard lscope == rscope else { - return false - } - } - - guard lhs.prefetchedRows == rhs.prefetchedRows else { - return false - } - - return true - } -} - -// Hashable -extension Row { - /// :nodoc: - public func hash(into hasher: inout Hasher) { - hasher.combine(count) - for (column, dbValue) in self { - hasher.combine(column) - hasher.combine(dbValue) - } - } -} - -// CustomStringConvertible & CustomDebugStringConvertible -extension Row { - /// :nodoc: - public var description: String { - return "[" - + map { (column, dbValue) in "\(column):\(dbValue)" }.joined(separator: " ") - + "]" - } - - /// :nodoc: - public var debugDescription: String { - return debugDescription(level: 0) - } - - private func debugDescription(level: Int) -> String { - if level == 0 && self == self.unadapted && prefetchedRows.prefetches.isEmpty { - return description - } - let prefix = repeatElement(" ", count: level + 1).joined(separator: "") - var str = "" - if level == 0 { - str = "▿ " + description - let unadapted = self.unadapted - if self != unadapted { - str += "\n" + prefix + "unadapted: " + unadapted.description - } - } else { - str = description - } - for (name, scopedRow) in scopes.sorted(by: { $0.name < $1.name }) { - str += "\n" + prefix + "- " + name + ": " + scopedRow.debugDescription(level: level + 1) - } - for key in prefetchedRows.keys.sorted() { - let rows = prefetchedRows[key]! - let prefetchedRowsDescription: String - switch rows.count { - case 0: - prefetchedRowsDescription = "0 row" - case 1: - prefetchedRowsDescription = "1 row" - case let count: - prefetchedRowsDescription = "\(count) rows" - } - str += "\n" + prefix + "+ " + key + ": \(prefetchedRowsDescription)" - } - - return str - } -} - - -// MARK: - RowIndex - -/// Indexes to (ColumnName, DatabaseValue) pairs in a database row. -public struct RowIndex : Comparable, Strideable { - let index: Int - init(_ index: Int) { self.index = index } -} - -// Comparable -extension RowIndex { - /// :nodoc: - public static func == (lhs: RowIndex, rhs: RowIndex) -> Bool { - return lhs.index == rhs.index - } - - /// :nodoc: - public static func < (lhs: RowIndex, rhs: RowIndex) -> Bool { - return lhs.index < rhs.index - } -} - -// Strideable: support for Row: RandomAccessCollection -extension RowIndex { - /// :nodoc: - public func distance(to other: RowIndex) -> Int { - return other.index - index - } - - /// :nodoc: - public func advanced(by n: Int) -> RowIndex { - return RowIndex(index + n) - } -} - -// MARK: - Row.ScopesView - -extension Row { - /// A view of the scopes defined by row adapters. It is a collection of - /// tuples made of a scope name and a scoped row, which behaves like a - /// dictionary. - /// - /// For example: - /// - /// // Define a tree of nested scopes - /// let adapter = ScopeAdapter([ - /// "foo": RangeRowAdapter(0..<1), - /// "bar": RangeRowAdapter(1..<2).addingScopes([ - /// "baz" : RangeRowAdapter(2..<3)])]) - /// - /// // Fetch - /// let sql = "SELECT 1 AS foo, 2 AS bar, 3 AS baz" - /// let row = try Row.fetchOne(db, sql: sql, adapter: adapter)! - /// - /// row.scopes.count // 2 - /// row.scopes.names // ["foo", "bar"] - /// - /// row.scopes["foo"] // [foo:1] - /// row.scopes["bar"] // [bar:2] - /// row.scopes["baz"] // nil - public struct ScopesView: Collection { - public typealias Index = Dictionary.Index - private let row: Row - private let scopes: [String: LayoutedRowAdapter] - private let prefetchedRows: Row.PrefetchedRowsView - - /// The scopes defined on this row. - public var names: Dictionary.Keys { - return scopes.keys - } - - init() { - self.init(row: Row(), scopes: [:], prefetchedRows: Row.PrefetchedRowsView()) - } - - init(row: Row, scopes: [String: LayoutedRowAdapter], prefetchedRows: Row.PrefetchedRowsView) { - self.row = row - self.scopes = scopes - self.prefetchedRows = prefetchedRows - } - - /// :nodoc: - public var startIndex: Index { - return scopes.startIndex - } - - /// :nodoc: - public var endIndex: Index { - return scopes.endIndex - } - - /// :nodoc: - public func index(after i: Index) -> Index { - return scopes.index(after: i) - } - - /// :nodoc: - public subscript(position: Index) -> (name: String, row: Row) { - let (name, adapter) = scopes[position] - let adaptedRow = Row(base: row, adapter: adapter) - if let prefetch = prefetchedRows.prefetches[name] { - // Let the adapted row access its own prefetched rows. - // Use case: - // - // let request = A.including(required: A.b.including(all: B.c)) - // let row = try Row.fetchOne(db, request)! - // row.prefetchedRows["cs"] // Some array - // row.scopes["b"]!.prefetchedRows["cs"] // The same array - adaptedRow.prefetchedRows = Row.PrefetchedRowsView(prefetches: prefetch.prefetches) - } - return (name: name, row: adaptedRow) - } - - /// Returns the row associated with the given scope, or nil if the - /// scope is not defined. - public subscript(_ name: String) -> Row? { - return scopes.index(forKey: name).map { self[$0].row } - } - } -} - -// MARK: - Row.ScopesTreeView - -extension Row { - - /// A view on the scopes tree defined by row adapters. - /// - /// For example: - /// - /// // Define a tree of nested scopes - /// let adapter = ScopeAdapter([ - /// "foo": RangeRowAdapter(0..<1), - /// "bar": RangeRowAdapter(1..<2).addingScopes([ - /// "baz" : RangeRowAdapter(2..<3)])]) - /// - /// // Fetch - /// let sql = "SELECT 1 AS foo, 2 AS bar, 3 AS baz" - /// let row = try Row.fetchOne(db, sql: sql, adapter: adapter)! - /// - /// row.scopesTree.names // ["foo", "bar", "baz"] - /// - /// row.scopesTree["foo"] // [foo:1] - /// row.scopesTree["bar"] // [bar:2] - /// row.scopesTree["baz"] // [baz:3] - public struct ScopesTreeView { - let scopes: ScopesView - - /// The scopes defined on this row, recursively. - public var names: Set { - var names = Set() - for (name, row) in scopes { - names.insert(name) - names.formUnion(row.scopesTree.names) - } - return names - } - - /// Returns the row associated with the given scope. - /// - /// For example: - /// - /// let request = Book.including(required: Book.author) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(row) - /// // Prints [id:42 title:"Moby-Dick"] - /// - /// let authorRow = row.scopesTree["author"] - /// print(authorRow) - /// // Prints [id:1 name:"Herman Melville"] - /// - /// Associated rows stored in nested associations are available, too: - /// - /// let request = Book.including(required: Book.author.including(required: Author.country)) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(row) - /// // Prints [id:42 title:"Moby-Dick"] - /// - /// let countryRow = row.scopesTree["country"] - /// print(countryRow) - /// // Prints [code:"US" name:"United States"] - /// - /// Nil is returned if the scope is not available. - public subscript(_ name: String) -> Row? { - var fifo = Array(scopes) - while !fifo.isEmpty { - let scope = fifo.removeFirst() - if scope.name == name { - return scope.row - } - fifo.append(contentsOf: scope.row.scopes) - } - return nil - } - } -} - -// MARK: - Row.PrefetchedRowsView - -extension Row { - fileprivate struct Prefetch: Equatable { - // Nil for intermediate associations - var rows: [Row]? - // OrderedDictionary so that breadth-first search gives a consistent result - // (we preserve the ordering of associations in the request) - var prefetches: OrderedDictionary - } - - /// A view on the prefetched associated rows. - /// - /// For example: - /// - /// let request = Author.including(all: Author.books) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(row) - /// // Prints [id:1 name:"Herman Melville"] - /// - /// let bookRows = row.prefetchedRows["books"] - /// print(bookRows[0]) - /// // Prints [id:42 title:"Moby-Dick"] - public struct PrefetchedRowsView: Equatable { - // OrderedDictionary so that breadth-first search gives a consistent result - // (we preserve the ordering of associations in the request) - fileprivate var prefetches: OrderedDictionary = [:] - - /// True if there is no prefetched associated rows. - public var isEmpty: Bool { - return prefetches.isEmpty - } - - /// The keys for available prefetched rows - /// - /// For example: - /// - /// let request = Author.including(all: Author.books) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(row.prefetchedRows.keys) - /// // Prints ["books"] - public var keys: Set { - var result: Set = [] - var fifo = Array(prefetches) - while !fifo.isEmpty { - let (prefetchKey, prefetch) = fifo.removeFirst() - if prefetch.rows != nil { - result.insert(prefetchKey) - } - fifo.append(contentsOf: prefetch.prefetches) - } - return result - } - - /// Returns the prefetched rows associated with the given key. - /// - /// For example: - /// - /// let request = Author.including(all: Author.books) - /// let row = try Row.fetchOne(db, request)! - /// - /// print(row) - /// // Prints [id:1 name:"Herman Melville"] - /// - /// let bookRows = row.prefetchedRows["books"] - /// print(bookRows[0]) - /// // Prints [id:42 title:"Moby-Dick"] - /// - /// Prefetched rows stored in nested "to-one" associations are - /// available, too. - /// - /// Nil is returned if the key is not available. - public subscript(_ key: String) -> [Row]? { - var fifo = Array(prefetches) - while !fifo.isEmpty { - let (prefetchKey, prefetch) = fifo.removeFirst() - if prefetchKey == key { - return prefetch.rows - } - fifo.append(contentsOf: prefetch.prefetches) - } - return nil - } - - mutating func setRows(_ rows: [Row], forKeyPath keyPath: [String]) { - prefetches.setRows(rows, forKeyPath: keyPath) - } - } -} - -extension OrderedDictionary where Key == String, Value == Row.Prefetch { - fileprivate mutating func setRows(_ rows: [Row], forKeyPath keyPath: [String]) { - var keyPath = keyPath - let key = keyPath.removeFirst() - if keyPath.isEmpty { - self[key, default: Row.Prefetch(rows: nil, prefetches: [:])].rows = rows - } else { - self[key, default: Row.Prefetch(rows: nil, prefetches: [:])].prefetches.setRows(rows, forKeyPath: keyPath) - } - } -} - -// MARK: - RowImpl - -// The protocol for Row underlying implementation -protocol RowImpl { - var count: Int { get } - var isFetched: Bool { get } - func scopes(prefetchedRows: Row.PrefetchedRowsView) -> Row.ScopesView - func columnName(atUncheckedIndex index: Int) -> String - func hasNull(atUncheckedIndex index:Int) -> Bool - func databaseValue(atUncheckedIndex index: Int) -> DatabaseValue - func fastDecode(_ type: Value.Type, atUncheckedIndex index: Int) -> Value - func fastDecodeIfPresent(_ type: Value.Type, atUncheckedIndex index: Int) -> Value? - func dataNoCopy(atUncheckedIndex index:Int) -> Data? - - /// Returns the index of the leftmost column that matches *name* (case-insensitive) - func index(ofColumn name: String) -> Int? - - // row.impl is guaranteed to be self. - func unscopedRow(_ row: Row) -> Row - func unadaptedRow(_ row: Row) -> Row - func copiedRow(_ row: Row) -> Row -} - -extension RowImpl { - func copiedRow(_ row: Row) -> Row { - // unless customized, assume unsafe and unadapted row - return Row(impl: ArrayRowImpl(columns: row.map { $0 })) - } - - func unscopedRow(_ row: Row) -> Row { - // unless customized, assume unadapted row (see AdaptedRowImpl for customization) - return row - } - - func unadaptedRow(_ row: Row) -> Row { - // unless customized, assume unadapted row (see AdaptedRowImpl for customization) - return row - } - - func scopes(prefetchedRows: Row.PrefetchedRowsView) -> Row.ScopesView { - // unless customized, assume unuscoped row (see AdaptedRowImpl for customization) - return Row.ScopesView() - } - - func hasNull(atUncheckedIndex index:Int) -> Bool { - // unless customized, use slow check (see StatementRowImpl and AdaptedRowImpl for customization) - return databaseValue(atUncheckedIndex: index).isNull - } - - func fastDecode( - _ type: Value.Type, - atUncheckedIndex index: Int) -> Value - { - // unless customized, use slow decoding (see StatementRowImpl and AdaptedRowImpl for customization) - return Value.decode( - from: databaseValue(atUncheckedIndex: index), - conversionContext: ValueConversionContext(Row(impl: self)).atColumn(index)) - } - - func fastDecodeIfPresent( - _ type: Value.Type, - atUncheckedIndex index: Int) -> Value? - { - // unless customized, use slow decoding (see StatementRowImpl and AdaptedRowImpl for customization) - return Value.decodeIfPresent( - from: databaseValue(atUncheckedIndex: index), - conversionContext: ValueConversionContext(Row(impl: self)).atColumn(index)) - } - - func dataNoCopy(atUncheckedIndex index:Int) -> Data? { - // unless customized, copy data (see StatementRowImpl and AdaptedRowImpl for customization) - return Data.decodeIfPresent( - from: databaseValue(atUncheckedIndex: index), - conversionContext: ValueConversionContext(Row(impl: self)).atColumn(index)) - } -} - -// TODO: merge with StatementCopyRowImpl eventually? -/// See Row.init(dictionary:) -private struct ArrayRowImpl : RowImpl { - let columns: [(String, DatabaseValue)] - - init(columns: [(String, DatabaseValue)]) { - self.columns = columns - } - - var count: Int { - return columns.count - } - - var isFetched: Bool { - return false - } - - func databaseValue(atUncheckedIndex index: Int) -> DatabaseValue { - return columns[index].1 - } - - func columnName(atUncheckedIndex index: Int) -> String { - return columns[index].0 - } - - func index(ofColumn name: String) -> Int? { - let lowercaseName = name.lowercased() - return columns.firstIndex { (column, _) in column.lowercased() == lowercaseName } - } - - func copiedRow(_ row: Row) -> Row { - return row - } -} - - -// TODO: merge with ArrayRowImpl eventually? -/// See Row.init(copiedFromStatementRef:sqliteStatement:) -private struct StatementCopyRowImpl : RowImpl { - let dbValues: ContiguousArray - let columnNames: [String] - - init(sqliteStatement: SQLiteStatement, columnNames: [String]) { - let sqliteStatement = sqliteStatement - self.dbValues = ContiguousArray((0.. DatabaseValue { - return dbValues[index] - } - - func columnName(atUncheckedIndex index: Int) -> String { - return columnNames[index] - } - - func index(ofColumn name: String) -> Int? { - let lowercaseName = name.lowercased() - return columnNames.firstIndex { $0.lowercased() == lowercaseName } - } - - func copiedRow(_ row: Row) -> Row { - return row - } -} - - -/// See Row.init(statement:) -private struct StatementRowImpl : RowImpl { - let statementRef: Unmanaged - let sqliteStatement: SQLiteStatement - let lowercaseColumnIndexes: [String: Int] - - init(sqliteStatement: SQLiteStatement, statementRef: Unmanaged) { - self.statementRef = statementRef - self.sqliteStatement = sqliteStatement - // Optimize row[columnName] - let lowercaseColumnNames = (0.. Bool { - // Avoid extracting values, because this modifies the SQLite statement. - return sqlite3_column_type(sqliteStatement, Int32(index)) == SQLITE_NULL - } - - func dataNoCopy(atUncheckedIndex index:Int) -> Data? { - guard sqlite3_column_type(sqliteStatement, Int32(index)) != SQLITE_NULL else { - return nil - } - guard let bytes = sqlite3_column_blob(sqliteStatement, Int32(index)) else { - return Data() - } - let count = Int(sqlite3_column_bytes(sqliteStatement, Int32(index))) - return Data(bytesNoCopy: UnsafeMutableRawPointer(mutating: bytes), count: count, deallocator: .none) - } - - func databaseValue(atUncheckedIndex index: Int) -> DatabaseValue { - return DatabaseValue(sqliteStatement: sqliteStatement, index: Int32(index)) - } - - func fastDecode( - _ type: Value.Type, - atUncheckedIndex index: Int) -> Value - { - return Value.fastDecode(from: sqliteStatement, atUncheckedIndex: Int32(index)) - } - - func fastDecodeIfPresent( - _ type: Value.Type, - atUncheckedIndex index: Int) -> Value? - { - return Value.fastDecodeIfPresent(from: sqliteStatement, atUncheckedIndex: Int32(index)) - } - - func columnName(atUncheckedIndex index: Int) -> String { - return statementRef.takeUnretainedValue().columnNames[index] - } - - func index(ofColumn name: String) -> Int? { - if let index = lowercaseColumnIndexes[name] { - return index - } - return lowercaseColumnIndexes[name.lowercased()] - } - - func copiedRow(_ row: Row) -> Row { - return Row(copiedFromSQLiteStatement: sqliteStatement, statementRef: statementRef) - } -} - -// This one is not optimized at all, since it is only used in fatal conversion errors, so far -private struct SQLiteStatementRowImpl : RowImpl { - let sqliteStatement: SQLiteStatement - var count: Int { return Int(sqlite3_column_count(sqliteStatement)) } - var isFetched: Bool { return true } - - func columnName(atUncheckedIndex index: Int) -> String { - return String(cString: sqlite3_column_name(sqliteStatement, Int32(index))) - } - - func databaseValue(atUncheckedIndex index: Int) -> DatabaseValue { - return DatabaseValue(sqliteStatement: sqliteStatement, index: Int32(index)) - } - - func index(ofColumn name: String) -> Int? { - let name = name.lowercased() - for index in 0.. DatabaseValue { - // Programmer error - fatalError("row index out of range") - } - - func columnName(atUncheckedIndex index: Int) -> String { - // Programmer error - fatalError("row index out of range") - } - - func index(ofColumn name: String) -> Int? { - return nil - } - - func copiedRow(_ row: Row) -> Row { - return row - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/RowAdapter.swift b/Example/Pods/GRDB.swift/GRDB/Core/RowAdapter.swift deleted file mode 100755 index b9ab95c..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/RowAdapter.swift +++ /dev/null @@ -1,545 +0,0 @@ -import Foundation - -/// Returns an array of row adapters that split a row according to the input -/// number of columns. -/// -/// For example: -/// -/// let sql = "SELECT 1, 2,3,4, 5,6, 7,8" -/// // <.><. . .><. .><. .> -/// let adapters = splittingRowAdapters([1, 3, 2]) -/// let adapter = ScopeAdapter([ -/// "a": adapters[0], -/// "b": adapters[1], -/// "c": adapters[2], -/// "d": adapters[3]]) -/// let row = try Row.fetchOne(db, sql: sql, adapter: adapter) -/// row.scopes["a"] // [1] -/// row.scopes["b"] // [2, 3, 4] -/// row.scopes["c"] // [5, 6] -/// row.scopes["d"] // [7, 8] -public func splittingRowAdapters(columnCounts: [Int]) -> [RowAdapter] { - guard !columnCounts.isEmpty else { - // Identity adapter - return [SuffixRowAdapter(fromIndex: 0)] - } - - // [1, 3, 2] -> [0, 1, 4, 6] - let columnIndexes = columnCounts.reduce(into: [0]) { (acc, count) in - acc.append(acc.last! + count) - } - - // [0, 1, 4, 6] -> [(0..<1), (1..<4), (4..<6)] - let rangeAdapters = zip(columnIndexes, columnIndexes.suffix(from: 1)) - .map { RangeRowAdapter($0..<$1) } - - // (6...) - let suffixAdapter = SuffixRowAdapter(fromIndex: columnIndexes.last!) - - // [(0..<1), (1..<4), (4..<6), (6...)] - return rangeAdapters + [suffixAdapter] -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// LayoutedColumnMapping is a type that supports the RowAdapter protocol. -/// -/// :nodoc: -public struct LayoutedColumnMapping { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// An array of (baseIndex, mappedName) pairs, where baseIndex is the index - /// of a column in a base row, and mappedName the mapped name of - /// that column. - public let layoutColumns: [(Int, String)] - - /// A cache for layoutIndex(ofColumn:) - let lowercaseColumnIndexes: [String: Int] // [mappedColumn: layoutColumnIndex] - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates a LayoutedColumnMapping from an array of (baseIndex, mappedName) - /// pairs. In each pair: - /// - /// - baseIndex is the index of a column in a base row - /// - name is the mapped name of the column - /// - /// For example, the following LayoutedColumnMapping defines two columns, "foo" - /// and "bar", based on the base columns at indexes 1 and 2: - /// - /// LayoutedColumnMapping(layoutColumns: [(1, "foo"), (2, "bar")]) - /// - /// Use it in your custom RowAdapter type: - /// - /// struct FooBarAdapter : RowAdapter { - /// func layoutAdapter(layout: RowLayout) throws -> LayoutedRowAdapter { - /// return LayoutedColumnMapping(layoutColumns: [(1, "foo"), (2, "bar")]) - /// } - /// } - /// - /// // [foo:"foo" bar: "bar"] - /// try Row.fetchOne(db, sql: "SELECT NULL, 'foo', 'bar'", adapter: FooBarAdapter()) - public init(layoutColumns: S) where S.Iterator.Element == (Int, String) { - self.layoutColumns = Array(layoutColumns) - self.lowercaseColumnIndexes = Dictionary( - layoutColumns - .enumerated() - .map { ($0.element.1.lowercased(), $0.offset) }, - uniquingKeysWith: { (left, _) in left }) // keep leftmost indexes - } - - func baseColumnIndex(atMappingIndex index: Int) -> Int { - return layoutColumns[index].0 - } - - func columnName(atMappingIndex index: Int) -> String { - return layoutColumns[index].1 - } -} - -/// LayoutedColumnMapping adopts LayoutedRowAdapter -/// -/// :nodoc: -extension LayoutedColumnMapping : LayoutedRowAdapter { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns self. - public var mapping: LayoutedColumnMapping { - return self - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns the empty dictionary. - public var scopes: [String: LayoutedRowAdapter] { - return [:] - } -} - -/// :nodoc: -extension LayoutedColumnMapping : RowLayout { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns the index of the leftmost column named `name`, in a - /// case-insensitive way. - public func layoutIndex(ofColumn name: String) -> Int? { - if let index = lowercaseColumnIndexes[name] { - return index - } - return lowercaseColumnIndexes[name.lowercased()] - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// LayoutedRowAdapter is a protocol that supports the RowAdapter protocol. -/// -/// GRBD ships with a ready-made type that adopts this protocol: -/// LayoutedColumnMapping. -/// -/// :nodoc: -public protocol LayoutedRowAdapter { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// A LayoutedColumnMapping that defines how to map a column name to a - /// column in a base row. - var mapping: LayoutedColumnMapping { get } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The layouted row adapters for each scope. - var scopes: [String: LayoutedRowAdapter] { get } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// RowLayout is a protocol that supports the RowAdapter protocol. It describes -/// a layout of a base row. -/// -/// :nodoc: -public protocol RowLayout { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// An array of (baseIndex, name) pairs, where baseIndex is the index - /// of a column in a base row, and name the name of that column. - var layoutColumns: [(Int, String)] { get } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns the index of the leftmost column named `name`, in a - /// case-insensitive way. - func layoutIndex(ofColumn name: String) -> Int? -} - -extension SelectStatement : RowLayout { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public var layoutColumns: [(Int, String)] { - return Array(columnNames.enumerated()) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func layoutIndex(ofColumn name: String) -> Int? { - return index(ofColumn: name) - } -} - -/// RowAdapter is a protocol that helps two incompatible row interfaces working -/// together. -/// -/// GRDB ships with four concrete types that adopt the RowAdapter protocol: -/// -/// - ColumnMapping: renames row columns -/// - SuffixRowAdapter: hides the first columns of a row -/// - RangeRowAdapter: only exposes a range of columns -/// - ScopeAdapter: groups several adapters together to define named scopes -/// -/// To use a row adapter, provide it to any method that fetches: -/// -/// let adapter = SuffixRowAdapter(fromIndex: 2) -/// let sql = "SELECT 1 AS foo, 2 AS bar, 3 AS baz" -/// -/// // [baz:3] -/// try Row.fetchOne(db, sql: sql, adapter: adapter) -public protocol RowAdapter { - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// You never call this method directly. It is called for you whenever an - /// adapter has to be applied. - /// - /// The result is a value that adopts LayoutedRowAdapter, such as - /// LayoutedColumnMapping. - /// - /// For example: - /// - /// // An adapter that turns any row to a row that contains a single - /// // column named "foo" whose value is the leftmost value of the - /// // base row. - /// struct FirstColumnAdapter : RowAdapter { - /// func layoutedAdapter(from layout: RowLayout) throws -> LayoutedRowAdapter { - /// return LayoutedColumnMapping(layoutColumns: [(0, "foo")]) - /// } - /// } - /// - /// // [foo:1] - /// try Row.fetchOne(db, sql: "SELECT 1, 2, 3", adapter: FirstColumnAdapter()) - func layoutedAdapter(from layout: RowLayout) throws -> LayoutedRowAdapter -} - -extension RowAdapter { - /// Returns an adapter based on self, with added scopes. - /// - /// If self already defines scopes, the added scopes replace - /// eventual existing scopes with the same name. - /// - /// - parameter scopes: A dictionary that maps scope names to - /// row adapters. - public func addingScopes(_ scopes: [String: RowAdapter]) -> RowAdapter { - if scopes.isEmpty { - return self - } else { - return ScopeAdapter(base: self, scopes: scopes) - } - } -} - -extension RowAdapter { - func baseColumnIndex(atIndex index: Int, layout: RowLayout) throws -> Int { - return try layoutedAdapter(from: layout).mapping.baseColumnIndex(atMappingIndex: index) - } -} - -/// EmptyRowAdapter is a row adapter that hides all columns. -public struct EmptyRowAdapter: RowAdapter { - /// Creates an EmptyRowAdapter - public init() { } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func layoutedAdapter(from layout: RowLayout) throws -> LayoutedRowAdapter { - return LayoutedColumnMapping(layoutColumns: []) - } -} - -/// ColumnMapping is a row adapter that maps column names. -/// -/// let adapter = ColumnMapping(["foo": "bar"]) -/// let sql = "SELECT 'foo' AS foo, 'bar' AS bar, 'baz' AS baz" -/// -/// // [foo:"bar"] -/// try Row.fetchOne(db, sql: sql, adapter: adapter) -public struct ColumnMapping : RowAdapter { - /// A dictionary from mapped column names to column names in a base row. - let mapping: [String: String] - - /// Creates a ColumnMapping with a dictionary from mapped column names to - /// column names in a base row. - public init(_ mapping: [String: String]) { - self.mapping = mapping - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func layoutedAdapter(from layout: RowLayout) throws -> LayoutedRowAdapter { - let layoutColumns = try mapping - .map { (mappedColumn, baseColumn) -> (Int, String) in - guard let index = layout.layoutIndex(ofColumn: baseColumn) else { - let columnNames = layout.layoutColumns.map { $0.1 } - throw DatabaseError(resultCode: .SQLITE_MISUSE, message: "Mapping references missing column \(baseColumn). Valid column names are: \(columnNames.joined(separator: ", ")).") - } - let baseIndex = layout.layoutColumns[index].0 - return (baseIndex, mappedColumn) - } - .sorted { $0.0 < $1.0 } // preserve ordering of base columns - return LayoutedColumnMapping(layoutColumns: layoutColumns) - } -} - -/// SuffixRowAdapter is a row adapter that hides the first columns in a row. -/// -/// let adapter = SuffixRowAdapter(fromIndex: 2) -/// let sql = "SELECT 1 AS foo, 2 AS bar, 3 AS baz" -/// -/// // [baz:3] -/// try Row.fetchOne(db, sql: sql, adapter: adapter) -public struct SuffixRowAdapter : RowAdapter { - /// The suffix index - let index: Int - - /// Creates a SuffixRowAdapter that hides all columns before the - /// provided index. - /// - /// If index is 0, the layout row is identical to the base row. - public init(fromIndex index: Int) { - GRDBPrecondition(index >= 0, "Negative column index is out of range") - self.index = index - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func layoutedAdapter(from layout: RowLayout) throws -> LayoutedRowAdapter { - return LayoutedColumnMapping(layoutColumns: layout.layoutColumns.suffix(from: index)) - } -} - -/// RangeRowAdapter is a row adapter that only exposes a range of columns. -/// -/// let adapter = RangeRowAdapter(1..<3) -/// let sql = "SELECT 1 AS foo, 2 AS bar, 3 AS baz, 4 as qux" -/// -/// // [bar:2 baz:3] -/// try Row.fetchOne(db, sql: sql, adapter: adapter) -public struct RangeRowAdapter : RowAdapter { - /// The range - let range: CountableRange - - /// Creates a RangeRowAdapter that only exposes a range of columns. - public init(_ range: CountableRange) { - GRDBPrecondition(range.lowerBound >= 0, "Negative column index is out of range") - self.range = range - } - - /// Creates a RangeRowAdapter that only exposes a range of columns. - public init(_ range: CountableClosedRange) { - GRDBPrecondition(range.lowerBound >= 0, "Negative column index is out of range") - self.range = range.lowerBound..<(range.upperBound + 1) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func layoutedAdapter(from layout: RowLayout) throws -> LayoutedRowAdapter { - return LayoutedColumnMapping(layoutColumns: layout.layoutColumns[range]) - } -} - -/// ScopeAdapter is a row adapter that lets you define scopes on rows. -/// -/// // Two adapters -/// let fooAdapter = ColumnMapping(["value": "foo"]) -/// let barAdapter = ColumnMapping(["value": "bar"]) -/// -/// // Define scopes -/// let adapter = ScopeAdapter([ -/// "foo": fooAdapter, -/// "bar": barAdapter]) -/// -/// // Fetch -/// let sql = "SELECT 'foo' AS foo, 'bar' AS bar" -/// let row = try Row.fetchOne(db, sql: sql, adapter: adapter)! -/// -/// // Scoped rows: -/// if let fooRow = row.scopes["foo"] { -/// fooRow["value"] // "foo" -/// } -/// if let barRow = row.scopes["bar"] { -/// barRow["value"] // "bar" -/// } -public struct ScopeAdapter : RowAdapter { - - /// The base adapter - let base: RowAdapter - - /// The scope adapters - let scopes: [String: RowAdapter] - - /// Creates an adapter that preserves row contents and add scoped rows. - /// - /// For example: - /// - /// let adapter = ScopeAdapter(["suffix": SuffixRowAdapter(fromIndex: 1)]) - /// let row = try Row.fetchOne(db, sql: "SELECT 1, 2, 3", adapter: adapter)! - /// row // [1, 2, 3] - /// row.scopes["suffix"] // [2, 3] - /// - /// - parameter scopes: A dictionary that maps scope names to - /// row adapters. - public init(_ scopes: [String: RowAdapter]) { - // Use SuffixRowAdapter(fromIndex: 0) as the identity adapter - self.init(base: SuffixRowAdapter(fromIndex: 0), scopes: scopes) - } - - /// Creates an adapter based on the base adapter, and add scoped rows. - /// - /// For example: - /// - /// let baseAdapter = RangeRowAdapter(0..<1) - /// let adapter = ScopeAdapter(base: baseAdapter, scopes: ["suffix": SuffixRowAdapter(fromIndex: 1)]) - /// let row = try Row.fetchOne(db, sql: "SELECT 1, 2, 3", adapter: adapter)! - /// row // [1] - /// row.scopes["initial"] // [2, 3] - /// - /// If the base adapter already defines scopes, the given scopes replace - /// eventual existing scopes with the same name. - /// - /// This initializer is equivalent to `baseAdapter.addingScopes(scopes)`. - /// - /// - parameter base: A dictionary that maps scope names to - /// row adapters. - /// - parameter scopes: A dictionary that maps scope names to - /// row adapters. - public init(base: RowAdapter, scopes: [String: RowAdapter]) { - self.base = base - self.scopes = scopes - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func layoutedAdapter(from layout: RowLayout) throws -> LayoutedRowAdapter { - let layoutedAdapter = try base.layoutedAdapter(from: layout) - var layoutedScopes = layoutedAdapter.scopes - for (name, adapter) in scopes { - try layoutedScopes[name] = adapter.layoutedAdapter(from: layout) - } - return LayoutedScopeAdapter( - mapping: layoutedAdapter.mapping, - scopes: layoutedScopes) - } -} - -/// The LayoutedRowAdapter for ScopeAdapter -struct LayoutedScopeAdapter : LayoutedRowAdapter { - let mapping: LayoutedColumnMapping - let scopes: [String: LayoutedRowAdapter] -} - -struct ChainedAdapter : RowAdapter { - let first: RowAdapter - let second: RowAdapter - - func layoutedAdapter(from layout: RowLayout) throws -> LayoutedRowAdapter { - return try second.layoutedAdapter(from: first.layoutedAdapter(from: layout).mapping) - } -} - -extension Row { - /// Creates a row from a base row and a statement adapter - convenience init(base: Row, adapter: LayoutedRowAdapter) { - self.init(impl: AdaptedRowImpl(base: base, adapter: adapter)) - } - - /// Returns self if adapter is nil - func adapted(with adapter: RowAdapter?, layout: RowLayout) throws -> Row { - guard let adapter = adapter else { - return self - } - return try Row(base: self, adapter: adapter.layoutedAdapter(from: layout)) - } -} - -struct AdaptedRowImpl : RowImpl { - let base: Row - let adapter: LayoutedRowAdapter - let mapping: LayoutedColumnMapping - - init(base: Row, adapter: LayoutedRowAdapter) { - self.base = base - self.adapter = adapter - self.mapping = adapter.mapping - } - - var count: Int { - return mapping.layoutColumns.count - } - - var isFetched: Bool { - return base.isFetched - } - - func scopes(prefetchedRows: Row.PrefetchedRowsView) -> Row.ScopesView { - return Row.ScopesView(row: base, scopes: adapter.scopes, prefetchedRows: prefetchedRows) - } - - func hasNull(atUncheckedIndex index: Int) -> Bool { - let mappedIndex = mapping.baseColumnIndex(atMappingIndex: index) - return base.impl.hasNull(atUncheckedIndex: mappedIndex) - } - - func databaseValue(atUncheckedIndex index: Int) -> DatabaseValue { - let mappedIndex = mapping.baseColumnIndex(atMappingIndex: index) - return base.impl.databaseValue(atUncheckedIndex: mappedIndex) - } - - func fastDecode( - _ type: Value.Type, - atUncheckedIndex index: Int) -> Value - { - let mappedIndex = mapping.baseColumnIndex(atMappingIndex: index) - return Value.fastDecode(from: base, atUncheckedIndex: mappedIndex) - } - - func fastDecodeIfPresent( - _ type: Value.Type, - atUncheckedIndex index: Int) -> Value? - { - let mappedIndex = mapping.baseColumnIndex(atMappingIndex: index) - return Value.fastDecodeIfPresent(from: base, atUncheckedIndex: mappedIndex) - } - - func dataNoCopy(atUncheckedIndex index:Int) -> Data? { - let mappedIndex = mapping.baseColumnIndex(atMappingIndex: index) - return base.impl.dataNoCopy(atUncheckedIndex: mappedIndex) - } - - func columnName(atUncheckedIndex index: Int) -> String { - return mapping.columnName(atMappingIndex: index) - } - - func index(ofColumn name: String) -> Int? { - return mapping.layoutIndex(ofColumn: name) - } - - func copiedRow(_ row: Row) -> Row { - return Row(base: base.copy(), adapter: adapter) - } - - func unscopedRow(_ row: Row) -> Row { - assert(adapter.mapping.scopes.isEmpty) - return Row(base: base, adapter: adapter.mapping) - } - - func unadaptedRow(_ row: Row) -> Row { - return base.unadapted - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/SQLInterpolation.swift b/Example/Pods/GRDB.swift/GRDB/Core/SQLInterpolation.swift deleted file mode 100755 index 49bc2b3..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/SQLInterpolation.swift +++ /dev/null @@ -1,33 +0,0 @@ -#if swift(>=5.0) -/// :nodoc: -public struct SQLInterpolation: StringInterpolationProtocol { - var context = SQLGenerationContext.literalGenerationContext(withArguments: true) - var sql: String - var arguments: StatementArguments { - get { return context.arguments! } - set { context.arguments = newValue } - } - - public init(literalCapacity: Int, interpolationCount: Int) { - sql = "" - sql.reserveCapacity(literalCapacity + interpolationCount) - } - - /// "SELECT * FROM player" - public mutating func appendLiteral(_ sql: String) { - self.sql += sql - } - - /// "SELECT * FROM \(sql: "player")" - public mutating func appendInterpolation(sql: String, arguments: StatementArguments = StatementArguments()) { - self.sql += sql - self.arguments += arguments - } - - /// "SELECT * FROM player WHERE \(literal: condition)" - public mutating func appendInterpolation(literal sqlLiteral: SQLLiteral) { - sql += sqlLiteral.sql - arguments += sqlLiteral.arguments - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/Core/SQLLiteral.swift b/Example/Pods/GRDB.swift/GRDB/Core/SQLLiteral.swift deleted file mode 100755 index e95e58b..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/SQLLiteral.swift +++ /dev/null @@ -1,145 +0,0 @@ -/// SQLLiteral is a type which support [SQL Interpolation](https://github.com/groue/GRDB.swift/blob/master/Documentation/SQLInterpolation.md). -/// -/// For example: -/// -/// try dbQueue.write { db in -/// let name: String = ... -/// let id: Int64 = ... -/// let query: SQLLiteral = "UPDATE player SET name = \(name) WHERE id = \(id)" -/// try db.execute(literal: query) -/// } -public struct SQLLiteral { - private(set) public var sql: String - private(set) public var arguments: StatementArguments - - /// Creates an SQLLiteral from a plain SQL string, and eventual arguments. - /// - /// For example: - /// - /// let query = SQLLiteral( - /// sql: "UPDATE player SET name = ? WHERE id = ?", - /// arguments: [name, id]) - public init(sql: String, arguments: StatementArguments = StatementArguments()) { - self.sql = sql - self.arguments = arguments - } - - /// Returns a literal whose SQL is transformed by the given closure. - public func mapSQL(_ transform: (String) throws -> String) rethrows -> SQLLiteral { - var result = self - result.sql = try transform(sql) - return result - } -} - -extension SQLLiteral { - /// Returns the SQLLiteral produced by the concatenation of two literals. - /// - /// let name = "O'Brien" - /// let selection: SQLLiteral = "SELECT * FROM player " - /// let condition: SQLLiteral = "WHERE name = \(name)" - /// let query = selection + condition - public static func + (lhs: SQLLiteral, rhs: SQLLiteral) -> SQLLiteral { - var result = lhs - result += rhs - return result - } - - /// Appends an SQLLiteral to the receiver. - /// - /// let name = "O'Brien" - /// var query: SQLLiteral = "SELECT * FROM player " - /// query += "WHERE name = \(name)" - public static func += (lhs: inout SQLLiteral, rhs: SQLLiteral) { - lhs.sql += rhs.sql - lhs.arguments += rhs.arguments - } - - /// Appends an SQLLiteral to the receiver. - /// - /// let name = "O'Brien" - /// var query: SQLLiteral = "SELECT * FROM player " - /// query.append(literal: "WHERE name = \(name)") - public mutating func append(literal sqlLiteral: SQLLiteral) { - self += sqlLiteral - } - - /// Appends a plain SQL string to the receiver, and eventual arguments. - /// - /// let name = "O'Brien" - /// var query: SQLLiteral = "SELECT * FROM player " - /// query.append(sql: "WHERE name = ?", arguments: [name]) - public mutating func append(sql: String, arguments: StatementArguments = StatementArguments()) { - self += SQLLiteral(sql: sql, arguments: arguments) - } -} - -extension Sequence where Element == SQLLiteral { - /// Returns the concatenated SQLLiteral of this sequence of literals, - /// inserting the given separator between each element. - /// - /// let components: [SQLLiteral] = [ - /// "UPDATE player", - /// "SET name = \(name)", - /// "WHERE id = \(id)" - /// ] - /// let query = components.joined(separator: " ") - public func joined(separator: String = "") -> SQLLiteral { - var sql = "" - var arguments = StatementArguments() - var first = true - for literal in self { - if first { - first = false - } else { - sql += separator - } - sql += literal.sql - arguments += literal.arguments - } - return SQLLiteral(sql: sql, arguments: arguments) - } -} - -extension Collection where Element == SQLLiteral { - /// Returns the concatenated SQLLiteral of this collection of literals, - /// inserting the given separator between each element. - /// - /// let components: [SQLLiteral] = [ - /// "UPDATE player", - /// "SET name = \(name)", - /// "WHERE id = \(id)" - /// ] - /// let query = components.joined(separator: " ") - public func joined(separator: String = "") -> SQLLiteral { - let sql = map { $0.sql }.joined(separator: separator) - let arguments = reduce(into: StatementArguments()) { $0 += $1.arguments } - return SQLLiteral(sql: sql, arguments: arguments) - } -} - -// MARK: - ExpressibleByStringInterpolation - -#if swift(>=5.0) -extension SQLLiteral: ExpressibleByStringInterpolation { - /// :nodoc - public init(unicodeScalarLiteral: String) { - self.init(sql: unicodeScalarLiteral, arguments: []) - } - - /// :nodoc: - public init(extendedGraphemeClusterLiteral: String) { - self.init(sql: extendedGraphemeClusterLiteral, arguments: []) - } - - /// :nodoc: - public init(stringLiteral: String) { - self.init(sql: stringLiteral, arguments: []) - } - - /// :nodoc: - public init(stringInterpolation sqlInterpolation: SQLInterpolation) { - self.init(sql: sqlInterpolation.sql, arguments: sqlInterpolation.arguments) - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/Core/SQLRequest.swift b/Example/Pods/GRDB.swift/GRDB/Core/SQLRequest.swift deleted file mode 100755 index 46efea6..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/SQLRequest.swift +++ /dev/null @@ -1,168 +0,0 @@ -/// A FetchRequest built from raw SQL. -public struct SQLRequest : FetchRequest { - /// There are two statement caches: one "public" for statements generated by - /// the user, and one "internal" for the statements generated by GRDB. Those - /// are separated so that GRDB has no opportunity to inadvertently modify - /// the arguments of user's cached statements. - enum Cache { - /// The public cache, for library user - case `public` - - /// The internal cache, for GRDB - case `internal` - } - - public typealias RowDecoder = T - - /// The raw SQL query - /// - /// let id = 42 - /// let request: SQLRequest = "SELECT * FROM player WHERE id = \(id)" - /// request.sql // "SELECT * FROM player WHERE id = ?" - public var sql: String { return sqlLiteral.sql } - - /// The request argument - /// - /// let id = 42 - /// let request: SQLRequest = "SELECT * FROM player WHERE id = \(id)" - /// request.arguments // [42] - public var arguments: StatementArguments { return sqlLiteral.arguments } - - /// The request adapter - public var adapter: RowAdapter? - - private var sqlLiteral: SQLLiteral - private let cache: Cache? - - /// Creates a request from an SQL string, optional arguments, and - /// optional row adapter. - /// - /// let request = SQLRequest(sql: """ - /// SELECT name FROM player - /// """) - /// let request = SQLRequest(sql: """ - /// SELECT * FROM player WHERE id = ? - /// """, arguments: [1]) - /// - /// - parameters: - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter. - /// - cached: Defaults to false. If true, the request reuses a cached - /// prepared statement. - /// - returns: A SQLRequest - public init(sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil, cached: Bool = false) { - self.init(literal: SQLLiteral(sql: sql, arguments: arguments), adapter: adapter, fromCache: cached ? .public : nil) - } - - /// Creates a request from an SQLLiteral, and optional row adapter. - /// - /// let request = SQLRequest(literal: SQLLiteral(sql: """ - /// SELECT name FROM player - /// """)) - /// let request = SQLRequest(literal: SQLLiteral(sql: """ - /// SELECT * FROM player WHERE name = ? - /// """, arguments: ["O'Brien"])) - /// - /// With Swift 5, you can safely embed raw values in your SQL queries, - /// without any risk of syntax errors or SQL injection: - /// - /// let request = SQLRequest(literal: """ - /// SELECT * FROM player WHERE name = \("O'brien") - /// """) - /// - /// - parameters: - /// - sqlLiteral: An SQLLiteral. - /// - adapter: Optional RowAdapter. - /// - cached: Defaults to false. If true, the request reuses a cached - /// prepared statement. - /// - returns: A SQLRequest - public init(literal sqlLiteral: SQLLiteral, adapter: RowAdapter? = nil, cached: Bool = false) { - self.init(literal: sqlLiteral, adapter: adapter, fromCache: cached ? .public : nil) - } - - /// Creates an SQL request from any other fetch request. - /// - /// - parameters: - /// - db: A database connection. - /// - request: A request. - /// - cached: Defaults to false. If true, the request reuses a cached - /// prepared statement. - /// - returns: An SQLRequest - public init(_ db: Database, request: Request, cached: Bool = false) throws where Request.RowDecoder == RowDecoder { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - self.init(literal: SQLLiteral(sql: statement.sql, arguments: statement.arguments), adapter: adapter, cached: cached) - } - - /// Creates a request from an SQLLiteral, and optional row adapter. - /// - /// let request = SQLRequest(literal: SQLLiteral(sql: """ - /// SELECT name FROM player - /// """)) - /// let request = SQLRequest(literal: SQLLiteral(sql: """ - /// SELECT * FROM player WHERE name = ? - /// """, arguments: ["O'Brien"])) - /// - /// With Swift 5, you can safely embed raw values in your SQL queries, - /// without any risk of syntax errors or SQL injection: - /// - /// let request = SQLRequest(literal: """ - /// SELECT * FROM player WHERE name = \("O'brien") - /// """) - /// - /// - parameters: - /// - sqlLiteral: An SQLLiteral. - /// - adapter: Optional RowAdapter. - /// - cache: The eventual cache - /// - returns: A SQLRequest - init(literal sqlLiteral: SQLLiteral, adapter: RowAdapter? = nil, fromCache cache: Cache?) { - self.sqlLiteral = sqlLiteral - self.adapter = adapter - self.cache = cache - } - - /// A tuple that contains a prepared statement that is ready to be - /// executed, and an eventual row adapter. - /// - /// - parameter db: A database connection. - /// - parameter singleResult: SQLRequest disregards this hint. - /// - /// :nodoc: - public func prepare(_ db: Database, forSingleResult singleResult: Bool) throws -> (SelectStatement, RowAdapter?) { - let statement: SelectStatement - switch cache { - case .none: - statement = try db.makeSelectStatement(sql: sqlLiteral.sql) - case .public?: - statement = try db.cachedSelectStatement(sql: sqlLiteral.sql) - case .internal?: - statement = try db.internalCachedSelectStatement(sql: sqlLiteral.sql) - } - try statement.setArgumentsWithValidation(sqlLiteral.arguments) - return (statement, adapter) - } -} - -#if swift(>=5.0) -extension SQLRequest: ExpressibleByStringInterpolation { - /// :nodoc - public init(unicodeScalarLiteral: String) { - self.init(sql: unicodeScalarLiteral) - } - - /// :nodoc: - public init(extendedGraphemeClusterLiteral: String) { - self.init(sql: extendedGraphemeClusterLiteral) - } - - /// :nodoc: - public init(stringLiteral: String) { - self.init(sql: stringLiteral) - } - - /// :nodoc: - public init(stringInterpolation sqlInterpolation: SQLInterpolation) { - self.init(literal: SQLLiteral(stringInterpolation: sqlInterpolation)) - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/Core/SchedulingWatchdog.swift b/Example/Pods/GRDB.swift/GRDB/Core/SchedulingWatchdog.swift deleted file mode 100755 index 9331863..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/SchedulingWatchdog.swift +++ /dev/null @@ -1,57 +0,0 @@ -import Dispatch - -/// SchedulingWatchdog makes sure that databases connections are used on correct -/// dispatch queues, and warns the user with a fatal error whenever she misuses -/// a database connection. -/// -/// Generally speaking, each connection has its own dispatch queue. But it's not -/// enough: users need to use two database connections at the same time: -/// https://github.com/groue/GRDB.swift/issues/55. To support this use case, a -/// single dispatch queue can be temporarily shared by two or more connections. -/// -/// - SchedulingWatchdog.makeSerializedQueue(allowingDatabase:) creates a -/// dispatch queue that allows one database. -/// -/// It does so by registering one instance of SchedulingWatchdog as a specific -/// of the dispatch queue, a SchedulingWatchdog that allows that database only. -/// -/// Later on, the queue can be shared by several databases with the method -/// inheritingAllowedDatabases(from:execute:). See SerializedDatabase.sync() -/// for an example. -/// -/// - preconditionValidQueue() crashes whenever a database is used in an invalid -/// dispatch queue. -final class SchedulingWatchdog { - private static let watchDogKey = DispatchSpecificKey() - private(set) var allowedDatabases: [Database] - var databaseObservationBroker: DatabaseObservationBroker? - - private init(allowedDatabase database: Database) { - allowedDatabases = [database] - } - - static func allowDatabase(_ database: Database, onQueue queue: DispatchQueue) { - precondition(queue.getSpecific(key: watchDogKey) == nil) - let watchdog = SchedulingWatchdog(allowedDatabase: database) - queue.setSpecific(key: watchDogKey, value: watchdog) - } - - func inheritingAllowedDatabases(from other: SchedulingWatchdog, execute body: () throws -> T) rethrows -> T { - let backup = allowedDatabases - allowedDatabases.append(contentsOf: other.allowedDatabases) - defer { allowedDatabases = backup } - return try body() - } - - static func preconditionValidQueue(_ db: Database, _ message: @autoclosure() -> String = "Database was not used on the correct thread.", file: StaticString = #file, line: UInt = #line) { - GRDBPrecondition(current?.allows(db) ?? false, message(), file: file, line: line) - } - - static var current: SchedulingWatchdog? { - return DispatchQueue.getSpecific(key: watchDogKey) - } - - func allows(_ db: Database) -> Bool { - return allowedDatabases.contains { $0 === db } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/SerializedDatabase.swift b/Example/Pods/GRDB.swift/GRDB/Core/SerializedDatabase.swift deleted file mode 100755 index 7fabe2e..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/SerializedDatabase.swift +++ /dev/null @@ -1,204 +0,0 @@ -import Foundation - -/// A class that serializes accesses to a database. -final class SerializedDatabase { - /// The database connection - private let db: Database - - /// The database configuration - var configuration: Configuration { - return db.configuration - } - - /// The path to the database file - var path: String - - /// The dispatch queue - private let queue: DispatchQueue - - init(path: String, configuration: Configuration = Configuration(), schemaCache: DatabaseSchemaCache, defaultLabel: String, purpose: String? = nil) throws { - // According to https://www.sqlite.org/threadsafe.html - // - // > SQLite support three different threading modes: - // > - // > 1. Multi-thread. In this mode, SQLite can be safely used by - // > multiple threads provided that no single database connection is - // > used simultaneously in two or more threads. - // > - // > 2. Serialized. In serialized mode, SQLite can be safely used by - // > multiple threads with no restriction. - // > - // > [...] - // > - // > The default mode is serialized. - // - // Since our database connection is only used via our serial dispatch - // queue, there is no purpose using the default serialized mode. - var config = configuration - config.threadingMode = .multiThread - - self.path = path - self.db = try Database(path: path, configuration: config, schemaCache: schemaCache) - self.queue = configuration.makeDispatchQueue(defaultLabel: defaultLabel, purpose: purpose) - SchedulingWatchdog.allowDatabase(db, onQueue: queue) - try queue.sync { - do { - try db.setup() - } catch { - db.close() - throw error - } - } - } - - deinit { - // Database may be deallocated in its own queue: allow reentrancy - reentrantSync { db in - db.close() - } - } - - /// Synchronously executes a block the serialized dispatch queue, and - /// returns its result. - /// - /// This method is *not* reentrant. - func sync(_ block: (Database) throws -> T) rethrows -> T { - // Three different cases: - // - // 1. A database is invoked from some queue like the main queue: - // - // serializedDatabase.sync { db in // <-- we're here - // } - // - // 2. A database is invoked in a reentrant way: - // - // serializedDatabase.sync { db in - // serializedDatabase.sync { db in // <-- we're here - // } - // } - // - // 3. A database in invoked from another database: - // - // serializedDatabase1.sync { db1 in - // serializedDatabase2.sync { db2 in // <-- we're here - // } - // } - - guard let watchdog = SchedulingWatchdog.current else { - // Case 1 - return try queue.sync { - defer { preconditionNoUnsafeTransactionLeft(db) } - return try block(db) - } - } - - // Case 2 is forbidden. - GRDBPrecondition(!watchdog.allows(db), "Database methods are not reentrant.") - - // Case 3 - return try queue.sync { - try SchedulingWatchdog.current!.inheritingAllowedDatabases(from: watchdog) { - defer { preconditionNoUnsafeTransactionLeft(db) } - return try block(db) - } - } - } - - /// Synchronously executes a block the serialized dispatch queue, and - /// returns its result. - /// - /// This method is reentrant. - func reentrantSync(_ block: (Database) throws -> T) rethrows -> T { - // Three different cases: - // - // 1. A database is invoked from some queue like the main queue: - // - // serializedDatabase.reentrantSync { db in // <-- we're here - // } - // - // 2. A database is invoked in a reentrant way: - // - // serializedDatabase.reentrantSync { db in - // serializedDatabase.reentrantSync { db in // <-- we're here - // } - // } - // - // 3. A database in invoked from another database: - // - // serializedDatabase1.reentrantSync { db1 in - // serializedDatabase2.reentrantSync { db2 in // <-- we're here - // } - // } - - guard let watchdog = SchedulingWatchdog.current else { - // Case 1 - return try queue.sync { - // Since we are reentrant, a transaction may already be opened. - // In this case, don't check for unsafe transaction at the end. - if db.isInsideTransaction { - return try block(db) - } else { - defer { preconditionNoUnsafeTransactionLeft(db) } - return try block(db) - } - } - } - - // Case 2 - if watchdog.allows(db) { - // Since we are reentrant, a transaction may already be opened. - // In this case, don't check for unsafe transaction at the end. - if db.isInsideTransaction { - return try block(db) - } else { - defer { preconditionNoUnsafeTransactionLeft(db) } - return try block(db) - } - } - - // Case 3 - return try queue.sync { - try SchedulingWatchdog.current!.inheritingAllowedDatabases(from: watchdog) { - // Since we are reentrant, a transaction may already be opened. - // In this case, don't check for unsafe transaction at the end. - if db.isInsideTransaction { - return try block(db) - } else { - defer { preconditionNoUnsafeTransactionLeft(db) } - return try block(db) - } - } - } - } - - /// Asynchronously executes a block in the serialized dispatch queue. - func async(_ block: @escaping (Database) -> Void) { - queue.async { - block(self.db) - self.preconditionNoUnsafeTransactionLeft(self.db) - } - } - - /// Returns true if any only if the current dispatch queue is valid. - var onValidQueue: Bool { - return SchedulingWatchdog.current?.allows(db) ?? false - } - - /// Executes the block in the current queue. - /// - /// - precondition: the current dispatch queue is valid. - func execute(_ block: (Database) throws -> T) rethrows -> T { - preconditionValidQueue() - return try block(db) - } - - /// Fatal error if current dispatch queue is not valid. - func preconditionValidQueue(_ message: @autoclosure() -> String = "Database was not used on the correct thread.", file: StaticString = #file, line: UInt = #line) { - SchedulingWatchdog.preconditionValidQueue(db, message(), file: file, line: line) - } - - /// Fatal error if a transaction has been left opened. - private func preconditionNoUnsafeTransactionLeft(_ db: Database, _ message: @autoclosure() -> String = "A transaction has been left opened at the end of a database access", file: StaticString = #file, line: UInt = #line) { - GRDBPrecondition(configuration.allowsUnsafeTransactions || !db.isInsideTransaction, message(), file: file, line: line) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Statement.swift b/Example/Pods/GRDB.swift/GRDB/Core/Statement.swift deleted file mode 100755 index 73a76d4..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Statement.swift +++ /dev/null @@ -1,914 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// A raw SQLite statement, suitable for the SQLite C API. -public typealias SQLiteStatement = OpaquePointer - -extension CharacterSet { - /// Statements are separated by semicolons and white spaces - static let sqlStatementSeparators = CharacterSet(charactersIn: ";").union(.whitespacesAndNewlines) -} - -/// A statement represents an SQL query. -/// -/// It is the base class of UpdateStatement that executes *update statements*, -/// and SelectStatement that fetches rows. -public class Statement { - - /// The raw SQLite statement, suitable for the SQLite C API. - public let sqliteStatement: SQLiteStatement - - /// The SQL query - public var sql: String { - // trim white space and semicolumn for homogeneous output - return String(cString: sqlite3_sql(sqliteStatement)) - .trimmingCharacters(in: .sqlStatementSeparators) - } - - unowned let database: Database - - /// Creates a prepared statement. Returns nil if the compiled string is - /// blank or empty. - /// - /// - parameter database: A database connection. - /// - parameter statementStart: A pointer to a UTF-8 encoded C string - /// containing SQL. - /// - parameter statementEnd: Upon success, the pointer to the next - /// statement in the C string. - /// - parameter prepFlags: Flags for sqlite3_prepare_v3 (available from - /// SQLite 3.20.0, see http://www.sqlite.org/c3ref/prepare.html) - /// - throws: DatabaseError in case of compilation error. - required init?( - database: Database, - statementStart: UnsafePointer, - statementEnd: UnsafeMutablePointer?>, - prepFlags: Int32, - authorizer: StatementCompilationAuthorizer) throws - { - SchedulingWatchdog.preconditionValidQueue(database) - - var sqliteStatement: SQLiteStatement? = nil - // sqlite3_prepare_v3 was introduced in SQLite 3.20.0 http://www.sqlite.org/changes.html#version_3_20 - #if GRDBCUSTOMSQLITE || GRDBCIPHER - let code = sqlite3_prepare_v3(database.sqliteConnection, statementStart, -1, UInt32(bitPattern: prepFlags), &sqliteStatement, statementEnd) - #else - let code: Int32 - if #available(iOS 12.0, OSX 10.14, watchOS 5.0, *) { - code = sqlite3_prepare_v3(database.sqliteConnection, statementStart, -1, UInt32(bitPattern: prepFlags), &sqliteStatement, statementEnd) - } else { - code = sqlite3_prepare_v2(database.sqliteConnection, statementStart, -1, &sqliteStatement, statementEnd) - } - #endif - - guard code == SQLITE_OK else { - throw DatabaseError(resultCode: code, message: database.lastErrorMessage, sql: String(cString: statementStart)) - } - - guard let statement = sqliteStatement else { - return nil - } - - self.database = database - self.sqliteStatement = statement - } - - deinit { - sqlite3_finalize(sqliteStatement) - } - - final func reset() throws { - SchedulingWatchdog.preconditionValidQueue(database) - let code = sqlite3_reset(sqliteStatement) - guard code == SQLITE_OK else { - throw DatabaseError(resultCode: code, message: database.lastErrorMessage, sql: sql) - } - } - - - // MARK: Arguments - - var argumentsNeedValidation = true - var _arguments = StatementArguments() - - lazy var sqliteArgumentCount: Int = { - Int(sqlite3_bind_parameter_count(self.sqliteStatement)) - }() - - // Returns ["id", nil", "name"] for "INSERT INTO table VALUES (:id, ?, :name)" - fileprivate lazy var sqliteArgumentNames: [String?] = { - return (0..=5.0) - code = data.withUnsafeBytes { - sqlite3_bind_blob(sqliteStatement, index, $0.baseAddress, Int32($0.count), SQLITE_TRANSIENT) - } - #else - code = data.withUnsafeBytes { - sqlite3_bind_blob(sqliteStatement, index, $0, Int32(data.count), SQLITE_TRANSIENT) - } - #endif - } - - // It looks like sqlite3_bind_xxx() functions do not access the file system. - // They should thus succeed, unless a GRDB bug: there is no point throwing any error. - guard code == SQLITE_OK else { - fatalError(DatabaseError(resultCode: code, message: database.lastErrorMessage, sql: sql).description) - } - } - - // Don't make this one public unless we keep the arguments property in sync. - private func clearBindings() { - // It looks like sqlite3_clear_bindings() does not access the file system. - // This function call should thus succeed, unless a GRDB bug: there is - // no point throwing any error. - let code = sqlite3_clear_bindings(sqliteStatement) - guard code == SQLITE_OK else { - fatalError(DatabaseError(resultCode: code, message: database.lastErrorMessage, sql: sql).description) - } - } - - fileprivate func prepare(withArguments arguments: StatementArguments?) { - // Force arguments validity: it is a programmer error to provide - // arguments that do not match the statement. - if let arguments = arguments { - try! setArgumentsWithValidation(arguments) - } else if argumentsNeedValidation { - try! validate(arguments: self.arguments) - } - } -} - -// MARK: - Statement Preparation - -/// A common protocol for UpdateStatement and SelectStatement, only used as -/// support for SelectStatement.prepare(...) and UpdateStatement.prepare(...). -protocol StatementProtocol { } -extension Statement: StatementProtocol { } -extension StatementProtocol where Self: Statement { - // Static method instead of an initializer because initializer can't run - // inside `sqlCodeUnits.withUnsafeBufferPointer`. - static func prepare(sql: String, prepFlags: Int32, in database: Database) throws -> Self { - let authorizer = StatementCompilationAuthorizer() - database.authorizer = authorizer - defer { database.authorizer = nil } - - return try sql.utf8CString.withUnsafeBufferPointer { buffer in - let statementStart = buffer.baseAddress! - var statementEnd: UnsafePointer? = nil - guard let statement = try self.init( - database: database, - statementStart: statementStart, - statementEnd: &statementEnd, - prepFlags: prepFlags, - authorizer: authorizer) else - { - throw DatabaseError( - resultCode: .SQLITE_ERROR, - message: "empty statement", - sql: sql, - arguments: nil) - } - - let remainingSQL = String(cString: statementEnd!).trimmingCharacters(in: .sqlStatementSeparators) - guard remainingSQL.isEmpty else { - throw DatabaseError( - resultCode: .SQLITE_MISUSE, - message: "Multiple statements found. To execute multiple statements, use Database.execute(sql:) instead.", - sql: sql, - arguments: nil) - } - - return statement - } - } -} - -// MARK: - SelectStatement - -/// A subclass of Statement that fetches database rows. -/// -/// You create SelectStatement with the Database.makeSelectStatement() method: -/// -/// try dbQueue.read { db in -/// let statement = try db.makeSelectStatement(sql: "SELECT COUNT(*) FROM player WHERE score > ?") -/// let moreThanTwentyCount = try Int.fetchOne(statement, arguments: [20])! -/// let moreThanThirtyCount = try Int.fetchOne(statement, arguments: [30])! -/// } -public final class SelectStatement : Statement { - /// The database region that the statement looks into. - public private(set) var databaseRegion = DatabaseRegion() - - /// Creates a prepared statement. Returns nil if the compiled string is - /// blank or empty. - /// - /// - parameter database: A database connection. - /// - parameter statementStart: A pointer to a UTF-8 encoded C string - /// containing SQL. - /// - parameter statementEnd: Upon success, the pointer to the next - /// statement in the C string. - /// - parameter prepFlags: Flags for sqlite3_prepare_v3 (available from - /// SQLite 3.20.0, see http://www.sqlite.org/c3ref/prepare.html) - /// - authorizer: A StatementCompilationAuthorizer - /// - throws: DatabaseError in case of compilation error. - required init?( - database: Database, - statementStart: UnsafePointer, - statementEnd: UnsafeMutablePointer?>, - prepFlags: Int32, - authorizer: StatementCompilationAuthorizer) throws - { - try super.init( - database: database, - statementStart: statementStart, - statementEnd: statementEnd, - prepFlags: prepFlags, - authorizer: authorizer) - - GRDBPrecondition(authorizer.invalidatesDatabaseSchemaCache == false, "Invalid statement type for query \(String(reflecting: sql)): use UpdateStatement instead.") - GRDBPrecondition(authorizer.transactionEffect == nil, "Invalid statement type for query \(String(reflecting: sql)): use UpdateStatement instead.") - - self.databaseRegion = authorizer.databaseRegion - } - - /// The number of columns in the resulting rows. - public var columnCount: Int { - return Int(sqlite3_column_count(self.sqliteStatement)) - } - - /// The column names, ordered from left to right. - public lazy var columnNames: [String] = { - let sqliteStatement = self.sqliteStatement - return (0.. Int? { - return columnIndexes[name.lowercased()] - } - - /// Creates a cursor over the statement which does not produce any - /// value. Each call to the next() cursor method calls the sqlite3_step() - /// C function. - func makeCursor(arguments: StatementArguments? = nil) -> StatementCursor { - return StatementCursor(statement: self, arguments: arguments) - } - - /// Utility function for cursors - func reset(withArguments arguments: StatementArguments? = nil) { - prepare(withArguments: arguments) - try! reset() - } - - /// Utility function for cursors - @usableFromInline - func didFail(withResultCode resultCode: Int32) throws -> Never { - database.selectStatementDidFail(self) - throw DatabaseError( - resultCode: resultCode, - message: database.lastErrorMessage, - sql: sql, - arguments: arguments) - - } -} - -/// A cursor that iterates a database statement without producing any value. -/// Each call to the next() cursor method calls the sqlite3_step() C function. -/// -/// For example: -/// -/// try dbQueue.read { db in -/// let statement = db.makeSelectStatement(sql: "SELECT performSideEffect()") -/// let cursor = statement.makeCursor() -/// try cursor.next() -/// } -final class StatementCursor: Cursor { - let _statement: SelectStatement - let _sqliteStatement: SQLiteStatement - var _done = false - - // Use SelectStatement.makeCursor() instead - init(statement: SelectStatement, arguments: StatementArguments? = nil) { - _statement = statement - _sqliteStatement = statement.sqliteStatement - _statement.reset(withArguments: arguments) - } - - deinit { - // Statement reset fails when sqlite3_step has previously failed. - // Just ignore reset error. - try? _statement.reset() - } - - /// :nodoc: - @inlinable - func next() throws -> Void? { - if _done { - // make sure this instance never yields a value again, even if the - // statement is reset by another cursor. - return nil - } - switch sqlite3_step(_sqliteStatement) { - case SQLITE_DONE: - _done = true - return nil - case SQLITE_ROW: - return .some(()) - case let code: - try _statement.didFail(withResultCode: code) - } - } -} - - -// MARK: - UpdateStatement - -/// A subclass of Statement that executes SQL queries. -/// -/// You create UpdateStatement with the Database.makeUpdateStatement() method: -/// -/// try dbQueue.inTransaction { db in -/// let statement = try db.makeUpdateStatement(sql: "INSERT INTO player (name) VALUES (?)") -/// try statement.execute(arguments: ["Arthur"]) -/// try statement.execute(arguments: ["Barbara"]) -/// return .commit -/// } -public final class UpdateStatement : Statement { - enum TransactionEffect { - case beginTransaction - case commitTransaction - case rollbackTransaction - case beginSavepoint(String) - case releaseSavepoint(String) - case rollbackSavepoint(String) - } - - /// If true, the database schema cache gets invalidated after this statement - /// is executed. - private(set) var invalidatesDatabaseSchemaCache: Bool = false - - private(set) var transactionEffect: TransactionEffect? - private(set) var databaseEventKinds: [DatabaseEventKind] = [] - - /// Creates a prepared statement. Returns nil if the compiled string is - /// blank or empty. - /// - /// - parameter database: A database connection. - /// - parameter statementStart: A pointer to a UTF-8 encoded C string - /// containing SQL. - /// - parameter statementEnd: Upon success, the pointer to the next - /// statement in the C string. - /// - parameter prepFlags: Flags for sqlite3_prepare_v3 (available from - /// SQLite 3.20.0, see http://www.sqlite.org/c3ref/prepare.html) - /// - authorizer: A StatementCompilationAuthorizer - /// - throws: DatabaseError in case of compilation error. - required init?( - database: Database, - statementStart: UnsafePointer, - statementEnd: UnsafeMutablePointer?>, - prepFlags: Int32, - authorizer: StatementCompilationAuthorizer) throws - { - try super.init( - database: database, - statementStart: statementStart, - statementEnd: statementEnd, - prepFlags: prepFlags, - authorizer: authorizer) - self.invalidatesDatabaseSchemaCache = authorizer.invalidatesDatabaseSchemaCache - self.transactionEffect = authorizer.transactionEffect - self.databaseEventKinds = authorizer.databaseEventKinds - } - - /// Executes the SQL query. - /// - /// - parameter arguments: Optional statement arguments. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func execute(arguments: StatementArguments? = nil) throws { - SchedulingWatchdog.preconditionValidQueue(database) - prepare(withArguments: arguments) - try reset() - database.updateStatementWillExecute(self) - - while true { - switch sqlite3_step(sqliteStatement) { - case SQLITE_ROW: - // The statement did return a row, and the user ignores the - // content of this row: - // - // try db.execute(sql: "SELECT ...") - // - // That's OK: maybe the selected rows perform side effects. - // For example: - // - // try db.execute(sql: "SELECT sqlcipher_export(...)") - // - // Or maybe the user doesn't know that the executed statement - // return rows (https://github.com/groue/GRDB.swift/issues/15); - // - // try db.execute(sql: "PRAGMA journal_mode=WAL") - // - // It is thus important that we consume *all* rows. - continue - - case SQLITE_DONE: - try database.updateStatementDidExecute(self) - return - - case let code: - try database.updateStatementDidFail(self) - throw DatabaseError(resultCode: code, message: database.lastErrorMessage, sql: sql, arguments: self.arguments) // Error uses self.arguments, not the optional arguments parameter. - } - } - } -} - -// MARK: - StatementArguments - -/// StatementArguments provide values to argument placeholders in raw -/// SQL queries. -/// -/// Placeholders can take several forms (see https://www.sqlite.org/lang_expr.html#varparam -/// for more information): -/// -/// - `?NNN` (e.g. `?2`): the NNN-th argument (starts at 1) -/// - `?`: the N-th argument, where N is one greater than the largest argument -/// number already assigned -/// - `:AAAA` (e.g. `:name`): named argument -/// - `@AAAA` (e.g. `@name`): named argument -/// - `$AAAA` (e.g. `$name`): named argument -/// -/// ## Positional Arguments -/// -/// To fill question marks placeholders, feed StatementArguments with an array: -/// -/// db.execute( -/// sql: "INSERT ... (?, ?)", -/// arguments: StatementArguments(["Arthur", 41])) -/// -/// // Array literals are automatically converted: -/// db.execute( -/// sql: "INSERT ... (?, ?)", -/// arguments: ["Arthur", 41]) -/// -/// ## Named Arguments -/// -/// To fill named arguments, feed StatementArguments with a dictionary: -/// -/// db.execute( -/// sql: "INSERT ... (:name, :score)", -/// arguments: StatementArguments(["name": "Arthur", "score": 41])) -/// -/// // Dictionary literals are automatically converted: -/// db.execute( -/// sql: "INSERT ... (:name, :score)", -/// arguments: ["name": "Arthur", "score": 41]) -/// -/// ## Concatenating Arguments -/// -/// Several arguments can be concatenated and mixed with the -/// `append(contentsOf:)` method and the `+`, `&+`, `+=` operators: -/// -/// var arguments: StatementArguments = ["Arthur"] -/// arguments += [41] -/// db.execute(sql: "INSERT ... (?, ?)", arguments: arguments) -/// -/// `+` and `+=` operators consider that overriding named arguments is a -/// programmer error: -/// -/// var arguments: StatementArguments = ["name": "Arthur"] -/// arguments += ["name": "Barbara"] -/// // fatal error: already defined statement argument: name -/// -/// `&+` and `append(contentsOf:)` allow overriding named arguments: -/// -/// var arguments: StatementArguments = ["name": "Arthur"] -/// arguments = arguments &+ ["name": "Barbara"] -/// print(arguments) -/// // Prints ["name": "Barbara"] -/// -/// ## Mixed Arguments -/// -/// It is possible to mix named and positional arguments. Yet this is usually -/// confusing, and it is best to avoid this practice: -/// -/// let sql = "SELECT ?2 AS two, :foo AS foo, ?1 AS one, :foo AS foo2, :bar AS bar" -/// var arguments: StatementArguments = [1, 2, "bar"] + ["foo": "foo"] -/// let row = try Row.fetchOne(db, sql: sql, arguments: arguments)! -/// print(row) -/// // Prints [two:2 foo:"foo" one:1 foo2:"foo" bar:"bar"] -/// -/// Mixed arguments exist as a support for requests like the following: -/// -/// let players = try Player -/// .filter(sql: "team = :team", arguments: ["team": "Blue"]) -/// .filter(sql: "score > ?", arguments: [1000]) -/// .fetchAll(db) -public struct StatementArguments: CustomStringConvertible, Equatable, ExpressibleByArrayLiteral, ExpressibleByDictionaryLiteral { - private(set) var values: [DatabaseValue] = [] - private(set) var namedValues: [String: DatabaseValue] = [:] - - public var isEmpty: Bool { - return values.isEmpty && namedValues.isEmpty - } - - - // MARK: Empty Arguments - - /// Creates empty StatementArguments. - public init() { - } - - // MARK: Positional Arguments - - /// Creates statement arguments from a sequence of optional values. - /// - /// let values: [DatabaseValueConvertible?] = ["foo", 1, nil] - /// db.execute(sql: "INSERT ... (?,?,?)", arguments: StatementArguments(values)) - /// - /// - parameter sequence: A sequence of DatabaseValueConvertible values. - /// - returns: A StatementArguments. - public init(_ sequence: Sequence) where Sequence.Element == DatabaseValueConvertible? { - values = sequence.map { $0?.databaseValue ?? .null } - } - - /// Creates statement arguments from a sequence of optional values. - /// - /// let values: [String] = ["foo", "bar"] - /// db.execute(sql: "INSERT ... (?,?)", arguments: StatementArguments(values)) - /// - /// - parameter sequence: A sequence of DatabaseValueConvertible values. - /// - returns: A StatementArguments. - public init(_ sequence: Sequence) where Sequence.Element: DatabaseValueConvertible { - values = sequence.map { $0.databaseValue } - } - - /// Creates statement arguments from any array. The result is nil unless all - /// array elements adopt DatabaseValueConvertible. - /// - /// - parameter array: An array - /// - returns: A StatementArguments. - public init?(_ array: [Any]) { - var values = [DatabaseValueConvertible?]() - for value in array { - guard let dbValue = DatabaseValue(value: value) else { - return nil - } - values.append(dbValue) - } - self.init(values) - } - - - // MARK: Named Arguments - - /// Creates statement arguments from a sequence of (key, value) dictionary, - /// such as a dictionary. - /// - /// let values: [String: DatabaseValueConvertible?] = ["firstName": nil, "lastName": "Miller"] - /// db.execute(sql: "INSERT ... (:firstName, :lastName)", arguments: StatementArguments(values)) - /// - /// - parameter sequence: A sequence of (key, value) pairs - /// - returns: A StatementArguments. - public init(_ dictionary: [String: DatabaseValueConvertible?]) { - namedValues = dictionary.mapValues { $0?.databaseValue ?? .null } - } - - /// Creates statement arguments from a sequence of (key, value) pairs, such - /// as a dictionary. - /// - /// let values: [String: DatabaseValueConvertible?] = ["firstName": nil, "lastName": "Miller"] - /// db.execute(sql: "INSERT ... (:firstName, :lastName)", arguments: StatementArguments(values)) - /// - /// - parameter sequence: A sequence of (key, value) pairs - /// - returns: A StatementArguments. - public init(_ sequence: Sequence) where Sequence.Element == (String, DatabaseValueConvertible?) { - namedValues = Dictionary(uniqueKeysWithValues: sequence.map { ($0.0, $0.1?.databaseValue ?? .null) }) - } - - /// Creates statement arguments from [AnyHashable: Any]. - /// - /// The result is nil unless all dictionary keys are strings, and values - /// adopt DatabaseValueConvertible. - /// - /// - parameter dictionary: A dictionary. - /// - returns: A StatementArguments. - public init?(_ dictionary: [AnyHashable: Any]) { - var initDictionary = [String: DatabaseValueConvertible?]() - for (key, value) in dictionary { - guard let columnName = key as? String else { - return nil - } - guard let dbValue = DatabaseValue(value: value) else { - return nil - } - initDictionary[columnName] = dbValue - } - self.init(initDictionary) - } - - - // MARK: Adding arguments - - /// Extends statement arguments with other arguments. - /// - /// Positional arguments (provided as arrays) are concatenated: - /// - /// var arguments: StatementArguments = [1] - /// arguments.append(contentsOf: [2, 3]) - /// print(arguments) - /// // Prints [1, 2, 3] - /// - /// Named arguments (provided as dictionaries) are updated: - /// - /// var arguments: StatementArguments = ["foo": 1] - /// arguments.append(contentsOf: ["bar": 2]) - /// print(arguments) - /// // Prints ["foo": 1, "bar": 2] - /// - /// Arguments that were replaced, if any, are returned: - /// - /// var arguments: StatementArguments = ["foo": 1, "bar": 2] - /// let replacedValues = arguments.append(contentsOf: ["foo": 3]) - /// print(arguments) - /// // Prints ["foo": 3, "bar": 2] - /// print(replacedValues) - /// // Prints ["foo": 1] - /// - /// You can mix named and positional arguments (see documentation of - /// the StatementArguments type for more information about mixed arguments): - /// - /// var arguments: StatementArguments = ["foo": 1] - /// arguments.append(contentsOf: [2, 3]) - /// print(arguments) - /// // Prints ["foo": 1, 2, 3] - public mutating func append(contentsOf arguments: StatementArguments) -> [String: DatabaseValue] { - var replacedValues: [String: DatabaseValue] = [:] - values.append(contentsOf: arguments.values) - for (name, value) in arguments.namedValues { - if let replacedValue = namedValues.updateValue(value, forKey: name) { - replacedValues[name] = replacedValue - } - } - return replacedValues - } - - /// Creates a new StatementArguments by extending the left-hand size - /// arguments with the right-hand side arguments. - /// - /// Positional arguments (provided as arrays) are concatenated: - /// - /// let arguments: StatementArguments = [1] + [2, 3] - /// print(arguments) - /// // Prints [1, 2, 3] - /// - /// Named arguments (provided as dictionaries) are updated: - /// - /// let arguments: StatementArguments = ["foo": 1] + ["bar": 2] - /// print(arguments) - /// // Prints ["foo": 1, "bar": 2] - /// - /// You can mix named and positional arguments (see documentation of - /// the StatementArguments type for more information about mixed arguments): - /// - /// let arguments: StatementArguments = ["foo": 1] + [2, 3] - /// print(arguments) - /// // Prints ["foo": 1, 2, 3] - /// - /// If the arguments on the right-hand side has named parameters that are - /// already defined on the left, a fatal error is raised: - /// - /// let arguments: StatementArguments = ["foo": 1] + ["foo": 2] - /// // fatal error: already defined statement argument: foo - /// - /// This fatal error can be avoided with the &+ operator, or the - /// append(contentsOf:) method. - public static func + (lhs: StatementArguments, rhs: StatementArguments) -> StatementArguments { - var lhs = lhs - lhs += rhs - return lhs - } - - /// Creates a new StatementArguments by extending the left-hand size - /// arguments with the right-hand side arguments. - /// - /// Positional arguments (provided as arrays) are concatenated: - /// - /// let arguments: StatementArguments = [1] &+ [2, 3] - /// print(arguments) - /// // Prints [1, 2, 3] - /// - /// Named arguments (provided as dictionaries) are updated: - /// - /// let arguments: StatementArguments = ["foo": 1] &+ ["bar": 2] - /// print(arguments) - /// // Prints ["foo": 1, "bar": 2] - /// - /// You can mix named and positional arguments (see documentation of - /// the StatementArguments type for more information about mixed arguments): - /// - /// let arguments: StatementArguments = ["foo": 1] &+ [2, 3] - /// print(arguments) - /// // Prints ["foo": 1, 2, 3] - /// - /// If a named arguments is defined in both arguments, the right-hand - /// side wins: - /// - /// let arguments: StatementArguments = ["foo": 1] &+ ["foo": 2] - /// print(arguments) - /// // Prints ["foo": 2] - public static func &+ (lhs: StatementArguments, rhs: StatementArguments) -> StatementArguments { - var lhs = lhs - _ = lhs.append(contentsOf: rhs) - return lhs - } - - /// Extends the left-hand size arguments with the right-hand side arguments. - /// - /// Positional arguments (provided as arrays) are concatenated: - /// - /// var arguments: StatementArguments = [1] - /// arguments += [2, 3] - /// print(arguments) - /// // Prints [1, 2, 3] - /// - /// Named arguments (provided as dictionaries) are updated: - /// - /// var arguments: StatementArguments = ["foo": 1] - /// arguments += ["bar": 2] - /// print(arguments) - /// // Prints ["foo": 1, "bar": 2] - /// - /// You can mix named and positional arguments (see documentation of - /// the StatementArguments type for more information about mixed arguments): - /// - /// var arguments: StatementArguments = ["foo": 1] - /// arguments.append(contentsOf: [2, 3]) - /// print(arguments) - /// // Prints ["foo": 1, 2, 3] - /// - /// If the arguments on the right-hand side has named parameters that are - /// already defined on the left, a fatal error is raised: - /// - /// var arguments: StatementArguments = ["foo": 1] - /// arguments += ["foo": 2] - /// // fatal error: already defined statement argument: foo - /// - /// This fatal error can be avoided with the &+ operator, or the - /// append(contentsOf:) method. - public static func += (lhs: inout StatementArguments, rhs: StatementArguments) { - let replacedValues = lhs.append(contentsOf: rhs) - GRDBPrecondition(replacedValues.isEmpty, "already defined statement argument: \(replacedValues.keys.joined(separator: ", "))") - } - - - // MARK: Not Public - - mutating func extractBindings(forStatement statement: Statement, allowingRemainingValues: Bool) throws -> [DatabaseValue] { - let initialValuesCount = values.count - let bindings = try statement.sqliteArgumentNames.map { argumentName -> DatabaseValue in - if let argumentName = argumentName { - if let dbValue = namedValues[argumentName] { - return dbValue - } else if values.isEmpty { - throw DatabaseError(resultCode: .SQLITE_MISUSE, message: "missing statement argument: \(argumentName)", sql: statement.sql, arguments: nil) - } else { - return values.removeFirst() - } - } else { - if values.isEmpty { - throw DatabaseError(resultCode: .SQLITE_MISUSE, message: "wrong number of statement arguments: \(initialValuesCount)", sql: statement.sql, arguments: nil) - } else { - return values.removeFirst() - } - } - } - if !allowingRemainingValues && !values.isEmpty { - throw DatabaseError(resultCode: .SQLITE_MISUSE, message: "wrong number of statement arguments: \(initialValuesCount)", sql: statement.sql, arguments: nil) - } - return bindings - } -} - -// ExpressibleByArrayLiteral -extension StatementArguments { - /// Returns a StatementArguments from an array literal: - /// - /// let arguments: StatementArguments = ["Arthur", 41] - /// try db.execute( - /// sql: "INSERT INTO player (name, score) VALUES (?, ?)" - /// arguments: arguments) - public init(arrayLiteral elements: DatabaseValueConvertible?...) { - self.init(elements) - } -} - -// ExpressibleByDictionaryLiteral -extension StatementArguments { - /// Returns a StatementArguments from a dictionary literal: - /// - /// let arguments: StatementArguments = ["name": "Arthur", "score": 41] - /// try db.execute( - /// sql: "INSERT INTO player (name, score) VALUES (:name, :score)" - /// arguments: arguments) - public init(dictionaryLiteral elements: (String, DatabaseValueConvertible?)...) { - self.init(elements) - } -} - -// CustomStringConvertible -extension StatementArguments { - /// :nodoc: - public var description: String { - let valuesDescriptions = values.map { $0.description } - let namedValuesDescriptions = namedValues.map { (key, value) -> String in - return "\(String(reflecting: key)): \(value)" - } - return "[" + (namedValuesDescriptions + valuesDescriptions).joined(separator: ", ") + "]" - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/StatementAuthorizer.swift b/Example/Pods/GRDB.swift/GRDB/Core/StatementAuthorizer.swift deleted file mode 100755 index e94bfa4..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/StatementAuthorizer.swift +++ /dev/null @@ -1,184 +0,0 @@ -#if os(Linux) - import Glibc -#endif -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// A protocol around sqlite3_set_authorizer -protocol StatementAuthorizer : class { - func authorize( - _ actionCode: Int32, - _ cString1: UnsafePointer?, - _ cString2: UnsafePointer?, - _ cString3: UnsafePointer?, - _ cString4: UnsafePointer?) - -> Int32 -} - -/// A class that gathers information about one statement during its compilation. -final class StatementCompilationAuthorizer : StatementAuthorizer { - /// What this statements reads - var databaseRegion = DatabaseRegion() - - /// What this statements writes - var databaseEventKinds: [DatabaseEventKind] = [] - - /// True if a statement alter the schema in a way that required schema cache - /// invalidation. For example, adding a column to a table invalidates the - /// schema cache, but not creating a table. - var invalidatesDatabaseSchemaCache = false - - /// Not nil if a statement is a BEGIN/COMMIT/ROLLBACK/RELEASE transaction or - /// savepoint statement. - var transactionEffect: UpdateStatement.TransactionEffect? - - private var isDropStatement = false - - func authorize( - _ actionCode: Int32, - _ cString1: UnsafePointer?, - _ cString2: UnsafePointer?, - _ cString3: UnsafePointer?, - _ cString4: UnsafePointer?) - -> Int32 - { - // print("StatementCompilationAuthorizer: \(actionCode) \([cString1, cString2, cString3, cString4].flatMap { $0.map({ String(cString: $0) }) })") - - switch actionCode { - case SQLITE_DROP_TABLE, SQLITE_DROP_VTABLE, SQLITE_DROP_TEMP_TABLE, - SQLITE_DROP_INDEX, SQLITE_DROP_TEMP_INDEX, - SQLITE_DROP_VIEW, SQLITE_DROP_TEMP_VIEW, - SQLITE_DROP_TRIGGER, SQLITE_DROP_TEMP_TRIGGER: - isDropStatement = true - invalidatesDatabaseSchemaCache = true - return SQLITE_OK - - case SQLITE_ALTER_TABLE, SQLITE_DETACH, - SQLITE_CREATE_INDEX, SQLITE_CREATE_TABLE, - SQLITE_CREATE_TEMP_INDEX, SQLITE_CREATE_TEMP_TABLE, - SQLITE_CREATE_TEMP_TRIGGER, SQLITE_CREATE_TEMP_VIEW, - SQLITE_CREATE_TRIGGER, SQLITE_CREATE_VIEW: - invalidatesDatabaseSchemaCache = true - return SQLITE_OK - - case SQLITE_READ: - guard let tableName = cString1.map({ String(cString: $0) }) else { return SQLITE_OK } - guard let columnName = cString2.map({ String(cString: $0) }) else { return SQLITE_OK } - if columnName.isEmpty { - // SELECT COUNT(*) FROM table - databaseRegion.formUnion(DatabaseRegion(table: tableName)) - } else { - // SELECT column FROM table - databaseRegion.formUnion(DatabaseRegion(table: tableName, columns: [columnName])) - } - return SQLITE_OK - - case SQLITE_INSERT: - guard let tableName = cString1.map({ String(cString: $0) }) else { return SQLITE_OK } - databaseEventKinds.append(.insert(tableName: tableName)) - return SQLITE_OK - - case SQLITE_DELETE: - if isDropStatement { return SQLITE_OK } - guard let cString1 = cString1 else { return SQLITE_OK } - - // Deletions from sqlite_master and sqlite_temp_master are not like - // other deletions: the update hook does not notify them, and they - // are prevented when the truncate optimization is disabled. - // Let's authorize such deletions by returning SQLITE_OK: - guard strcmp(cString1, "sqlite_master") != 0 else { return SQLITE_OK } - guard strcmp(cString1, "sqlite_temp_master") != 0 else { return SQLITE_OK } - - // Now we prevent the truncate optimization so that transaction - // observers are notified of individual row deletions. - databaseEventKinds.append(.delete(tableName: String(cString: cString1))) - return SQLITE_IGNORE - - case SQLITE_UPDATE: - guard let tableName = cString1.map({ String(cString: $0) }) else { return SQLITE_OK } - guard let columnName = cString2.map({ String(cString: $0) }) else { return SQLITE_OK } - insertUpdateEventKind(tableName: tableName, columnName: columnName) - return SQLITE_OK - - case SQLITE_TRANSACTION: - guard let cString1 = cString1 else { return SQLITE_OK } - if strcmp(cString1, "BEGIN") == 0 { - transactionEffect = .beginTransaction - } else if strcmp(cString1, "COMMIT") == 0 { - transactionEffect = .commitTransaction - } else if strcmp(cString1, "ROLLBACK") == 0 { - transactionEffect = .rollbackTransaction - } - return SQLITE_OK - - case SQLITE_SAVEPOINT: - guard let cString1 = cString1 else { return SQLITE_OK } - guard let name = cString2.map({ String(cString: $0) }) else { return SQLITE_OK } - if strcmp(cString1, "BEGIN") == 0 { - transactionEffect = .beginSavepoint(name) - } else if strcmp(cString1, "RELEASE") == 0 { - transactionEffect = .releaseSavepoint(name) - } else if strcmp(cString1, "ROLLBACK") == 0 { - transactionEffect = .rollbackSavepoint(name) - } - return SQLITE_OK - - case SQLITE_FUNCTION: - // Starting SQLite 3.19.0, `SELECT COUNT(*) FROM table` triggers - // an authorization callback for SQLITE_READ with an empty - // column: http://www.sqlite.org/changes.html#version_3_19_0 - // - // Before SQLite 3.19.0, `SELECT COUNT(*) FROM table` does not - // trigger any authorization callback that tells about the - // counted table: any use of the COUNT function makes the - // region undetermined (the full database). - guard sqlite3_libversion_number() < 3019000 else { return SQLITE_OK } - guard let cString2 = cString2 else { return SQLITE_OK } - if sqlite3_stricmp(cString2, "COUNT") == 0 { - databaseRegion = .fullDatabase - } - return SQLITE_OK - - default: - return SQLITE_OK - } - } - - func insertUpdateEventKind(tableName: String, columnName: String) { - for (index, eventKind) in databaseEventKinds.enumerated() { - if case .update(let t, let columnNames) = eventKind, t == tableName { - var columnNames = columnNames - columnNames.insert(columnName) - databaseEventKinds[index] = .update(tableName: tableName, columnNames: columnNames) - return - } - } - databaseEventKinds.append(.update(tableName: tableName, columnNames: [columnName])) - } -} - -/// This authorizer prevents the [truncate optimization](https://www.sqlite.org/lang_delete.html#truncateopt) -/// which makes transaction observers unable to observe individual deletions -/// when user runs `DELETE FROM t` statements. -// -/// Warning: to perform well, this authorizer must be used during statement -/// execution, not during statement compilation. -final class TruncateOptimizationBlocker : StatementAuthorizer { - func authorize( - _ actionCode: Int32, - _ cString1: UnsafePointer?, - _ cString2: UnsafePointer?, - _ cString3: UnsafePointer?, - _ cString4: UnsafePointer?) - -> Int32 - { - // print("TruncateOptimizationBlocker: \(actionCode) \([cString1, cString2, cString3, cString4].flatMap { $0.map({ String(cString: $0) }) })") - return (actionCode == SQLITE_DELETE) ? SQLITE_IGNORE : SQLITE_OK - } -} - diff --git a/Example/Pods/GRDB.swift/GRDB/Core/StatementColumnConvertible.swift b/Example/Pods/GRDB.swift/GRDB/Core/StatementColumnConvertible.swift deleted file mode 100755 index f0a03fa..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/StatementColumnConvertible.swift +++ /dev/null @@ -1,570 +0,0 @@ -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// The StatementColumnConvertible protocol grants access to the low-level C -/// interface that extracts values from query results: -/// https://www.sqlite.org/c3ref/column_blob.html. It can bring performance -/// improvements. -/// -/// To use it, have a value type adopt both StatementColumnConvertible and -/// DatabaseValueConvertible. GRDB will then automatically apply the -/// optimization whenever direct access to SQLite is possible: -/// -/// let rows = Row.fetchCursor(db, sql: "SELECT ...") -/// while let row = try rows.next() { -/// let int: Int = row[0] // there -/// } -/// let ints = Int.fetchAll(db, sql: "SELECT ...") // there -/// struct Player { -/// init(row: Row) { -/// name = row["name"] // there -/// score = row["score"] // there -/// } -/// } -/// -/// StatementColumnConvertible is already adopted by all Swift integer types, -/// Float, Double, String, and Bool. -public protocol StatementColumnConvertible { - - /// Initializes a value from a raw SQLite statement pointer. - /// - /// For example, here is the how Int64 adopts StatementColumnConvertible: - /// - /// extension Int64: StatementColumnConvertible { - /// init(sqliteStatement: SQLiteStatement, index: Int32) { - /// self = sqlite3_column_int64(sqliteStatement, index) - /// } - /// } - /// - /// This initializer is never called for NULL database values: don't perform - /// any extra check. - /// - /// See https://www.sqlite.org/c3ref/column_blob.html for more information. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - init(sqliteStatement: SQLiteStatement, index: Int32) -} - -/// A cursor of database values extracted from a single column. -/// For example: -/// -/// try dbQueue.read { db in -/// let names: ColumnCursor = try String.fetchCursor(db, sql: "SELECT name FROM player") -/// while let name = names.next() { // String -/// print(name) -/// } -/// } -public final class FastDatabaseValueCursor : Cursor { - @usableFromInline let _statement: SelectStatement - @usableFromInline let _columnIndex: Int32 - @usableFromInline let _sqliteStatement: SQLiteStatement - @usableFromInline var _done = false - - init(statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws { - _statement = statement - _sqliteStatement = statement.sqliteStatement - if let adapter = adapter { - // adapter may redefine the index of the leftmost column - _columnIndex = try Int32(adapter.baseColumnIndex(atIndex: 0, layout: statement)) - } else { - _columnIndex = 0 - } - _statement.reset(withArguments: arguments) - } - - deinit { - // Statement reset fails when sqlite3_step has previously failed. - // Just ignore reset error. - try? _statement.reset() - } - - /// :nodoc: - @inlinable - public func next() throws -> Value? { - if _done { - // make sure this instance never yields a value again, even if the - // statement is reset by another cursor. - return nil - } - switch sqlite3_step(_sqliteStatement) { - case SQLITE_DONE: - _done = true - return nil - case SQLITE_ROW: - return Value.fastDecode(from: _sqliteStatement, atUncheckedIndex: _columnIndex) - case let code: - try _statement.didFail(withResultCode: code) - } - } -} - -/// A cursor of optional database values extracted from a single column. -/// For example: -/// -/// try dbQueue.read { db in -/// let emails: NullableColumnCursor = try Optional.fetchCursor(db, sql: "SELECT email FROM player") -/// while let email = emails.next() { // String? -/// print(email ?? "") -/// } -/// } -public final class FastNullableDatabaseValueCursor : Cursor { - @usableFromInline let _statement: SelectStatement - @usableFromInline let _columnIndex: Int32 - @usableFromInline let _sqliteStatement: SQLiteStatement - @usableFromInline var _done = false - - init(statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws { - _statement = statement - _sqliteStatement = statement.sqliteStatement - if let adapter = adapter { - // adapter may redefine the index of the leftmost column - _columnIndex = try Int32(adapter.baseColumnIndex(atIndex: 0, layout: statement)) - } else { - _columnIndex = 0 - } - _statement.reset(withArguments: arguments) - } - - deinit { - // Statement reset fails when sqlite3_step has previously failed. - // Just ignore reset error. - try? _statement.reset() - } - - /// :nodoc: - @inlinable - public func next() throws -> Value?? { - if _done { - // make sure this instance never yields a value again, even if the - // statement is reset by another cursor. - return nil - } - switch sqlite3_step(_sqliteStatement) { - case SQLITE_DONE: - _done = true - return nil - case SQLITE_ROW: - return Value.fastDecodeIfPresent(from: _sqliteStatement, atUncheckedIndex: _columnIndex) - case let code: - try _statement.didFail(withResultCode: code) - } - } -} - -/// Types that adopt both DatabaseValueConvertible and -/// StatementColumnConvertible can be efficiently initialized from -/// database values. -/// -/// See DatabaseValueConvertible for more information. -extension DatabaseValueConvertible where Self: StatementColumnConvertible { - - - // MARK: Fetching From SelectStatement - - /// Returns a cursor over values fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let names = try String.fetchCursor(statement) // Cursor of String - /// while let name = try names.next() { // String - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> FastDatabaseValueCursor { - return try FastDatabaseValueCursor(statement: statement, arguments: arguments, adapter: adapter) - } - - /// Returns an array of values fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let names = try String.fetchAll(statement) // [String] - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Self] { - return try Array(fetchCursor(statement, arguments: arguments, adapter: adapter)) - } - - /// Returns a single value fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let name = try String.fetchOne(statement) // String? - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An optional value. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> Self? { - // fetchOne returns nil if there is no row, or if there is a row with a null value - let cursor = try FastNullableDatabaseValueCursor(statement: statement, arguments: arguments, adapter: adapter) - return try cursor.next() ?? nil - } -} - -extension DatabaseValueConvertible where Self: StatementColumnConvertible { - - // MARK: Fetching From SQL - - /// Returns a cursor over values fetched from an SQL query. - /// - /// let names = try String.fetchCursor(db, sql: "SELECT name FROM ...") // Cursor of String - /// while let name = try names.next() { // String - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> FastDatabaseValueCursor { - return try fetchCursor(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns an array of values fetched from an SQL query. - /// - /// let names = try String.fetchAll(db, sql: "SELECT name FROM ...") // [String] - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> [Self] { - return try fetchAll(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns a single value fetched from an SQL query. - /// - /// let name = try String.fetchOne(db, sql: "SELECT name FROM ...") // String? - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An optional value. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> Self? { - return try fetchOne(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } -} - -extension DatabaseValueConvertible where Self: StatementColumnConvertible { - - // MARK: Fetching From FetchRequest - - /// Returns a cursor over values fetched from a fetch request. - /// - /// let request = Player.select(Column("name")) - /// let names = try String.fetchCursor(db, request) // Cursor of String - /// while let name = try names.next() { // String - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, _ request: R) throws -> FastDatabaseValueCursor { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchCursor(statement, adapter: adapter) - } - - /// Returns an array of values fetched from a fetch request. - /// - /// let request = Player.select(Column("name")) - /// let names = try String.fetchAll(db, request) // [String] - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An array of values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, _ request: R) throws -> [Self] { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchAll(statement, adapter: adapter) - } - - /// Returns a single value fetched from a fetch request. - /// - /// let request = Player.filter(key: 1).select(Column("name")) - /// let name = try String.fetchOne(db, request) // String? - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An optional value. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, _ request: R) throws -> Self? { - let (statement, adapter) = try request.prepare(db, forSingleResult: true) - return try fetchOne(statement, adapter: adapter) - } -} - -extension FetchRequest where RowDecoder: DatabaseValueConvertible & StatementColumnConvertible { - - // MARK: Fetching Values - - /// A cursor over fetched values. - /// - /// let request: ... // Some FetchRequest that fetches String - /// let strings = try request.fetchCursor(db) // Cursor of String - /// while let string = try strings.next() { // String - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameter db: A database connection. - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchCursor(_ db: Database) throws -> FastDatabaseValueCursor { - return try RowDecoder.fetchCursor(db, self) - } - - /// An array of fetched values. - /// - /// let request: ... // Some FetchRequest that fetches String - /// let strings = try request.fetchAll(db) // [String] - /// - /// - parameter db: A database connection. - /// - returns: An array of values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchAll(_ db: Database) throws -> [RowDecoder] { - return try RowDecoder.fetchAll(db, self) - } - - /// The first fetched value. - /// - /// The result is nil if the request returns no row, or if no value can be - /// extracted from the first row. - /// - /// let request: ... // Some FetchRequest that fetches String - /// let string = try request.fetchOne(db) // String? - /// - /// - parameter db: A database connection. - /// - returns: An optional value. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchOne(_ db: Database) throws -> RowDecoder? { - return try RowDecoder.fetchOne(db, self) - } -} - -/// Swift's Optional comes with built-in methods that allow to fetch cursors -/// and arrays of optional DatabaseValueConvertible: -/// -/// try Optional.fetchCursor(db, sql: "SELECT name FROM ...", arguments:...) // Cursor of String? -/// try Optional.fetchAll(db, sql: "SELECT name FROM ...", arguments:...) // [String?] -/// -/// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") -/// try Optional.fetchCursor(statement, arguments:...) // Cursor of String? -/// try Optional.fetchAll(statement, arguments:...) // [String?] -/// -/// DatabaseValueConvertible is adopted by Bool, Int, String, etc. -extension Optional where Wrapped: DatabaseValueConvertible & StatementColumnConvertible { - - // MARK: Fetching From SelectStatement - - /// Returns a cursor over optional values fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let names = try Optional.fetchCursor(statement) // Cursor of String? - /// while let name = try names.next() { // String? - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> FastNullableDatabaseValueCursor { - return try FastNullableDatabaseValueCursor(statement: statement, arguments: arguments, adapter: adapter) - } - - /// Returns an array of optional values fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT name FROM ...") - /// let names = try Optional.fetchAll(statement) // [String?] - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Wrapped?] { - return try Array(fetchCursor(statement, arguments: arguments, adapter: adapter)) - } -} - -extension Optional where Wrapped: DatabaseValueConvertible & StatementColumnConvertible { - - // MARK: Fetching From SQL - - /// Returns a cursor over optional values fetched from an SQL query. - /// - /// let names = try Optional.fetchCursor(db, sql: "SELECT name FROM ...") // Cursor of String? - /// while let name = try names.next() { // String? - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> FastNullableDatabaseValueCursor { - return try fetchCursor(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns an array of optional values fetched from an SQL query. - /// - /// let names = try String.fetchAll(db, sql: "SELECT name FROM ...") // [String?] - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> [Wrapped?] { - return try fetchAll(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } -} - -extension Optional where Wrapped: DatabaseValueConvertible & StatementColumnConvertible { - - // MARK: Fetching From FetchRequest - - /// Returns a cursor over optional values fetched from a fetch request. - /// - /// let request = Player.select(Column("name")) - /// let names = try Optional.fetchCursor(db, request) // Cursor of String? - /// while let name = try names.next() { // String? - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: A cursor over fetched optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, _ request: R) throws -> FastNullableDatabaseValueCursor { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchCursor(statement, adapter: adapter) - } - - /// Returns an array of optional values fetched from a fetch request. - /// - /// let request = Player.select(Column("name")) - /// let names = try Optional.fetchAll(db, request) // [String?] - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An array of optional values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, _ request: R) throws -> [Wrapped?] { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchAll(statement, adapter: adapter) - } -} - -extension FetchRequest where RowDecoder: _OptionalProtocol, RowDecoder._Wrapped: DatabaseValueConvertible & StatementColumnConvertible { - - // MARK: Fetching Optional values - - /// A cursor over fetched optional values. - /// - /// let request: ... // Some FetchRequest that fetches Optional - /// let strings = try request.fetchCursor(db) // Cursor of String? - /// while let string = try strings.next() { // String? - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameter db: A database connection. - /// - returns: A cursor over fetched values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchCursor(_ db: Database) throws -> FastNullableDatabaseValueCursor { - return try Optional.fetchCursor(db, self) - } - - /// An array of fetched optional values. - /// - /// let request: ... // Some FetchRequest that fetches Optional - /// let strings = try request.fetchAll(db) // [String?] - /// - /// - parameter db: A database connection. - /// - returns: An array of values. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchAll(_ db: Database) throws -> [RowDecoder._Wrapped?] { - return try Optional.fetchAll(db, self) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/CoreGraphics/CGFloat.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/CoreGraphics/CGFloat.swift deleted file mode 100755 index 444dc0c..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/CoreGraphics/CGFloat.swift +++ /dev/null @@ -1,20 +0,0 @@ -#if canImport(CoreGraphics) -import CoreGraphics - -/// CGFloat adopts DatabaseValueConvertible -extension CGFloat : DatabaseValueConvertible { - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Double(self).databaseValue - } - - /// Returns a CGFloat initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> CGFloat? { - guard let double = Double.fromDatabaseValue(dbValue) else { - return nil - } - return CGFloat(double) - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/Data.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/Data.swift deleted file mode 100755 index 8c4202b..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/Data.swift +++ /dev/null @@ -1,41 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// Data is convertible to and from DatabaseValue. -extension Data : DatabaseValueConvertible, StatementColumnConvertible { - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - if let bytes = sqlite3_column_blob(sqliteStatement, index) { - let count = Int(sqlite3_column_bytes(sqliteStatement, index)) - self.init(bytes: bytes, count: count) // copy bytes - } else { - self.init() - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return DatabaseValue(storage: .blob(self)) - } - - /// Returns a Data initialized from *dbValue*, if it contains - /// a Blob. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Data? { - switch dbValue.storage { - case .blob(let data): - return data - case .string(let string): - // Implicit conversion from string to blob, just as SQLite does - // See https://www.sqlite.org/c3ref/column_blob.html - return string.data(using: .utf8) - default: - return nil - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/DatabaseDateComponents.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/DatabaseDateComponents.swift deleted file mode 100755 index f84be49..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/DatabaseDateComponents.swift +++ /dev/null @@ -1,158 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// DatabaseDateComponents reads and stores DateComponents in the database. -public struct DatabaseDateComponents : DatabaseValueConvertible, StatementColumnConvertible { - - /// The available formats for reading and storing date components. - public enum Format : String { - - /// The format "yyyy-MM-dd". - case YMD = "yyyy-MM-dd" - - /// The format "yyyy-MM-dd HH:mm". - /// - /// This format is lexically comparable with SQLite's CURRENT_TIMESTAMP. - case YMD_HM = "yyyy-MM-dd HH:mm" - - /// The format "yyyy-MM-dd HH:mm:ss". - /// - /// This format is lexically comparable with SQLite's CURRENT_TIMESTAMP. - case YMD_HMS = "yyyy-MM-dd HH:mm:ss" - - /// The format "yyyy-MM-dd HH:mm:ss.SSS". - /// - /// This format is lexically comparable with SQLite's CURRENT_TIMESTAMP. - case YMD_HMSS = "yyyy-MM-dd HH:mm:ss.SSS" - - /// The format "HH:mm". - case HM = "HH:mm" - - /// The format "HH:mm:ss". - case HMS = "HH:mm:ss" - - /// The format "HH:mm:ss.SSS". - case HMSS = "HH:mm:ss.SSS" - - var hasYMDComponents: Bool { - switch self { - case .YMD, .YMD_HM, .YMD_HMS, .YMD_HMSS: - return true - case .HM, .HMS, .HMSS: - return false - } - } - } - - // MARK: - NSDateComponents conversion - - /// The date components - public let dateComponents: DateComponents - - /// The database format - public let format: Format - - /// Creates a DatabaseDateComponents from a DateComponents and a format. - /// - /// - parameters: - /// - dateComponents: An optional DateComponents. - /// - format: The format used for storing the date components in - /// the database. - public init(_ dateComponents: DateComponents, format: Format) { - self.format = format - self.dateComponents = dateComponents - } - - // MARK: - StatementColumnConvertible adoption - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - public init(sqliteStatement: SQLiteStatement, index: Int32) { - guard let cString = sqlite3_column_text(sqliteStatement, index) else { - fatalConversionError(to: DatabaseDateComponents.self, sqliteStatement: sqliteStatement, index: index) - } - let length = Int(sqlite3_column_bytes(sqliteStatement, index)) // avoid an strlen - let optionalComponents = cString.withMemoryRebound(to: Int8.self, capacity: length + 1 /* trailing \0 */) { cString in - SQLiteDateParser().components(cString: cString, length: length) - } - guard let components = optionalComponents else { - fatalConversionError(to: DatabaseDateComponents.self, sqliteStatement: sqliteStatement, index: index) - } - self.dateComponents = components.dateComponents - self.format = components.format - } - - // MARK: - DatabaseValueConvertible adoption - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - let dateString: String? - switch format { - case .YMD_HM, .YMD_HMS, .YMD_HMSS, .YMD: - let year = dateComponents.year ?? 0 - let month = dateComponents.month ?? 1 - let day = dateComponents.day ?? 1 - dateString = String(format: "%04d-%02d-%02d", year, month, day) - default: - dateString = nil - } - - let timeString: String? - switch format { - case .YMD_HM, .HM: - let hour = dateComponents.hour ?? 0 - let minute = dateComponents.minute ?? 0 - timeString = String(format: "%02d:%02d", hour, minute) - case .YMD_HMS, .HMS: - let hour = dateComponents.hour ?? 0 - let minute = dateComponents.minute ?? 0 - let second = dateComponents.second ?? 0 - timeString = String(format: "%02d:%02d:%02d", hour, minute, second) - case .YMD_HMSS, .HMSS: - let hour = dateComponents.hour ?? 0 - let minute = dateComponents.minute ?? 0 - let second = dateComponents.second ?? 0 - let nanosecond = dateComponents.nanosecond ?? 0 - timeString = String(format: "%02d:%02d:%02d.%03d", hour, minute, second, Int(round(Double(nanosecond) / 1_000_000.0))) - default: - timeString = nil - } - - return [dateString, timeString].compactMap { $0 }.joined(separator: " ").databaseValue - } - - /// Returns a DatabaseDateComponents if *dbValue* contains a - /// valid date. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> DatabaseDateComponents? { - // https://www.sqlite.org/lang_datefunc.html - // - // Supported formats are: - // - // - YYYY-MM-DD - // - YYYY-MM-DD HH:MM - // - YYYY-MM-DD HH:MM:SS - // - YYYY-MM-DD HH:MM:SS.SSS - // - YYYY-MM-DDTHH:MM - // - YYYY-MM-DDTHH:MM:SS - // - YYYY-MM-DDTHH:MM:SS.SSS - // - HH:MM - // - HH:MM:SS - // - HH:MM:SS.SSS - - // We need a String - guard let string = String.fromDatabaseValue(dbValue) else { - return nil - } - - return SQLiteDateParser().components(from: string) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/DatabaseValueConvertible+ReferenceConvertible.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/DatabaseValueConvertible+ReferenceConvertible.swift deleted file mode 100755 index d5fedd5..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/DatabaseValueConvertible+ReferenceConvertible.swift +++ /dev/null @@ -1,41 +0,0 @@ -import Foundation - -/// DatabaseValueConvertible is free for ReferenceConvertible types whose -/// ReferenceType is itself DatabaseValueConvertible. -/// -/// class FooReference { ... } -/// struct Foo : ReferenceConvertible { -/// typealias ReferenceType = FooReference -/// } -/// -/// // If the ReferenceType adopts DatabaseValueConvertible... -/// extension FooReference : DatabaseValueConvertible { ... } -/// -/// // ... then the ReferenceConvertible type can freely adopt DatabaseValueConvertible: -/// extension Foo : DatabaseValueConvertible { /* empty */ } -extension DatabaseValueConvertible where Self: ReferenceConvertible, Self.ReferenceType: DatabaseValueConvertible { - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return (self as! ReferenceType).databaseValue - } - - /// Returns a value initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? { - return ReferenceType.fromDatabaseValue(dbValue).flatMap { cast($0) } - } -} - -extension DatabaseValueConvertible where Self: Decodable & ReferenceConvertible, Self.ReferenceType: DatabaseValueConvertible { - public static func fromDatabaseValue(_ databaseValue: DatabaseValue) -> Self? { - // Preserve custom database decoding - return ReferenceType.fromDatabaseValue(databaseValue).flatMap { cast($0) } - } -} - -extension DatabaseValueConvertible where Self: Encodable & ReferenceConvertible, Self.ReferenceType: DatabaseValueConvertible { - public var databaseValue: DatabaseValue { - // Preserve custom database encoding - return (self as! ReferenceType).databaseValue - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/Date.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/Date.swift deleted file mode 100755 index 4742c84..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/Date.swift +++ /dev/null @@ -1,160 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -#if !os(Linux) -/// NSDate is stored in the database using the format -/// "yyyy-MM-dd HH:mm:ss.SSS", in the UTC time zone. -extension NSDate : DatabaseValueConvertible { - /// Returns a database value that contains the date encoded as - /// "yyyy-MM-dd HH:mm:ss.SSS", in the UTC time zone. - public var databaseValue: DatabaseValue { - return (self as Date).databaseValue - } - - /// Returns a date initialized from dbValue, if possible. - /// - /// If database value contains a number, that number is interpreted as a - /// timeinterval since 00:00:00 UTC on 1 January 1970. - /// - /// If database value contains a string, that string is interpreted as a - /// [SQLite date](https://sqlite.org/lang_datefunc.html) in the UTC time - /// zone. Nil is returned if the date string does not contain at least the - /// year, month and day components. Other components (minutes, etc.) - /// are set to zero if missing. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? { - guard let date = Date.fromDatabaseValue(dbValue) else { - return nil - } - return cast(date) - } -} -#endif - -/// Date is stored in the database using the format -/// "yyyy-MM-dd HH:mm:ss.SSS", in the UTC time zone. -extension Date : DatabaseValueConvertible { - /// Returns a database value that contains the date encoded as - /// "yyyy-MM-dd HH:mm:ss.SSS", in the UTC time zone. - public var databaseValue: DatabaseValue { - return storageDateFormatter.string(from: self).databaseValue - } - - /// Returns a date initialized from dbValue, if possible. - /// - /// If database value contains a number, that number is interpreted as a - /// timeinterval since 00:00:00 UTC on 1 January 1970. - /// - /// If database value contains a string, that string is interpreted as a - /// [SQLite date](https://sqlite.org/lang_datefunc.html) in the UTC time - /// zone. Nil is returned if the date string does not contain at least the - /// year, month and day components. Other components (minutes, etc.) - /// are set to zero if missing. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Date? { - if let databaseDateComponents = DatabaseDateComponents.fromDatabaseValue(dbValue) { - return Date(databaseDateComponents: databaseDateComponents) - } - if let timestamp = Double.fromDatabaseValue(dbValue) { - return Date(timeIntervalSince1970: timestamp) - } - return nil - } - - @usableFromInline - init?(databaseDateComponents: DatabaseDateComponents) { - guard databaseDateComponents.format.hasYMDComponents else { - // Refuse to turn hours without any date information into Date: - return nil - } - guard let date = UTCCalendar.date(from: databaseDateComponents.dateComponents) else { - return nil - } - self.init(timeIntervalSinceReferenceDate: date.timeIntervalSinceReferenceDate) - } - - /// Creates a date from a [Julian Day](https://en.wikipedia.org/wiki/Julian_day). - public init?(julianDay: Double) { - // Conversion uses the same algorithm as SQLite: https://www.sqlite.org/src/artifact/8ec787fed4929d8c - // TODO: check for overflows one day, and return nil when computation can't complete. - let JD = Int64(julianDay * 86400000) - let Z = Int(((JD + 43200000)/86400000)) - var A = Int(((Double(Z) - 1867216.25)/36524.25)) - A = Z + 1 + A - (A/4) - let B = A + 1524 - let C = Int(((Double(B) - 122.1)/365.25)) - let D = (36525*(C&32767))/100 - let E = Int((Double(B-D)/30.6001)) - let X1 = Int((30.6001*Double(E))) - let day = B - D - X1 - let month = E<14 ? E-1 : E-13 - let year = month>2 ? C - 4716 : C - 4715 - var s = Int(((JD + 43200000) % 86400000)) - var second = Double(s)/1000.0 - s = Int(second) - second -= Double(s) - let hour = s/3600 - s -= hour*3600 - let minute = s/60 - second += Double(s - minute*60) - - var dateComponents = DateComponents() - dateComponents.year = year - dateComponents.month = month - dateComponents.day = day - dateComponents.hour = hour - dateComponents.minute = minute - dateComponents.second = Int(second) - dateComponents.nanosecond = Int((second - Double(Int(second))) * 1.0e9) - - guard let date = UTCCalendar.date(from: dateComponents) else { - return nil - } - self.init(timeIntervalSinceReferenceDate: date.timeIntervalSinceReferenceDate) - } -} - -extension Date: StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - switch sqlite3_column_type(sqliteStatement, index) { - case SQLITE_INTEGER, SQLITE_FLOAT: - self.init(timeIntervalSince1970: sqlite3_column_double(sqliteStatement, index)) - case SQLITE_TEXT: - let databaseDateComponents = DatabaseDateComponents(sqliteStatement: sqliteStatement, index: index) - guard let date = Date(databaseDateComponents: databaseDateComponents) else { - fatalConversionError(to: Date.self, sqliteStatement: sqliteStatement, index: index) - } - self.init(timeIntervalSinceReferenceDate: date.timeIntervalSinceReferenceDate) - default: - fatalConversionError(to: Date.self, sqliteStatement: sqliteStatement, index: index) - } - } -} - -/// The DatabaseDate date formatter for stored dates. -private let storageDateFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS" - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.timeZone = TimeZone(secondsFromGMT: 0) - return formatter - }() - -// The NSCalendar for stored dates. -private let UTCCalendar: Calendar = { - var calendar = Calendar(identifier: .gregorian) - calendar.locale = Locale(identifier: "en_US_POSIX") - calendar.timeZone = TimeZone(secondsFromGMT: 0)! - return calendar - }() diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSData.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSData.swift deleted file mode 100755 index 8bd9d2e..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSData.swift +++ /dev/null @@ -1,21 +0,0 @@ -#if !os(Linux) -import Foundation - -/// NSData is convertible to and from DatabaseValue. -extension NSData : DatabaseValueConvertible { - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return (self as Data).databaseValue - } - - /// Returns an NSData initialized from *dbValue*, if it contains - /// a Blob. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? { - guard let data = Data.fromDatabaseValue(dbValue) else { - return nil - } - return cast(data) - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSNull.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSNull.swift deleted file mode 100755 index e954bef..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSNull.swift +++ /dev/null @@ -1,15 +0,0 @@ -import Foundation - -/// NSNull adopts DatabaseValueConvertible -extension NSNull : DatabaseValueConvertible { - - /// Returns DatabaseValue.null. - public var databaseValue: DatabaseValue { - return .null - } - - /// Returns nil. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? { - return nil - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSNumber.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSNumber.swift deleted file mode 100755 index 2caf608..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSNumber.swift +++ /dev/null @@ -1,69 +0,0 @@ -#if !os(Linux) -import Foundation - -private let integerRoundingBehavior = NSDecimalNumberHandler(roundingMode: .plain, scale: 0, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false) - -/// NSNumber adopts DatabaseValueConvertible -extension NSNumber : DatabaseValueConvertible { - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - // Don't lose precision: store integers that fits in Int64 as Int64 - if let decimal = self as? NSDecimalNumber, - decimal == decimal.rounding(accordingToBehavior: integerRoundingBehavior), // integer - decimal.compare(NSDecimalNumber(value: Int64.max)) != .orderedDescending, // decimal <= Int64.max - decimal.compare(NSDecimalNumber(value: Int64.min)) != .orderedAscending // decimal >= Int64.min - { - return int64Value.databaseValue - } - - switch String(cString: objCType) { - case "c": - return Int64(int8Value).databaseValue - case "C": - return Int64(uint8Value).databaseValue - case "s": - return Int64(int16Value).databaseValue - case "S": - return Int64(uint16Value).databaseValue - case "i": - return Int64(int32Value).databaseValue - case "I": - return Int64(uint32Value).databaseValue - case "l": - return Int64(intValue).databaseValue - case "L": - let uint = uintValue - GRDBPrecondition(UInt64(uint) <= UInt64(Int64.max), "could not convert \(uint) to an Int64 that can be stored in the database") - return Int64(uint).databaseValue - case "q": - return Int64(int64Value).databaseValue - case "Q": - let uint64 = uint64Value - GRDBPrecondition(uint64 <= UInt64(Int64.max), "could not convert \(uint64) to an Int64 that can be stored in the database") - return Int64(uint64).databaseValue - case "f": - return Double(floatValue).databaseValue - case "d": - return doubleValue.databaseValue - case "B": - return boolValue.databaseValue - case let objCType: - // Assume a GRDB bug: there is no point throwing any error. - fatalError("DatabaseValueConvertible: Unsupported NSNumber type: \(objCType)") - } - } - - /// Returns an NSNumber initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? { - switch dbValue.storage { - case .int64(let int64): - return self.init(value: int64) - case .double(let double): - return self.init(value: double) - default: - return nil - } - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSString.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSString.swift deleted file mode 100755 index d5455be..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/NSString.swift +++ /dev/null @@ -1,20 +0,0 @@ -#if !os(Linux) -import Foundation - -/// NSString adopts DatabaseValueConvertible -extension NSString : DatabaseValueConvertible { - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return (self as String).databaseValue - } - - /// Returns an NSString initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? { - guard let string = String.fromDatabaseValue(dbValue) else { - return nil - } - return self.init(string: string) - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/SQLiteDateParser.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/SQLiteDateParser.swift deleted file mode 100755 index cd42663..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/SQLiteDateParser.swift +++ /dev/null @@ -1,144 +0,0 @@ -import Foundation - -// inspired by: http://jordansmith.io/performant-date-parsing/ - -class SQLiteDateParser { - - private struct ParserComponents { - var year: Int32 = 0 - var month: Int32 = 0 - var day: Int32 = 0 - var hour: Int32 = 0 - var minute: Int32 = 0 - var second: Int32 = 0 - var nanosecond = ContiguousArray(repeating: 0, count: 10) // 9 digits, and trailing \0 - } - - func components(from dateString: String) -> DatabaseDateComponents? { - return dateString.withCString { cString in - components(cString: cString, length: strlen(cString)) - } - } - - func components(cString: UnsafePointer, length: Int) -> DatabaseDateComponents? { - assert(strlen(cString) == length) - - // "HH:MM" is the shortest valid string - guard length >= 5 else { return nil } - - // "YYYY-..." -> datetime - if cString[4] == UInt8(ascii: "-") { - return datetimeComponents(cString: cString, length: length) - } - - // "HH-:..." -> time - if cString[2] == UInt8(ascii: ":") { - return timeComponents(cString: cString, length: length) - } - - // Invalid - return nil - } - - // - YYYY-MM-DD - // - YYYY-MM-DD HH:MM - // - YYYY-MM-DD HH:MM:SS - // - YYYY-MM-DD HH:MM:SS.SSS - // - YYYY-MM-DDTHH:MM - // - YYYY-MM-DDTHH:MM:SS - // - YYYY-MM-DDTHH:MM:SS.SSS - private func datetimeComponents(cString: UnsafePointer, length: Int) -> DatabaseDateComponents? { - var parserComponents = ParserComponents() - - // TODO: Get rid of this pyramid when SE-0210 has shipped - let parseCount = withUnsafeMutablePointer(to: &parserComponents.year) { yearP in - withUnsafeMutablePointer(to: &parserComponents.month) { monthP in - withUnsafeMutablePointer(to: &parserComponents.day) { dayP in - withUnsafeMutablePointer(to: &parserComponents.hour) { hourP in - withUnsafeMutablePointer(to: &parserComponents.minute) { minuteP in - withUnsafeMutablePointer(to: &parserComponents.second) { secondP in - parserComponents.nanosecond.withUnsafeMutableBufferPointer { nanosecondBuffer in - withVaList([yearP, monthP, dayP, hourP, minuteP, secondP, nanosecondBuffer.baseAddress!]) { pointer in - vsscanf(cString, "%4d-%2d-%2d%*1[ T]%2d:%2d:%2d.%9s", pointer) - } - } - } - } - } - } - } - } - - guard parseCount >= 3 else { return nil } - - var components = DateComponents() - components.year = Int(parserComponents.year) - components.month = Int(parserComponents.month) - components.day = Int(parserComponents.day) - - guard parseCount >= 5 else { return DatabaseDateComponents(components, format: .YMD) } - - components.hour = Int(parserComponents.hour) - components.minute = Int(parserComponents.minute) - - guard parseCount >= 6 else { return DatabaseDateComponents(components, format: .YMD_HM) } - - components.second = Int(parserComponents.second) - - guard parseCount >= 7 else { return DatabaseDateComponents(components, format: .YMD_HMS) } - - components.nanosecond = nanosecondsInt(for: parserComponents.nanosecond) - - return DatabaseDateComponents(components, format: .YMD_HMSS) - } - - // - HH:MM - // - HH:MM:SS - // - HH:MM:SS.SSS - private func timeComponents(cString: UnsafePointer, length: Int) -> DatabaseDateComponents? { - var parserComponents = ParserComponents() - - // TODO: Get rid of this pyramid when SE-0210 has shipped - let parseCount = withUnsafeMutablePointer(to: &parserComponents.hour) { hourP in - withUnsafeMutablePointer(to: &parserComponents.minute) { minuteP in - withUnsafeMutablePointer(to: &parserComponents.second) { secondP in - parserComponents.nanosecond.withUnsafeMutableBufferPointer { nanosecondBuffer in - withVaList([hourP, minuteP, secondP, nanosecondBuffer.baseAddress!]) { pointer in - vsscanf(cString, "%2d:%2d:%2d.%9s", pointer) - } - } - } - } - } - - guard parseCount >= 2 else { return nil } - - var components = DateComponents() - components.hour = Int(parserComponents.hour) - components.minute = Int(parserComponents.minute) - - guard parseCount >= 3 else { return DatabaseDateComponents(components, format: .HM) } - - components.second = Int(parserComponents.second) - - guard parseCount >= 4 else { return DatabaseDateComponents(components, format: .HMS) } - - guard let nanoseconds = nanosecondsInt(for: parserComponents.nanosecond) else { return nil } - components.nanosecond = nanoseconds - - return DatabaseDateComponents(components, format: .HMSS) - } - - private func nanosecondsInt(for nanosecond: ContiguousArray) -> Int? { - // truncate after the third digit - var result = 0 - let multipliers = [100_000_000, 10_000_000, 1_000_000, 100_000, 10_000, 1_000, 100, 10, 1] - for (char, multiplier) in zip(nanosecond.prefix(3), multipliers) { - if char == 0 { return result } - let digit = Int(char) - 48 /* '0' */ - guard (0...9).contains(digit) else { return nil } - result += multiplier * digit - } - return result - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/URL.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/URL.swift deleted file mode 100755 index 4cc95b1..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/URL.swift +++ /dev/null @@ -1,24 +0,0 @@ -import Foundation - -#if !os(Linux) -/// NSURL stores its absoluteString in the database. -extension NSURL : DatabaseValueConvertible { - - /// Returns a value that can be stored in the database. - /// (the URL's absoluteString). - public var databaseValue: DatabaseValue { - return absoluteString?.databaseValue ?? .null - } - - /// Returns an NSURL initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? { - guard let string = String.fromDatabaseValue(dbValue) else { - return nil - } - return cast(URL(string: string)) - } -} -#endif - -/// URL stores its absoluteString in the database. -extension URL : DatabaseValueConvertible { } diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/UUID.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/UUID.swift deleted file mode 100755 index 8ed8d68..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/Foundation/UUID.swift +++ /dev/null @@ -1,91 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -#if !os(Linux) -/// NSUUID adopts DatabaseValueConvertible -extension NSUUID: DatabaseValueConvertible { - public var databaseValue: DatabaseValue { - var uuidBytes = ContiguousArray(repeating: UInt8(0), count: 16) - return uuidBytes.withUnsafeMutableBufferPointer { buffer in - getBytes(buffer.baseAddress!) - return NSData(bytes: buffer.baseAddress, length: 16).databaseValue - } - } - - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? { - switch dbValue.storage { - case .blob(let data) where data.count == 16: - #if swift(>=5.0) - return data.withUnsafeBytes { - self.init(uuidBytes: $0.bindMemory(to: UInt8.self).baseAddress) - } - #else - return data.withUnsafeBytes { - self.init(uuidBytes: $0) - } - #endif - case .string(let string): - return self.init(uuidString: string) - default: - return nil - } - } -} -#endif - -/// UUID adopts DatabaseValueConvertible -extension UUID: DatabaseValueConvertible { - public var databaseValue: DatabaseValue { - return withUnsafeBytes(of: uuid) { - Data(bytes: $0.baseAddress!, count: $0.count).databaseValue - } - } - - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> UUID? { - switch dbValue.storage { - case .blob(let data) where data.count == 16: - #if swift(>=5.0) - return data.withUnsafeBytes { - UUID(uuid: $0.bindMemory(to: uuid_t.self).first!) - } - #else - return data.withUnsafeBytes { - UUID(uuid: $0.pointee) - } - #endif - case .string(let string): - return UUID(uuidString: string) - default: - return nil - } - } -} - -extension UUID: StatementColumnConvertible { - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - switch sqlite3_column_type(sqliteStatement, index) { - case SQLITE_TEXT: - let string = String(cString: sqlite3_column_text(sqliteStatement, index)!) - guard let uuid = UUID(uuidString: string) else { - fatalConversionError(to: UUID.self, sqliteStatement: sqliteStatement, index: index) - } - self.init(uuid: uuid.uuid) - case SQLITE_BLOB: - guard sqlite3_column_bytes(sqliteStatement, index) == 16, - let blob = sqlite3_column_blob(sqliteStatement, index) else - { - fatalConversionError(to: UUID.self, sqliteStatement: sqliteStatement, index: index) - } - self.init(uuid: blob.assumingMemoryBound(to: uuid_t.self).pointee) - default: - fatalConversionError(to: UUID.self, sqliteStatement: sqliteStatement, index: index) - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Decodable.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Decodable.swift deleted file mode 100755 index f04cfd0..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Decodable.swift +++ /dev/null @@ -1,192 +0,0 @@ -private struct DatabaseValueDecodingContainer: SingleValueDecodingContainer { - let dbValue: DatabaseValue - let codingPath: [CodingKey] - - /// Decodes a null value. - /// - /// - returns: Whether the encountered value was null. - func decodeNil() -> Bool { - return dbValue.isNull - } - - /// Decodes a single value of the given type. - /// - /// - parameter type: The type to decode as. - /// - returns: A value of the requested type. - /// - throws: `DecodingError.typeMismatch` if the encountered encoded value cannot be converted to the requested type. - /// - throws: `DecodingError.valueNotFound` if the encountered encoded value is null. - func decode(_ type: Bool.Type) throws -> Bool { - if let result = Bool.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: Int.Type) throws -> Int { - if let result = Int.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: Int8.Type) throws -> Int8 { - if let result = Int8.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: Int16.Type) throws -> Int16 { - if let result = Int16.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: Int32.Type) throws -> Int32 { - if let result = Int32.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: Int64.Type) throws -> Int64 { - if let result = Int64.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: UInt.Type) throws -> UInt { - if let result = UInt.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: UInt8.Type) throws -> UInt8 { - if let result = UInt8.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: UInt16.Type) throws -> UInt16 { - if let result = UInt16.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: UInt32.Type) throws -> UInt32 { - if let result = UInt32.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: UInt64.Type) throws -> UInt64 { - if let result = UInt64.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: Float.Type) throws -> Float { - if let result = Float.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: Double.Type) throws -> Double { - if let result = Double.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - func decode(_ type: String.Type) throws -> String { - if let result = String.fromDatabaseValue(dbValue) { - return result - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } - - /// Decodes a single value of the given type. - /// - /// - parameter type: The type to decode as. - /// - returns: A value of the requested type. - /// - throws: `DecodingError.typeMismatch` if the encountered encoded value cannot be converted to the requested type. - /// - throws: `DecodingError.valueNotFound` if the encountered encoded value is null. - func decode(_ type: T.Type) throws -> T where T : Decodable { - if let type = T.self as? DatabaseValueConvertible.Type { - // Prefer DatabaseValueConvertible decoding over Decodable. - // This allows custom database decoding, such as decoding Date from - // String, for example. - if let result = type.fromDatabaseValue(dbValue) { - return result as! T - } else { - throw DecodingError.dataCorruptedError(in: self, debugDescription: "value mismatch") - } - } else { - return try T(from: DatabaseValueDecoder(dbValue: dbValue, codingPath: codingPath)) - } - } -} - -private struct DatabaseValueDecoder: Decoder { - let dbValue: DatabaseValue - - init(dbValue: DatabaseValue, codingPath: [CodingKey]) { - self.dbValue = dbValue - self.codingPath = codingPath - } - - // Decoder - let codingPath: [CodingKey] - var userInfo: [CodingUserInfoKey : Any] { return [:] } - - func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer { - throw DecodingError.typeMismatch( - type, - DecodingError.Context(codingPath: codingPath, debugDescription: "keyed decoding is not supported")) - } - - func unkeyedContainer() throws -> UnkeyedDecodingContainer { - throw DecodingError.typeMismatch( - UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: codingPath, debugDescription: "unkeyed decoding is not supported")) - } - - func singleValueContainer() throws -> SingleValueDecodingContainer { - return DatabaseValueDecodingContainer(dbValue: dbValue, codingPath: codingPath) - } -} - -extension DatabaseValueConvertible where Self: Decodable { - public static func fromDatabaseValue(_ databaseValue: DatabaseValue) -> Self? { - return try? self.init(from: DatabaseValueDecoder(dbValue: databaseValue, codingPath: [])) - } -} - -extension DatabaseValueConvertible where Self: Decodable & RawRepresentable, Self.RawValue: DatabaseValueConvertible { - public static func fromDatabaseValue(_ databaseValue: DatabaseValue) -> Self? { - // Preserve custom database decoding - return RawValue.fromDatabaseValue(databaseValue).flatMap { self.init(rawValue: $0) } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Encodable.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Encodable.swift deleted file mode 100755 index 8aa705b..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Encodable.swift +++ /dev/null @@ -1,106 +0,0 @@ -private struct DatabaseValueEncodingContainer : SingleValueEncodingContainer { - let encode: (DatabaseValue) -> Void - - var codingPath: [CodingKey] { return [] } - - /// Encodes a null value. - /// - /// - throws: `EncodingError.invalidValue` if a null value is invalid in the current context for this format. - /// - precondition: May not be called after a previous `self.encode(_:)` call. - mutating func encodeNil() throws { encode(.null) } - - /// Encodes a single value of the given type. - /// - /// - parameter value: The value to encode. - /// - throws: `EncodingError.invalidValue` if the given value is invalid in the current context for this format. - /// - precondition: May not be called after a previous `self.encode(_:)` call. - mutating func encode(_ value: Bool) throws { encode(value.databaseValue) } - mutating func encode(_ value: Int) throws { encode(value.databaseValue) } - mutating func encode(_ value: Int8) throws { encode(value.databaseValue) } - mutating func encode(_ value: Int16) throws { encode(value.databaseValue) } - mutating func encode(_ value: Int32) throws { encode(value.databaseValue) } - mutating func encode(_ value: Int64) throws { encode(value.databaseValue) } - mutating func encode(_ value: UInt) throws { encode(value.databaseValue) } - mutating func encode(_ value: UInt8) throws { encode(value.databaseValue) } - mutating func encode(_ value: UInt16) throws { encode(value.databaseValue) } - mutating func encode(_ value: UInt32) throws { encode(value.databaseValue) } - mutating func encode(_ value: UInt64) throws { encode(value.databaseValue) } - mutating func encode(_ value: Float) throws { encode(value.databaseValue) } - mutating func encode(_ value: Double) throws { encode(value.databaseValue) } - mutating func encode(_ value: String) throws { encode(value.databaseValue) } - - /// Encodes a single value of the given type. - /// - /// - parameter value: The value to encode. - /// - throws: `EncodingError.invalidValue` if the given value is invalid in the current context for this format. - /// - precondition: May not be called after a previous `self.encode(_:)` call. - mutating func encode(_ value: T) throws where T : Encodable { - if let dbValueConvertible = value as? DatabaseValueConvertible { - // Prefer DatabaseValueConvertible encoding over Decodable. - // This allows us to encode Date as String, for example. - encode(dbValueConvertible.databaseValue) - } else { - try value.encode(to: DatabaseValueEncoder(encode: encode)) - } - } -} - -private struct DatabaseValueEncoder : Encoder { - let encode: (DatabaseValue) -> Void - - /// The path of coding keys taken to get to this point in encoding. - /// A `nil` value indicates an unkeyed container. - var codingPath: [CodingKey] { return [] } - - /// Any contextual information set by the user for encoding. - var userInfo: [CodingUserInfoKey : Any] = [:] - - init(encode: @escaping (DatabaseValue) -> Void) { - self.encode = encode - } - - /// Returns an encoding container appropriate for holding multiple values keyed by the given key type. - /// - /// - parameter type: The key type to use for the container. - /// - returns: A new keyed encoding container. - /// - precondition: May not be called after a prior `self.unkeyedContainer()` call. - /// - precondition: May not be called after a value has been encoded through a previous `self.singleValueContainer()` call. - func container(keyedBy type: Key.Type) -> KeyedEncodingContainer { - fatalError("keyed encoding is not supported") - } - - /// Returns an encoding container appropriate for holding multiple unkeyed values. - /// - /// - returns: A new empty unkeyed container. - /// - precondition: May not be called after a prior `self.container(keyedBy:)` call. - /// - precondition: May not be called after a value has been encoded through a previous `self.singleValueContainer()` call. - func unkeyedContainer() -> UnkeyedEncodingContainer { - fatalError("unkeyed encoding is not supported") - } - - /// Returns an encoding container appropriate for holding a single primitive value. - /// - /// - returns: A new empty single value container. - /// - precondition: May not be called after a prior `self.container(keyedBy:)` call. - /// - precondition: May not be called after a prior `self.unkeyedContainer()` call. - /// - precondition: May not be called after a value has been encoded through a previous `self.singleValueContainer()` call. - func singleValueContainer() -> SingleValueEncodingContainer { - return DatabaseValueEncodingContainer(encode: encode) - } -} - -extension DatabaseValueConvertible where Self: Encodable { - public var databaseValue: DatabaseValue { - var dbValue: DatabaseValue! = nil - let encoder = DatabaseValueEncoder(encode: { dbValue = $0 }) - try! self.encode(to: encoder) - return dbValue - } -} - -extension DatabaseValueConvertible where Self: Encodable & RawRepresentable, Self.RawValue: DatabaseValueConvertible { - public var databaseValue: DatabaseValue { - // Preserve custom database encoding - return rawValue.databaseValue - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+RawRepresentable.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+RawRepresentable.swift deleted file mode 100755 index 0bb05cb..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+RawRepresentable.swift +++ /dev/null @@ -1,24 +0,0 @@ -/// DatabaseValueConvertible is free for RawRepresentable types whose raw value -/// is itself DatabaseValueConvertible. -/// -/// // If the RawValue adopts DatabaseValueConvertible... -/// enum Color : Int { -/// case red -/// case white -/// case rose -/// } -/// -/// // ... then the RawRepresentable type can freely adopt DatabaseValueConvertible: -/// extension Color : DatabaseValueConvertible { /* empty */ } -extension DatabaseValueConvertible where Self: RawRepresentable, Self.RawValue: DatabaseValueConvertible { - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return rawValue.databaseValue - } - - /// Returns a value initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? { - return RawValue.fromDatabaseValue(dbValue).flatMap { self.init(rawValue: $0) } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/StandardLibrary.swift b/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/StandardLibrary.swift deleted file mode 100755 index 79a3d58..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/Support/StandardLibrary/StandardLibrary.swift +++ /dev/null @@ -1,715 +0,0 @@ -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -// MARK: - Value Types - -/// Bool adopts DatabaseValueConvertible and StatementColumnConvertible. -extension Bool: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - self = sqlite3_column_int64(sqliteStatement, index) != 0 - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return (self ? 1 : 0).databaseValue - } - - /// Returns a Bool initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Bool? { - // IMPLEMENTATION NOTE - // - // https://www.sqlite.org/lang_expr.html#booleanexpr - // - // > # Boolean Expressions - // > - // > The SQL language features several contexts where an expression is - // > evaluated and the result converted to a boolean (true or false) - // > value. These contexts are: - // > - // > - the WHERE clause of a SELECT, UPDATE or DELETE statement, - // > - the ON or USING clause of a join in a SELECT statement, - // > - the HAVING clause of a SELECT statement, - // > - the WHEN clause of an SQL trigger, and - // > - the WHEN clause or clauses of some CASE expressions. - // > - // > To convert the results of an SQL expression to a boolean value, - // > SQLite first casts the result to a NUMERIC value in the same way as - // > a CAST expression. A numeric zero value (integer value 0 or real - // > value 0.0) is considered to be false. A NULL value is still NULL. - // > All other values are considered true. - // > - // > For example, the values NULL, 0.0, 0, 'english' and '0' are all - // > considered to be false. Values 1, 1.0, 0.1, -0.1 and '1english' are - // > considered to be true. - // - // OK so we have to support boolean for all storage classes? - // Actually we won't, because of the SQLite boolean interpretation of - // strings: - // - // The doc says that "english" should be false, and "1english" should - // be true. I guess "-1english" and "0.1english" should be true also. - // And... what about "0.0e10english"? - // - // Ideally, we'd ask SQLite to perform the conversion itself, and return - // its own boolean interpretation of the string. Unfortunately, it looks - // like it is not so easy... - // - // So we could take a short route, and assume all strings are false, - // since most strings are falsey for SQLite. - // - // Considering all strings falsey is unfortunately very - // counter-intuitive. This is not the correct way to tackle the boolean - // problem. - // - // Instead, let's use the fact that the BOOLEAN typename has Numeric - // affinity (https://www.sqlite.org/datatype3.html), and that the doc - // says: - // - // > SQLite does not have a separate Boolean storage class. Instead, - // > Boolean values are stored as integers 0 (false) and 1 (true). - // - // So we extract bools from Integer and Real only. Integer because it is - // the natural boolean storage class, and Real because Numeric affinity - // store big numbers as Real. - - switch dbValue.storage { - case .int64(let int64): - return (int64 != 0) - case .double(let double): - return (double != 0.0) - default: - return nil - } - } -} - -/// Int adopts DatabaseValueConvertible and StatementColumnConvertible. -extension Int: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - let int64 = sqlite3_column_int64(sqliteStatement, index) - if let v = Int(exactly: int64) { - self = v - } else { - fatalConversionError(to: Int.self, sqliteStatement: sqliteStatement, index: index) - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Int64(self).databaseValue - } - - /// Returns an Int initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Int? { - return Int64.fromDatabaseValue(dbValue).flatMap { Int(exactly: $0) } - } -} - -/// Int8 adopts DatabaseValueConvertible and StatementColumnConvertible. -extension Int8: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - let int64 = sqlite3_column_int64(sqliteStatement, index) - if let v = Int8(exactly: int64) { - self = v - } else { - fatalConversionError(to: Int8.self, sqliteStatement: sqliteStatement, index: index) - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Int64(self).databaseValue - } - - /// Returns an Int8 initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Int8? { - return Int64.fromDatabaseValue(dbValue).flatMap { Int8(exactly: $0) } - } -} - -/// Int16 adopts DatabaseValueConvertible and StatementColumnConvertible. -extension Int16: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - let int64 = sqlite3_column_int64(sqliteStatement, index) - if let v = Int16(exactly: int64) { - self = v - } else { - fatalConversionError(to: Int16.self, sqliteStatement: sqliteStatement, index: index) - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Int64(self).databaseValue - } - - /// Returns an Int16 initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Int16? { - return Int64.fromDatabaseValue(dbValue).flatMap { Int16(exactly: $0) } - } -} - -/// Int32 adopts DatabaseValueConvertible and StatementColumnConvertible. -extension Int32: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - let int64 = sqlite3_column_int64(sqliteStatement, index) - if let v = Int32(exactly: int64) { - self = v - } else { - fatalConversionError(to: Int32.self, sqliteStatement: sqliteStatement, index: index) - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Int64(self).databaseValue - } - - /// Returns an Int32 initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Int32? { - return Int64.fromDatabaseValue(dbValue).flatMap { Int32(exactly: $0) } - } -} - -/// Int64 adopts DatabaseValueConvertible and StatementColumnConvertible. -extension Int64: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - self = sqlite3_column_int64(sqliteStatement, index) - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return DatabaseValue(storage: .int64(self)) - } - - /// Returns an Int64 initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Int64? { - switch dbValue.storage { - case .int64(let int64): - return int64 - case .double(let double): - guard double >= Double(Int64.min) else { return nil } - guard double < Double(Int64.max) else { return nil } - return Int64(double) - default: - return nil - } - } -} - -/// UInt adopts DatabaseValueConvertible and StatementColumnConvertible. -extension UInt: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - let int64 = sqlite3_column_int64(sqliteStatement, index) - if let v = UInt(exactly: int64) { - self = v - } else { - fatalConversionError(to: UInt.self, sqliteStatement: sqliteStatement, index: index) - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Int64(self).databaseValue - } - - /// Returns an Int initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> UInt? { - return Int64.fromDatabaseValue(dbValue).flatMap { UInt(exactly: $0) } - } -} - -/// UInt8 adopts DatabaseValueConvertible and StatementColumnConvertible. -extension UInt8: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - let int64 = sqlite3_column_int64(sqliteStatement, index) - if let v = UInt8(exactly: int64) { - self = v - } else { - fatalConversionError(to: UInt8.self, sqliteStatement: sqliteStatement, index: index) - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Int64(self).databaseValue - } - - /// Returns an UInt8 initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> UInt8? { - return Int64.fromDatabaseValue(dbValue).flatMap { UInt8(exactly: $0) } - } -} - -/// UInt16 adopts DatabaseValueConvertible and StatementColumnConvertible. -extension UInt16: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - let int64 = sqlite3_column_int64(sqliteStatement, index) - if let v = UInt16(exactly: int64) { - self = v - } else { - fatalConversionError(to: UInt16.self, sqliteStatement: sqliteStatement, index: index) - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Int64(self).databaseValue - } - - /// Returns an UInt16 initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> UInt16? { - return Int64.fromDatabaseValue(dbValue).flatMap { UInt16(exactly: $0) } - } -} - -/// UInt32 adopts DatabaseValueConvertible and StatementColumnConvertible. -extension UInt32: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - let int64 = sqlite3_column_int64(sqliteStatement, index) - if let v = UInt32(exactly: int64) { - self = v - } else { - fatalConversionError(to: UInt32.self, sqliteStatement: sqliteStatement, index: index) - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Int64(self).databaseValue - } - - /// Returns an UInt32 initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> UInt32? { - return Int64.fromDatabaseValue(dbValue).flatMap { UInt32(exactly: $0) } - } -} - -/// UInt64 adopts DatabaseValueConvertible and StatementColumnConvertible. -extension UInt64: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - let int64 = sqlite3_column_int64(sqliteStatement, index) - if let v = UInt64(exactly: int64) { - self = v - } else { - fatalConversionError(to: UInt64.self, sqliteStatement: sqliteStatement, index: index) - } - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Int64(self).databaseValue - } - - /// Returns an UInt64 initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> UInt64? { - return Int64.fromDatabaseValue(dbValue).flatMap { UInt64(exactly: $0) } - } -} - -/// Double adopts DatabaseValueConvertible and StatementColumnConvertible. -extension Double: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - self = sqlite3_column_double(sqliteStatement, index) - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return DatabaseValue(storage: .double(self)) - } - - /// Returns a Double initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Double? { - switch dbValue.storage { - case .int64(let int64): - return Double(int64) - case .double(let double): - return double - default: - return nil - } - } -} - -/// Float adopts DatabaseValueConvertible and StatementColumnConvertible. -extension Float: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - self = Float(sqlite3_column_double(sqliteStatement, index)) - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return Double(self).databaseValue - } - - /// Returns a Float initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Float? { - switch dbValue.storage { - case .int64(let int64): - return Float(int64) - case .double(let double): - return Float(double) - default: - return nil - } - } -} - -/// String adopts DatabaseValueConvertible and StatementColumnConvertible. -extension String: DatabaseValueConvertible, StatementColumnConvertible { - - /// Returns a value initialized from a raw SQLite statement pointer. - /// - /// - parameters: - /// - sqliteStatement: A pointer to an SQLite statement. - /// - index: The column index. - @inlinable - public init(sqliteStatement: SQLiteStatement, index: Int32) { - self = String(cString: sqlite3_column_text(sqliteStatement, index)!) - } - - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return DatabaseValue(storage: .string(self)) - } - - /// Returns a String initialized from *dbValue*, if possible. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> String? { - switch dbValue.storage { - case .blob(let data): - // Implicit conversion from blob to string, just as SQLite does - // See https://www.sqlite.org/c3ref/column_blob.html - return String(data: data, encoding: .utf8) - case .string(let string): - return string - default: - return nil - } - } -} - - -// MARK: - SQL Functions - -extension DatabaseFunction { - /// An SQL function that returns the Swift built-in capitalized - /// String property. - /// - /// The function returns NULL for non-strings values. - /// - /// This function is automatically added by GRDB to your database - /// connections. It is the function used by the query interface's - /// capitalized: - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.capitalized) - /// let names = try String.fetchAll(dbQueue, request) // [String] - public static let capitalize = DatabaseFunction("swiftCapitalizedString", argumentCount: 1, pure: true) { dbValues in - guard let string = String.fromDatabaseValue(dbValues[0]) else { - return nil - } - return string.capitalized - } - - /// An SQL function that returns the Swift built-in lowercased - /// String property. - /// - /// The function returns NULL for non-strings values. - /// - /// This function is automatically added by GRDB to your database - /// connections. It is the function used by the query interface's - /// lowercased: - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.lowercased()) - /// let names = try String.fetchAll(dbQueue, request) // [String] - public static let lowercase = DatabaseFunction("swiftLowercaseString", argumentCount: 1, pure: true) { dbValues in - guard let string = String.fromDatabaseValue(dbValues[0]) else { - return nil - } - return string.lowercased() - } - - /// An SQL function that returns the Swift built-in uppercased - /// String property. - /// - /// The function returns NULL for non-strings values. - /// - /// This function is automatically added by GRDB to your database - /// connections. It is the function used by the query interface's - /// uppercased: - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.uppercased()) - /// let names = try String.fetchAll(dbQueue, request) // [String] - public static let uppercase = DatabaseFunction("swiftUppercaseString", argumentCount: 1, pure: true) { dbValues in - guard let string = String.fromDatabaseValue(dbValues[0]) else { - return nil - } - return string.uppercased() - } -} - -extension DatabaseFunction { - /// An SQL function that returns the Swift built-in - /// localizedCapitalized String property. - /// - /// The function returns NULL for non-strings values. - /// - /// This function is automatically added by GRDB to your database - /// connections. It is the function used by the query interface's - /// localizedCapitalized: - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.localizedCapitalized) - /// let names = try String.fetchAll(dbQueue, request) // [String] - @available(OSX 10.11, watchOS 3.0, *) - public static let localizedCapitalize = DatabaseFunction("swiftLocalizedCapitalizedString", argumentCount: 1, pure: true) { dbValues in - guard let string = String.fromDatabaseValue(dbValues[0]) else { - return nil - } - return string.localizedCapitalized - } - - /// An SQL function that returns the Swift built-in - /// localizedLowercased String property. - /// - /// The function returns NULL for non-strings values. - /// - /// This function is automatically added by GRDB to your database - /// connections. It is the function used by the query interface's - /// localizedLowercased: - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.localizedLowercased) - /// let names = try String.fetchAll(dbQueue, request) // [String] - @available(OSX 10.11, watchOS 3.0, *) - public static let localizedLowercase = DatabaseFunction("swiftLocalizedLowercaseString", argumentCount: 1, pure: true) { dbValues in - guard let string = String.fromDatabaseValue(dbValues[0]) else { - return nil - } - return string.localizedLowercase - } - - /// An SQL function that returns the Swift built-in - /// localizedUppercased String property. - /// - /// The function returns NULL for non-strings values. - /// - /// This function is automatically added by GRDB to your database - /// connections. It is the function used by the query interface's - /// localizedUppercased: - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.localizedUppercased) - /// let names = try String.fetchAll(dbQueue, request) // [String] - @available(OSX 10.11, watchOS 3.0, *) - public static let localizedUppercase = DatabaseFunction("swiftLocalizedUppercaseString", argumentCount: 1, pure: true) { dbValues in - guard let string = String.fromDatabaseValue(dbValues[0]) else { - return nil - } - return string.localizedUppercase - } -} - - -// MARK: - SQLite Collations - -extension DatabaseCollation { - // Here we define a set of predefined collations. - // - // We should avoid renaming those collations, because database created with - // earlier versions of the library may have used those collations in the - // definition of tables. A renaming would prevent SQLite to find the - // collation. - // - // Yet we're not absolutely stuck: we could register support for obsolete - // collation names with sqlite3_collation_needed(). - // See https://www.sqlite.org/capi3ref.html#sqlite3_collation_needed - - /// A collation, or SQL string comparison function, that compares strings - /// according to the the Swift built-in == and <= operators. - /// - /// This collation is automatically added by GRDB to your database - /// connections. - /// - /// You can use it when creating database tables: - /// - /// let collationName = DatabaseCollation.caseInsensitiveCompare.name - /// dbQueue.execute(sql: """ - /// CREATE TABLE players ( - /// name TEXT COLLATE \(collationName) - /// ) - /// """) - public static let unicodeCompare = DatabaseCollation("swiftCompare") { (lhs, rhs) in - return (lhs < rhs) ? .orderedAscending : ((lhs == rhs) ? .orderedSame : .orderedDescending) - } - - /// A collation, or SQL string comparison function, that compares strings - /// according to the the Swift built-in caseInsensitiveCompare(_:) method. - /// - /// This collation is automatically added by GRDB to your database - /// connections. - /// - /// You can use it when creating database tables: - /// - /// let collationName = DatabaseCollation.caseInsensitiveCompare.name - /// dbQueue.execute(sql: """ - /// CREATE TABLE players ( - /// name TEXT COLLATE \(collationName) - /// ) - /// """) - public static let caseInsensitiveCompare = DatabaseCollation("swiftCaseInsensitiveCompare") { (lhs, rhs) in - return lhs.caseInsensitiveCompare(rhs) - } - - /// A collation, or SQL string comparison function, that compares strings - /// according to the the Swift built-in localizedCaseInsensitiveCompare(_:) method. - /// - /// This collation is automatically added by GRDB to your database - /// connections. - /// - /// You can use it when creating database tables: - /// - /// let collationName = DatabaseCollation.localizedCaseInsensitiveCompare.name - /// dbQueue.execute(sql: """ - /// CREATE TABLE players ( - /// name TEXT COLLATE \(collationName) - /// ) - /// """) - public static let localizedCaseInsensitiveCompare = DatabaseCollation("swiftLocalizedCaseInsensitiveCompare") { (lhs, rhs) in - return lhs.localizedCaseInsensitiveCompare(rhs) - } - - /// A collation, or SQL string comparison function, that compares strings - /// according to the the Swift built-in localizedCompare(_:) method. - /// - /// This collation is automatically added by GRDB to your database - /// connections. - /// - /// You can use it when creating database tables: - /// - /// let collationName = DatabaseCollation.localizedCompare.name - /// dbQueue.execute(sql: """ - /// CREATE TABLE players ( - /// name TEXT COLLATE \(collationName) - /// ) - /// """) - public static let localizedCompare = DatabaseCollation("swiftLocalizedCompare") { (lhs, rhs) in - return lhs.localizedCompare(rhs) - } - - /// A collation, or SQL string comparison function, that compares strings - /// according to the the Swift built-in localizedStandardCompare(_:) method. - /// - /// This collation is automatically added by GRDB to your database - /// connections. - /// - /// You can use it when creating database tables: - /// - /// let collationName = DatabaseCollation.localizedStandardCompare.name - /// dbQueue.execute(sql: """ - /// CREATE TABLE players ( - /// name TEXT COLLATE \(collationName) - /// ) - /// """) - public static let localizedStandardCompare = DatabaseCollation("swiftLocalizedStandardCompare") { (lhs, rhs) in - return lhs.localizedStandardCompare(rhs) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Core/TransactionObserver.swift b/Example/Pods/GRDB.swift/GRDB/Core/TransactionObserver.swift deleted file mode 100755 index 096a246..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Core/TransactionObserver.swift +++ /dev/null @@ -1,1333 +0,0 @@ -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -extension Database { - - // MARK: - Database Observation - - /// Add a transaction observer, so that it gets notified of - /// database changes. - /// - /// - parameter transactionObserver: A transaction observer. - /// - parameter extent: The duration of the observation. The default is - /// the observer lifetime (observation lasts until observer - /// is deallocated). - public func add(transactionObserver: TransactionObserver, extent: TransactionObservationExtent = .observerLifetime) { - SchedulingWatchdog.preconditionValidQueue(self) - observationBroker.add(transactionObserver: transactionObserver, extent: extent) - } - - /// Remove a transaction observer. - public func remove(transactionObserver: TransactionObserver) { - SchedulingWatchdog.preconditionValidQueue(self) - observationBroker.remove(transactionObserver: transactionObserver) - } - - /// Registers a closure to be executed after the next or current - /// transaction completion. - /// - /// try dbQueue.write { db in - /// db.afterNextTransactionCommit { _ in - /// print("success") - /// } - /// ... - /// } // prints "success" - /// - /// If the transaction is rollbacked, the closure is not executed. - /// - /// If the transaction is committed, the closure is executed in a protected - /// dispatch queue, serialized will all database updates. - public func afterNextTransactionCommit(_ closure: @escaping (Database) -> ()) { - class CommitHandler : TransactionObserver { - let closure: (Database) -> () - - init(_ closure: @escaping (Database) -> ()) { - self.closure = closure - } - - // Ignore individual changes and transaction rollbacks - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { return false } - func databaseDidChange(with event: DatabaseEvent) { } - func databaseDidRollback(_ db: Database) { } - - // On commit, run closure - func databaseDidCommit(_ db: Database) { - closure(db) - } - } - - add(transactionObserver: CommitHandler(closure), extent: .nextTransaction) - } - - /// The extent of a transaction observation - /// - /// See Database.add(transactionObserver:extent:) - public enum TransactionObservationExtent { - /// Observation lasts until observer is deallocated - case observerLifetime - /// Observation lasts until the next transaction - case nextTransaction - /// Observation lasts until the database is closed - case databaseLifetime - } -} - -// MARK: - DatabaseObservationBroker - -/// This class provides support for transaction observers. -/// -/// Let's have a detailed look at how a transaction observer is notified: -/// -/// class MyObserver: TransactionObserver { -/// func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool -/// func databaseDidChange(with event: DatabaseEvent) -/// func databaseWillCommit() throws -/// func databaseDidCommit(_ db: Database) -/// func databaseDidRollback(_ db: Database) -/// } -/// -/// First observer is added, and a transaction is started. At this point, -/// there's not much to say: -/// -/// let observer = MyObserver() -/// dbQueue.add(transactionObserver: observer) -/// dbQueue.inDatabase { db in -/// try db.execute(sql: "BEGIN TRANSACTION") -/// -/// Then a statement is executed: -/// -/// try db.execute(sql: "INSERT INTO document ...") -/// -/// The observation process starts when the statement is *compiled*: -/// sqlite3_set_authorizer tells that the statement performs insertion into the -/// `document` table. Generally speaking, statements may have many effects, by -/// the mean of foreign key actions and SQL triggers. SQLite takes care of -/// exposing all those effects to sqlite3_set_authorizer. -/// -/// When the statement is *about to be executed*, the broker queries the -/// observer.observes(eventsOfKind:) method. If it returns true, the observer is -/// *activated*. -/// -/// During the statement *execution*, SQLite tells that a row has been inserted -/// through sqlite3_update_hook: the broker calls the observer.databaseDidChange(with:) -/// method, if and only if the observer has been activated at the previous step. -/// -/// Now a savepoint is started: -/// -/// try db.execute(sql: "SAVEPOINT foo") -/// -/// Statement compilation has sqlite3_set_authorizer tell that this statement -/// begins a "foo" savepoint. -/// -/// After the statement *has been executed*, the broker knows that the SQLite -/// [savepoint stack](https://www.sqlite.org/lang_savepoint.html) contains the -/// "foo" savepoint. -/// -/// Then another statement is executed: -/// -/// try db.execute(sql: "INSERT INTO document ...") -/// -/// This time, when the statement is *executed* and SQLite tells that a row has -/// been inserted, the broker buffers the change event instead of immediately -/// notifying the activated observers. That is because the savepoint can be -/// rollbacked, and GRDB guarantees observers that they are only notified of -/// changes that have an opportunity to be committed. -/// -/// The savepoint is released: -/// -/// try db.execute(sql: "RELEASE SAVEPOINT foo") -/// -/// Statement compilation has sqlite3_set_authorizer tell that this statement -/// releases the "foo" savepoint. -/// -/// After the statement *has been executed*, the broker knows that the SQLite -/// [savepoint stack](https://www.sqlite.org/lang_savepoint.html) is now empty, -/// and notifies the buffered changes to activated observers. -/// -/// Finally the transaction is committed: -/// -/// try db.execute(sql: "COMMIT") -/// -/// During the statement *execution*, SQlite tells the broker that the -/// transaction is about to be committed through sqlite3_commit_hook. The broker -/// invokes observer.databaseWillCommit(). If the observer throws an error, the -/// broker asks SQLite to rollback the transaction. Otherwise, the broker lets -/// the transaction complete. -/// -/// After the statement *has been executed*, the broker calls -/// observer.databaseDidCommit(). -class DatabaseObservationBroker { - private unowned var database: Database - private var savepointStack = SavepointStack() - private var transactionState: TransactionState = .none - private var transactionObservations: [TransactionObservation] = [] - private var statementObservations: [StatementObservation] = [] { - didSet { observesDatabaseChanges = !statementObservations.isEmpty } - } - private var observesDatabaseChanges: Bool = false { - didSet { - if observesDatabaseChanges == oldValue { return } - if observesDatabaseChanges { - installUpdateHook() - } else { - uninstallUpdateHook() - } - } - } - - init(_ database: Database) { - self.database = database - } - - // MARK: - Transaction observers - - func add(transactionObserver: TransactionObserver, extent: Database.TransactionObservationExtent) { - transactionObservations.append(TransactionObservation(observer: transactionObserver, extent: extent)) - } - - func remove(transactionObserver: TransactionObserver) { - transactionObservations.removeFirst { $0.isWrapping(transactionObserver) } - } - - func disableUntilNextTransaction(transactionObserver: TransactionObserver) { - if let observation = transactionObservations.first(where: { $0.isWrapping(transactionObserver)}) { - observation.isDisabled = true - statementObservations.removeFirst { $0.0 === observation } - } - } - - // MARK: - Statement execution - - func updateStatementWillExecute(_ statement: UpdateStatement) { - // As statement executes, it may trigger database changes that will - // be notified to transaction observers. As a consequence, observers - // may disable themselves with stopObservingDatabaseChangesUntilNextTransaction() - // - // This method takes no argument, and requires access to the "current - // broker", which is a per-thread global stored in - // SchedulingWatchdog.current: - SchedulingWatchdog.current!.databaseObservationBroker = self - - // Fill statementObservations with observations that are interested in - // the kind of events performed by the statement. - // - // Those statementObservations will be notified of individual changes - // in databaseWillChange() and databaseDidChange(). - let eventKinds = statement.databaseEventKinds - - // If any observer observes row deletions, we'll have to disable - // [truncate optimization](https://www.sqlite.org/lang_delete.html#truncateopt) - // so that observers are notified. - var observesRowDeletion = false - - switch eventKinds.count { - case 0: - // Statement has no effect on any database table. - // - // For example: PRAGMA foreign_keys = ON - statementObservations = [] - case 1: - // We'll execute a simple statement without any side effect. - // Eventual database events will thus all have the same kind. All - // detabase events can be notified to interested observations. - // - // For example, if one observes all deletions in the table T, then - // all individual deletions of DELETE FROM T are notified: - let eventKind = eventKinds[0] - statementObservations = transactionObservations.compactMap { observation in - guard observation.observes(eventsOfKind: eventKind) else { - // observation is not interested - return nil - } - - if case .delete = eventKind { - observesRowDeletion = true - } - - // observation will be notified of all individual events - return (observation, DatabaseEventPredicate.true) - } - default: - // We'll execute a complex statement with side effects performed by - // an SQL trigger or a foreign key action. Eventual database events - // may not all have the same kind: we need to filter them before - // notifying interested observations. - // - // For example, if DELETE FROM T1 generates deletions in T1 and T2 - // by the mean of a foreign key action, then when one only observes - // deletions in T1, one must not be notified of deletions in T2: - statementObservations = transactionObservations.compactMap { observation in - let observedKinds = eventKinds.filter(observation.observes) - if observedKinds.isEmpty { - // observation is not interested - return nil - } - - for eventKind in observedKinds { - if case .delete = eventKind { - observesRowDeletion = true - break - } - } - - // observation will only be notified of individual events that - // match one of the observed kinds. - return (observation, DatabaseEventPredicate.matching(observedKinds)) - } - } - - if observesRowDeletion { - database.authorizer = TruncateOptimizationBlocker() - } else { - database.authorizer = nil - } - } - - func updateStatementDidFail(_ statement: UpdateStatement) throws { - // Undo updateStatementWillExecute - statementObservations = [] - database.authorizer = nil - SchedulingWatchdog.current!.databaseObservationBroker = nil - - // Reset transactionState before databaseDidRollback eventually - // executes other statements. - let transactionState = self.transactionState - self.transactionState = .none - - switch transactionState { - case .rollback: - // Don't notify observers because we're in a failed implicit - // transaction here (like an INSERT which fails with - // SQLITE_CONSTRAINT error) - databaseDidRollback(notifyTransactionObservers: false) - case .cancelledCommit(let error): - databaseDidRollback(notifyTransactionObservers: true) - throw error - default: - break - } - } - - func updateStatementDidExecute(_ statement: UpdateStatement) throws { - // Undo updateStatementWillExecute - statementObservations = [] - database.authorizer = nil - SchedulingWatchdog.current!.databaseObservationBroker = nil - - // Has statement any effect on transaction/savepoints? - if let transactionEffect = statement.transactionEffect { - switch transactionEffect { - case .beginTransaction: - break - - case .commitTransaction: // 1. A COMMIT statement has been executed - if case .none = self.transactionState { // 2. sqlite3_commit_hook was not triggered - // 1+2 mean that an empty deferred transaction has been completed: - // - // BEGIN DEFERRED TRANSACTION; COMMIT - // - // This special case has a dedicated handling: - return try databaseDidCommitEmptyDeferredTransaction() - } - - case .rollbackTransaction: - break - - case .beginSavepoint(let name): - savepointStack.savepointDidBegin(name) - - case .releaseSavepoint(let name): // 1. A RELEASE SAVEPOINT statement has been executed - savepointStack.savepointDidRelease(name) - - if case .none = self.transactionState, // 2. sqlite3_commit_hook was not triggered - !database.isInsideTransaction // 3. database is no longer inside a transaction - { - // 1+2+3 mean that an empty deferred transaction has been completed: - // - // SAVEPOINT foo; RELEASE SAVEPOINT foo - // - // This special case has a dedicated handling: - return try databaseDidCommitEmptyDeferredTransaction() - } - - if savepointStack.isEmpty { - notifyBufferedEvents() - } - - case .rollbackSavepoint(let name): - savepointStack.savepointDidRollback(name) - } - } - - // Reset transactionState before databaseDidCommit or - // databaseDidRollback eventually execute other statements. - let transactionState = self.transactionState - self.transactionState = .none - - switch transactionState { - case .commit: - databaseDidCommit() - case .rollback: - databaseDidRollback(notifyTransactionObservers: true) - default: - break - } - } - -#if SQLITE_ENABLE_PREUPDATE_HOOK - // Called from sqlite3_preupdate_hook - private func databaseWillChange(with event: DatabasePreUpdateEvent) { - if savepointStack.isEmpty { - // Notify now - for (observation, predicate) in statementObservations where predicate.evaluate(event) { - observation.databaseWillChange(with: event) - } - } else { - // Buffer - savepointStack.eventsBuffer.append((event: event.copy(), statementObservations: statementObservations)) - } - } -#endif - - // Called from sqlite3_update_hook - private func databaseDidChange(with event: DatabaseEvent) { - // We're about to call the databaseDidChange(with:) method of - // transaction observers. In this method, observers may disable - // themselves with stopObservingDatabaseChangesUntilNextTransaction() - // - // This method takes no argument, and requires access to the "current - // broker", which is a per-thread global stored in - // SchedulingWatchdog.current: - assert(SchedulingWatchdog.current?.databaseObservationBroker != nil) - - if savepointStack.isEmpty { - // Notify now - for (observation, predicate) in statementObservations where predicate.evaluate(event) { - observation.databaseDidChange(with: event) - } - } else { - // Buffer - savepointStack.eventsBuffer.append((event: event.copy(), statementObservations: statementObservations)) - } - } - - // MARK: - End of transaction - - // Called from sqlite3_commit_hook and databaseDidCommitEmptyDeferredTransaction() - private func databaseWillCommit() throws { - notifyBufferedEvents() - for observation in transactionObservations { - try observation.databaseWillCommit() - } - } - - // Called from updateStatementDidExecute - private func databaseDidCommit() { - savepointStack.clear() - - for observation in transactionObservations { - observation.databaseDidCommit(database) - } - databaseDidEndTransaction() - } - - // Called from updateStatementDidExecute - private func databaseDidCommitEmptyDeferredTransaction() throws { - // A statement that ends a transaction has been executed. But for - // SQLite, no transaction at all has started, and sqlite3_commit_hook - // was not triggered: - // - // try db.execute(sql: "BEGIN DEFERRED TRANSACTION") - // try db.execute(sql: "COMMIT") // <- no sqlite3_commit_hook callback invocation - // - // Should we tell transaction observers of this transaction, or not? - // The code says that a transaction was open, but SQLite says the - // opposite. How do we lift this ambiguity? Should we notify of - // *transactions expressed in the code*, or *SQLite transactions* only? - // - // If we would notify of SQLite transactions only, then we'd notify of - // all transactions expressed in the code, but empty deferred - // transaction. This means that we'd make an exception. And exceptions - // are the recipe for both surprise and confusion. - // - // For example, is the code below expected to print "did commit"? - // - // db.afterNextTransactionCommit { _ in print("did commit") } - // try db.inTransaction { - // performSomeTask(db) - // return .commit - // } - // - // Yes it is. And the only way to make it reliably print "did commit" is - // to behave consistently, regardless of the implementation of the - // `performSomeTask` function. Even if the `performSomeTask` is empty, - // even if we actually execute an empty deferred transaction. - // - // For better or for worse, let's simulate a transaction: - - do { - try databaseWillCommit() - databaseDidCommit() - } catch { - databaseDidRollback(notifyTransactionObservers: true) - throw error - } - } - - // Called from updateStatementDidExecute or updateStatementDidFails - private func databaseDidRollback(notifyTransactionObservers: Bool) { - savepointStack.clear() - - if notifyTransactionObservers { - for observation in transactionObservations { - observation.databaseDidRollback(database) - } - } - databaseDidEndTransaction() - } - - /// Remove transaction observers that have stopped observing transaction, - /// and uninstall SQLite update hooks if there is no remaining observers. - private func databaseDidEndTransaction() { - transactionObservations = transactionObservations.filter { $0.isObserving } - - // Undo disableUntilNextTransaction(transactionObserver:) - for observation in transactionObservations { - observation.isDisabled = false - } - } - - private func notifyBufferedEvents() { - // We're about to call the databaseDidChange(with:) method of - // transaction observers. In this method, observers may disable - // themselves with stopObservingDatabaseChangesUntilNextTransaction() - // - // This method takes no argument, and requires access to the "current - // broker", which is a per-thread global stored in - // SchedulingWatchdog.current. - // - // Normally, notifyBufferedEvents() is called as part of statement - // execution, and the current broker has been set in - // updateStatementWillExecute(). An assertion should be enough: - // - // assert(SchedulingWatchdog.current?.databaseObservationBroker != nil) - // - // But we have to deal with a particular case: - // - // let journalMode = String.fetchOne(db, sql: "PRAGMA journal_mode = wal") - // - // It runs a SelectStatement, not an UpdateStatement. But this not why - // this case is particular. What is unexpected is that it triggers - // the commit hook when the "PRAGMA journal_mode = wal" statement is - // finalized, long after it has executed: - // - // 1. Statement.deinit() - // 2. sqlite3_finalize() - // 3. commit hook - // 4. DatabaseObservationBroker.databaseWillCommit() - // 5. DatabaseObservationBroker.notifyBufferedEvents() - // - // I don't know if this behavior is something that can be relied - // upon. One would naively expect, for example, that changing the - // journal mode would trigger the commit hook in sqlite3_step(), - // not in sqlite3_finalize(). - // - // Anyway: in this scenario, updateStatementWillExecute() has not been - // called, and the current broker is nil. - // - // Let's not try to outsmart SQLite, and build a complex state machine. - // Instead, let's just make sure that the current broker is set to self - // when this method is called. - - let watchDog = SchedulingWatchdog.current! - watchDog.databaseObservationBroker = self - defer { - watchDog.databaseObservationBroker = nil - } - - // Now we can safely notify: - - let eventsBuffer = savepointStack.eventsBuffer - savepointStack.clear() - - for (event, statementObservations) in eventsBuffer { - for (observation, predicate) in statementObservations where predicate.evaluate(event) { - event.send(to: observation) - } - } - } - - // MARK: - SQLite hooks - - func installCommitAndRollbackHooks() { - let brokerPointer = Unmanaged.passUnretained(self).toOpaque() - - sqlite3_commit_hook(database.sqliteConnection, { brokerPointer in - let broker = Unmanaged.fromOpaque(brokerPointer!).takeUnretainedValue() - do { - try broker.databaseWillCommit() - broker.transactionState = .commit - // Next step: updateStatementDidExecute() - return 0 - } catch { - broker.transactionState = .cancelledCommit(error) - // Next step: sqlite3_rollback_hook callback - return 1 - } - }, brokerPointer) - - sqlite3_rollback_hook(database.sqliteConnection, { brokerPointer in - let broker = Unmanaged.fromOpaque(brokerPointer!).takeUnretainedValue() - switch broker.transactionState { - case .cancelledCommit: - // Next step: updateStatementDidFail() - break - default: - broker.transactionState = .rollback - // Next step: updateStatementDidExecute() - } - }, brokerPointer) - } - - private func installUpdateHook() { - let brokerPointer = Unmanaged.passUnretained(self).toOpaque() - - sqlite3_update_hook(database.sqliteConnection, { (brokerPointer, updateKind, databaseNameCString, tableNameCString, rowID) in - let broker = Unmanaged.fromOpaque(brokerPointer!).takeUnretainedValue() - broker.databaseDidChange(with: DatabaseEvent( - kind: DatabaseEvent.Kind(rawValue: updateKind)!, - rowID: rowID, - databaseNameCString: databaseNameCString, - tableNameCString: tableNameCString)) - }, brokerPointer) - - #if SQLITE_ENABLE_PREUPDATE_HOOK - sqlite3_preupdate_hook(database.sqliteConnection, { (brokerPointer, databaseConnection, updateKind, databaseNameCString, tableNameCString, initialRowID, finalRowID) in - let broker = Unmanaged.fromOpaque(brokerPointer!).takeUnretainedValue() - broker.databaseWillChange(with: DatabasePreUpdateEvent( - connection: databaseConnection!, - kind: DatabasePreUpdateEvent.Kind(rawValue: updateKind)!, - initialRowID: initialRowID, - finalRowID: finalRowID, - databaseNameCString: databaseNameCString, - tableNameCString: tableNameCString)) - }, brokerPointer) - #endif - } - - private func uninstallUpdateHook() { - sqlite3_update_hook(database.sqliteConnection, nil, nil) - #if SQLITE_ENABLE_PREUPDATE_HOOK - sqlite3_preupdate_hook(database.sqliteConnection, nil, nil) - #endif - } - - /// The various states of SQLite transactions - enum TransactionState { - case none - case commit - case rollback - case cancelledCommit(Error) - } -} - -// MARK: - TransactionObserver - -/// A transaction observer is notified of all changes and transactions committed -/// or rollbacked on a database. -/// -/// Adopting types must be a class. -public protocol TransactionObserver : class { - - /// Filters database changes that should be notified the the - /// databaseDidChange(with:) method. - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool - - /// Notifies a database change (insert, update, or delete). - /// - /// The change is pending until the current transaction ends. See - /// databaseWillCommit, databaseDidCommit and databaseDidRollback. - /// - /// This method is called in a protected dispatch queue, serialized will all - /// database updates. - /// - /// The event is only valid for the duration of this method call. If you - /// need to keep it longer, store a copy: `event.copy()` - /// - /// The observer has an opportunity to stop receiving further change events - /// from the current transaction by calling the - /// stopObservingDatabaseChangesUntilNextTransaction() method. - /// - /// - warning: this method must not change the database. - func databaseDidChange(with event: DatabaseEvent) - - /// When a transaction is about to be committed, the transaction observer - /// has an opportunity to rollback pending changes by throwing an error. - /// - /// This method is called on the database queue. - /// - /// - warning: this method must not change the database. - /// - /// - throws: An eventual error that rollbacks pending changes. - func databaseWillCommit() throws - - /// Database changes have been committed. - /// - /// This method is called on the database queue. It can change the database. - func databaseDidCommit(_ db: Database) - - /// Database changes have been rollbacked. - /// - /// This method is called on the database queue. It can change the database. - func databaseDidRollback(_ db: Database) - - #if SQLITE_ENABLE_PREUPDATE_HOOK - /// Notifies before a database change (insert, update, or delete) - /// with change information (initial / final values for the row's - /// columns). (Called *before* databaseDidChangeWithEvent.) - /// - /// The change is pending until the end of the current transaction, - /// and you always get a second chance to get basic event information in - /// the databaseDidChangeWithEvent callback. - /// - /// This callback is mostly useful for calculating detailed change - /// information for a row, and provides the initial / final values. - /// - /// This method is called in a protected dispatch queue, serialized will all - /// database updates. - /// - /// The event is only valid for the duration of this method call. If you - /// need to keep it longer, store a copy: `event.copy()` - /// - /// - warning: this method must not change the database. - /// - /// **Availability Info** - /// - /// Requires SQLite 3.13.0 + - /// Compiled with option SQLITE_ENABLE_PREUPDATE_HOOK - /// - /// As of OSX 10.11.5, and iOS 9.3.2, the built-in SQLite library - /// does not have this enabled, so you'll need to compile your own - /// copy using GRDBCustomSQLite. See https://github.com/groue/GRDB.swift/blob/master/Documentation/CustomSQLiteBuilds.md - /// - /// The databaseDidChangeWithEvent callback is always available, - /// and may provide most/all of what you need. - /// (For example, FetchedRecordsController is built without databaseWillChange) - func databaseWillChange(with event: DatabasePreUpdateEvent) - #endif -} - -extension TransactionObserver { - /// Default implementation does nothing - public func databaseWillCommit() throws { - } - - #if SQLITE_ENABLE_PREUPDATE_HOOK - /// Default implementation does nothing - public func databaseWillChange(with event: DatabasePreUpdateEvent) { - } - #endif - - /// After this method has been called, the `databaseDidChange(with:)` - /// method won't be called until the next transaction. - /// - /// For example: - /// - /// class PlayerObserver: TransactionObserver { - /// var playerTableWasModified = false - /// - /// func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { - /// return eventKind.tableName == "player" - /// } - /// - /// func databaseDidChange(with event: DatabaseEvent) { - /// playerTableWasModified = true - /// - /// // It is pointless to keep on tracking further changes: - /// stopObservingDatabaseChangesUntilNextTransaction() - /// } - /// } - /// - /// - precondition: This method must be called from `databaseDidChange(with:)`. - public func stopObservingDatabaseChangesUntilNextTransaction() { - guard let broker = SchedulingWatchdog.current?.databaseObservationBroker else { - fatalError("stopObservingDatabaseChangesUntilNextTransaction must be called from the databaseDidChange method") - } - broker.disableUntilNextTransaction(transactionObserver: self) - } -} - -// MARK: - TransactionObservation - -/// This class manages the observation extent of a transaction observer -final class TransactionObservation { - let extent: Database.TransactionObservationExtent - - // A disabled observation is not interested in individual database changes. - // It is still interested in transactions commits & rollbacks. - var isDisabled: Bool = false - - private weak var weakObserver: TransactionObserver? - private var strongObserver: TransactionObserver? - private var observer: TransactionObserver? { return strongObserver ?? weakObserver } - - fileprivate var isObserving: Bool { - return observer != nil - } - - init(observer: TransactionObserver, extent: Database.TransactionObservationExtent) { - self.extent = extent - switch extent { - case .observerLifetime: - weakObserver = observer - case .nextTransaction: - // This strong reference will be released in databaseDidCommit() and databaseDidRollback() - strongObserver = observer - case .databaseLifetime: - strongObserver = observer - } - } - - func isWrapping(_ observer: TransactionObserver) -> Bool { - return self.observer === observer - } - - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { - if isDisabled { return false } - return observer?.observes(eventsOfKind: eventKind) ?? false - } - - #if SQLITE_ENABLE_PREUPDATE_HOOK - func databaseWillChange(with event: DatabasePreUpdateEvent) { - if isDisabled { return } - observer?.databaseWillChange(with: event) - } - #endif - - func databaseDidChange(with event: DatabaseEvent) { - if isDisabled { return } - observer?.databaseDidChange(with: event) - } - - func databaseWillCommit() throws { - try observer?.databaseWillCommit() - } - - func databaseDidCommit(_ db: Database) { - switch extent { - case .observerLifetime, .databaseLifetime: - observer?.databaseDidCommit(db) - case .nextTransaction: - if let observer = self.observer { - // Observer must not get any further notification. - // So we "forget" the observer before its `databaseDidCommit` - // implementation eventually triggers another database change. - strongObserver = nil - observer.databaseDidCommit(db) - } - } - } - - func databaseDidRollback(_ db: Database) { - switch extent { - case .observerLifetime, .databaseLifetime: - observer?.databaseDidRollback(db) - case .nextTransaction: - if let observer = self.observer { - // Observer must not get any further notification. - // So we "forget" the observer before its `databaseDidRollback` - // implementation eventually triggers another database change. - strongObserver = nil - observer.databaseDidRollback(db) - } - } - } -} - -typealias StatementObservation = (TransactionObservation, DatabaseEventPredicate) - -// MARK: - Database events - -/// A kind of database event. See the TransactionObserver protocol for -/// more information. -public enum DatabaseEventKind { - /// The insertion of a row in a database table - case insert(tableName: String) - - /// The deletion of a row in a database table - case delete(tableName: String) - - /// The update of a set of columns in a database table - case update(tableName: String, columnNames: Set) - - var modifiedRegion: DatabaseRegion { - switch self { - case .delete(let tableName): - return DatabaseRegion(table: tableName) - case .insert(let tableName): - return DatabaseRegion(table: tableName) - case .update(let tableName, let updatedColumnNames): - return DatabaseRegion(table: tableName, columns: updatedColumnNames) - } - } -} - -extension DatabaseEventKind { - /// The impacted database table - public var tableName: String { - switch self { - case .insert(tableName: let tableName): return tableName - case .delete(tableName: let tableName): return tableName - case .update(tableName: let tableName, columnNames: _): return tableName - } - } -} - -protocol DatabaseEventProtocol { - func send(to observer: TransactionObservation) - func matchesKind(_ databaseEventKind: DatabaseEventKind) -> Bool -} - -/// A database event, notified to TransactionObserver. -public struct DatabaseEvent { - - /// An event kind - public enum Kind: Int32 { - /// SQLITE_INSERT - case insert = 18 - - /// SQLITE_DELETE - case delete = 9 - - /// SQLITE_UPDATE - case update = 23 - } - - private let impl: DatabaseEventImpl - - /// The event kind - public let kind: Kind - - /// The database name - public var databaseName: String { return impl.databaseName } - - /// The table name - public var tableName: String { return impl.tableName } - - /// The rowID of the changed row. - public let rowID: Int64 - - /// Returns an event that can be stored: - /// - /// class MyObserver: TransactionObserver { - /// var events: [DatabaseEvent] - /// func databaseDidChange(with event: DatabaseEvent) { - /// events.append(event.copy()) - /// } - /// } - public func copy() -> DatabaseEvent { - return impl.copy(self) - } - - fileprivate init(kind: Kind, rowID: Int64, impl: DatabaseEventImpl) { - self.kind = kind - self.rowID = rowID - self.impl = impl - } - - init(kind: Kind, rowID: Int64, databaseNameCString: UnsafePointer?, tableNameCString: UnsafePointer?) { - self.init(kind: kind, rowID: rowID, impl: MetalDatabaseEventImpl(databaseNameCString: databaseNameCString, tableNameCString: tableNameCString)) - } -} - -extension DatabaseEvent : DatabaseEventProtocol { - func send(to observer: TransactionObservation) { - observer.databaseDidChange(with: self) - } - - func matchesKind(_ databaseEventKind: DatabaseEventKind) -> Bool { - switch (kind, databaseEventKind) { - case (.insert, .insert(let tableName)): return self.tableName == tableName - case (.delete, .delete(let tableName)): return self.tableName == tableName - case (.update, .update(let tableName, _)): return self.tableName == tableName - default: - return false - } - } -} - -/// Protocol for internal implementation of DatabaseEvent -private protocol DatabaseEventImpl { - var databaseName: String { get } - var tableName: String { get } - func copy(_ event: DatabaseEvent) -> DatabaseEvent -} - -/// Optimization: MetalDatabaseEventImpl does not create Swift strings from raw -/// SQLite char* until actually asked for databaseName or tableName. -private struct MetalDatabaseEventImpl : DatabaseEventImpl { - let databaseNameCString: UnsafePointer? - let tableNameCString: UnsafePointer? - - var databaseName: String { return String(cString: databaseNameCString!) } - var tableName: String { return String(cString: tableNameCString!) } - func copy(_ event: DatabaseEvent) -> DatabaseEvent { - return DatabaseEvent(kind: event.kind, rowID: event.rowID, impl: CopiedDatabaseEventImpl(databaseName: databaseName, tableName: tableName)) - } -} - -/// Impl for DatabaseEvent that contains copies of event strings. -private struct CopiedDatabaseEventImpl : DatabaseEventImpl { - let databaseName: String - let tableName: String - func copy(_ event: DatabaseEvent) -> DatabaseEvent { - return event - } -} - -#if SQLITE_ENABLE_PREUPDATE_HOOK - - public struct DatabasePreUpdateEvent { - - /// An event kind - public enum Kind: Int32 { - /// SQLITE_INSERT - case insert = 18 - - /// SQLITE_DELETE - case delete = 9 - - /// SQLITE_UPDATE - case update = 23 - } - - /// The event kind - public let kind: Kind - - /// The database name - public var databaseName: String { return impl.databaseName } - - /// The table name - public var tableName: String { return impl.tableName } - - /// The number of columns in the row that is being inserted, updated, or deleted. - public var count: Int { return Int(impl.columnsCount) } - - /// The triggering depth of the row update - /// Returns: - /// 0 if the preupdate callback was invoked as a result of a direct insert, - // update, or delete operation; - /// 1 for inserts, updates, or deletes invoked by top-level triggers; - /// 2 for changes resulting from triggers called by top-level triggers; - /// ... and so forth - public var depth: CInt { return impl.depth } - - /// The initial rowID of the row being changed for .Update and .Delete changes, - /// and nil for .Insert changes. - public let initialRowID: Int64? - - /// The final rowID of the row being changed for .Update and .Insert changes, - /// and nil for .Delete changes. - public let finalRowID: Int64? - - /// The initial database values in the row. - /// - /// Values appear in the same order as the columns in the table. - /// - /// The result is nil if the event is an .Insert event. - public var initialDatabaseValues: [DatabaseValue]? { - guard (kind == .update || kind == .delete) else { return nil } - return impl.initialDatabaseValues - } - - /// Returns the initial `DatabaseValue` at given index. - /// - /// Indexes span from 0 for the leftmost column to (row.count - 1) for the - /// righmost column. - /// - /// The result is nil if the event is an .Insert event. - public func initialDatabaseValue(atIndex index: Int) -> DatabaseValue? { - GRDBPrecondition(index >= 0 && index < count, "row index out of range") - guard (kind == .update || kind == .delete) else { return nil } - return impl.initialDatabaseValue(atIndex: index) - } - - /// The final database values in the row. - /// - /// Values appear in the same order as the columns in the table. - /// - /// The result is nil if the event is a .Delete event. - public var finalDatabaseValues: [DatabaseValue]? { - guard (kind == .update || kind == .insert) else { return nil } - return impl.finalDatabaseValues - } - - /// Returns the final `DatabaseValue` at given index. - /// - /// Indexes span from 0 for the leftmost column to (row.count - 1) for the - /// righmost column. - /// - /// The result is nil if the event is a .Delete event. - public func finalDatabaseValue(atIndex index: Int) -> DatabaseValue? { - GRDBPrecondition(index >= 0 && index < count, "row index out of range") - guard (kind == .update || kind == .insert) else { return nil } - return impl.finalDatabaseValue(atIndex: index) - } - - /// Returns an event that can be stored: - /// - /// class MyObserver: TransactionObserver { - /// var events: [DatabasePreUpdateEvent] - /// func databaseWillChange(with event: DatabasePreUpdateEvent) { - /// events.append(event.copy()) - /// } - /// } - public func copy() -> DatabasePreUpdateEvent { - return impl.copy(self) - } - - fileprivate init(kind: Kind, initialRowID: Int64?, finalRowID: Int64?, impl: DatabasePreUpdateEventImpl) { - self.kind = kind - self.initialRowID = (kind == .update || kind == .delete ) ? initialRowID : nil - self.finalRowID = (kind == .update || kind == .insert ) ? finalRowID : nil - self.impl = impl - } - - init(connection: SQLiteConnection, kind: Kind, initialRowID: Int64, finalRowID: Int64, databaseNameCString: UnsafePointer?, tableNameCString: UnsafePointer?) { - self.init(kind: kind, - initialRowID: (kind == .update || kind == .delete ) ? finalRowID : nil, - finalRowID: (kind == .update || kind == .insert ) ? finalRowID : nil, - impl: MetalDatabasePreUpdateEventImpl(connection: connection, kind: kind, databaseNameCString: databaseNameCString, tableNameCString: tableNameCString)) - } - - private let impl: DatabasePreUpdateEventImpl - } - - extension DatabasePreUpdateEvent : DatabaseEventProtocol { - func send(to observer: TransactionObservation) { - observer.databaseWillChange(with: self) - } - - func matchesKind(_ databaseEventKind: DatabaseEventKind) -> Bool { - switch (kind, databaseEventKind) { - case (.insert, .insert(let tableName)): return self.tableName == tableName - case (.delete, .delete(let tableName)): return self.tableName == tableName - case (.update, .update(let tableName, _)): return self.tableName == tableName - default: - return false - } - } - } - - /// Protocol for internal implementation of DatabaseEvent - private protocol DatabasePreUpdateEventImpl { - var databaseName: String { get } - var tableName: String { get } - - var columnsCount: CInt { get } - var depth: CInt { get } - var initialDatabaseValues: [DatabaseValue]? { get } - var finalDatabaseValues: [DatabaseValue]? { get } - - func initialDatabaseValue(atIndex index: Int) -> DatabaseValue? - func finalDatabaseValue(atIndex index: Int) -> DatabaseValue? - - func copy(_ event: DatabasePreUpdateEvent) -> DatabasePreUpdateEvent - } - - /// Optimization: MetalDatabasePreUpdateEventImpl does not create Swift strings from raw - /// SQLite char* until actually asked for databaseName or tableName, - /// nor does it request other data via the sqlite3_preupdate_* APIs - /// until asked. - private struct MetalDatabasePreUpdateEventImpl : DatabasePreUpdateEventImpl { - let connection: SQLiteConnection - let kind: DatabasePreUpdateEvent.Kind - - let databaseNameCString: UnsafePointer? - let tableNameCString: UnsafePointer? - - var databaseName: String { return String(cString: databaseNameCString!) } - var tableName: String { return String(cString: tableNameCString!) } - - var columnsCount: CInt { return sqlite3_preupdate_count(connection) } - var depth: CInt { return sqlite3_preupdate_depth(connection) } - var initialDatabaseValues: [DatabaseValue]? { - guard (kind == .update || kind == .delete) else { return nil } - return preupdate_getValues_old(connection) - } - - var finalDatabaseValues: [DatabaseValue]? { - guard (kind == .update || kind == .insert) else { return nil } - return preupdate_getValues_new(connection) - } - - func initialDatabaseValue(atIndex index: Int) -> DatabaseValue? { - let columnCount = columnsCount - precondition(index >= 0 && index < Int(columnCount), "row index out of range") - return getValue(connection, column: CInt(index), sqlite_func: { (connection: SQLiteConnection, column: CInt, value: inout SQLiteValue? ) -> CInt in - return sqlite3_preupdate_old(connection, column, &value) - }) - } - - func finalDatabaseValue(atIndex index: Int) -> DatabaseValue? { - let columnCount = columnsCount - precondition(index >= 0 && index < Int(columnCount), "row index out of range") - return getValue(connection, column: CInt(index), sqlite_func: { (connection: SQLiteConnection, column: CInt, value: inout SQLiteValue? ) -> CInt in - return sqlite3_preupdate_new(connection, column, &value) - }) - } - - func copy(_ event: DatabasePreUpdateEvent) -> DatabasePreUpdateEvent { - return DatabasePreUpdateEvent(kind: event.kind, initialRowID: event.initialRowID, finalRowID: event.finalRowID, impl: CopiedDatabasePreUpdateEventImpl( - databaseName: databaseName, - tableName: tableName, - columnsCount: columnsCount, - depth: depth, - initialDatabaseValues: initialDatabaseValues, - finalDatabaseValues: finalDatabaseValues)) - } - - private func preupdate_getValues(_ connection: SQLiteConnection, sqlite_func: (_ connection: SQLiteConnection, _ column: CInt, _ value: inout SQLiteValue? ) -> CInt ) -> [DatabaseValue]? { - let columnCount = sqlite3_preupdate_count(connection) - guard columnCount > 0 else { return nil } - - var columnValues = [DatabaseValue]() - - for i in 0.. CInt ) -> DatabaseValue? { - var value : SQLiteValue? = nil - guard sqlite_func(connection, column, &value) == SQLITE_OK else { return nil } - if let value = value { - return DatabaseValue(sqliteValue: value) - } - return nil - } - - private func preupdate_getValues_old(_ connection: SQLiteConnection) -> [DatabaseValue]? { - return preupdate_getValues(connection, sqlite_func: { (connection: SQLiteConnection, column: CInt, value: inout SQLiteValue? ) -> CInt in - return sqlite3_preupdate_old(connection, column, &value) - }) - } - - private func preupdate_getValues_new(_ connection: SQLiteConnection) -> [DatabaseValue]? { - return preupdate_getValues(connection, sqlite_func: { (connection: SQLiteConnection, column: CInt, value: inout SQLiteValue? ) -> CInt in - return sqlite3_preupdate_new(connection, column, &value) - }) - } - } - - /// Impl for DatabasePreUpdateEvent that contains copies of all event data. - private struct CopiedDatabasePreUpdateEventImpl : DatabasePreUpdateEventImpl { - let databaseName: String - let tableName: String - let columnsCount: CInt - let depth: CInt - let initialDatabaseValues: [DatabaseValue]? - let finalDatabaseValues: [DatabaseValue]? - - func initialDatabaseValue(atIndex index: Int) -> DatabaseValue? { return initialDatabaseValues?[index] } - func finalDatabaseValue(atIndex index: Int) -> DatabaseValue? { return finalDatabaseValues?[index] } - - func copy(_ event: DatabasePreUpdateEvent) -> DatabasePreUpdateEvent { - return event - } - } - -#endif - -// A predicate that filters database events -enum DatabaseEventPredicate { - // Yes filter - case `true` - // Only events that match one of those kinds - case matching([DatabaseEventKind]) - - func evaluate(_ event: DatabaseEventProtocol) -> Bool { - switch self { - case .true: - return true - case .matching(let kinds): - return kinds.contains { event.matchesKind($0) } - } - } -} - -// MARK: - SavepointStack - -/// The SQLite savepoint stack is described at -/// https://www.sqlite.org/lang_savepoint.html -/// -/// This class reimplements the SQLite stack, so that we can: -/// -/// - know if there are currently active savepoints (isEmpty) -/// - buffer database events when a savepoint is active, in order to avoid -/// notifying transaction observers of database events that could be -/// rollbacked. -class SavepointStack { - /// The buffered events (see DatabaseObservationBroker.databaseDidChange(with:)) - var eventsBuffer: [(event: DatabaseEventProtocol, statementObservations: [StatementObservation])] = [] - - /// The savepoint stack, as an array of tuples (savepointName, index in the eventsBuffer array). - /// Indexes let us drop rollbacked events from the event buffer. - private var savepoints: [(name: String, index: Int)] = [] - - /// If true, there is no current save point. - var isEmpty: Bool { return savepoints.isEmpty } - - func clear() { - eventsBuffer.removeAll() - savepoints.removeAll() - } - - func savepointDidBegin(_ name: String) { - savepoints.append((name: name.lowercased(), index: eventsBuffer.count)) - } - - // https://www.sqlite.org/lang_savepoint.html - // > The ROLLBACK command with a TO clause rolls back transactions going - // > backwards in time back to the most recent SAVEPOINT with a matching - // > name. The SAVEPOINT with the matching name remains on the transaction - // > stack, but all database changes that occurred after that SAVEPOINT was - // > created are rolled back. If the savepoint-name in a ROLLBACK TO - // > command does not match any SAVEPOINT on the stack, then the ROLLBACK - // > command fails with an error and leaves the state of the - // > database unchanged. - func savepointDidRollback(_ name: String) { - let name = name.lowercased() - while let pair = savepoints.last, pair.name != name { - savepoints.removeLast() - } - if let savepoint = savepoints.last { - eventsBuffer.removeLast(eventsBuffer.count - savepoint.index) - } - assert(!savepoints.isEmpty || eventsBuffer.isEmpty) - } - - // https://www.sqlite.org/lang_savepoint.html - // > The RELEASE command starts with the most recent addition to the - // > transaction stack and releases savepoints backwards in time until it - // > releases a savepoint with a matching savepoint-name. Prior savepoints, - // > even savepoints with matching savepoint-names, are unchanged. - func savepointDidRelease(_ name: String) { - let name = name.lowercased() - while let pair = savepoints.last, pair.name != name { - savepoints.removeLast() - } - if !savepoints.isEmpty { - savepoints.removeLast() - } - } -} - diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS3.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS3.swift deleted file mode 100755 index 4bf3abf..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS3.swift +++ /dev/null @@ -1,100 +0,0 @@ -/// FTS3 lets you define "fts3" virtual tables. -/// -/// // CREATE VIRTUAL TABLE document USING fts3(content) -/// try db.create(virtualTable: "document", using: FTS3()) { t in -/// t.column("content") -/// } -public struct FTS3 : VirtualTableModule { - /// Options for Latin script characters. Matches the raw "remove_diacritics" - /// tokenizer argument. - /// - /// See https://www.sqlite.org/fts3.html - public enum Diacritics { - /// Do not remove diacritics from Latin script characters. This - /// option matches the raw "remove_diacritics=0" tokenizer argument. - case keep - /// Remove diacritics from Latin script characters. This - /// option matches the raw "remove_diacritics=1" tokenizer argument. - case removeLegacy - #if GRDBCUSTOMSQLITE - /// Remove diacritics from Latin script characters. This - /// option matches the raw "remove_diacritics=2" tokenizer argument, - /// available from SQLite 3.27.0 - case remove - #endif - } - - /// Creates a FTS3 module suitable for the Database - /// `create(virtualTable:using:)` method. - /// - /// // CREATE VIRTUAL TABLE document USING fts3(content) - /// try db.create(virtualTable: "document", using: FTS3()) { t in - /// t.column("content") - /// } - public init() { - } - - // MARK: - VirtualTableModule Adoption - - /// The virtual table module name - public let moduleName = "fts3" - - /// Reserved; part of the VirtualTableModule protocol. - /// - /// See Database.create(virtualTable:using:) - public func makeTableDefinition() -> FTS3TableDefinition { - return FTS3TableDefinition() - } - - /// Reserved; part of the VirtualTableModule protocol. - /// - /// See Database.create(virtualTable:using:) - public func moduleArguments(for definition: FTS3TableDefinition, in db: Database) -> [String] { - var arguments = definition.columns - if let tokenizer = definition.tokenizer { - if tokenizer.arguments.isEmpty { - arguments.append("tokenize=\(tokenizer.name)") - } else { - arguments.append("tokenize=\(tokenizer.name) " + tokenizer.arguments.map { "\"\($0)\"" as String }.joined(separator: " ")) - } - } - return arguments - } - - /// Reserved; part of the VirtualTableModule protocol. - /// - /// See Database.create(virtualTable:using:) - public func database(_ db: Database, didCreate tableName: String, using definition: FTS3TableDefinition) { - } -} - -/// The FTS3TableDefinition class lets you define columns of a FTS3 virtual table. -/// -/// You don't create instances of this class. Instead, you use the Database -/// `create(virtualTable:using:)` method: -/// -/// try db.create(virtualTable: "document", using: FTS3()) { t in // t is FTS3TableDefinition -/// t.column("content") -/// } -public final class FTS3TableDefinition { - fileprivate var columns: [String] = [] - - /// The virtual table tokenizer - /// - /// try db.create(virtualTable: "document", using: FTS3()) { t in - /// t.tokenizer = .porter - /// } - /// See https://www.sqlite.org/fts3.html#creating_and_destroying_fts_tables - public var tokenizer: FTS3TokenizerDescriptor? - - /// Appends a table column. - /// - /// try db.create(virtualTable: "document", using: FTS3()) { t in - /// t.column("content") - /// } - /// - /// - parameter name: the column name. - public func column(_ name: String) { - columns.append(name) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS3Pattern.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS3Pattern.swift deleted file mode 100755 index 69c43d0..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS3Pattern.swift +++ /dev/null @@ -1,131 +0,0 @@ -/// A full text pattern that can query FTS3 and FTS4 virtual tables. -public struct FTS3Pattern { - - /// The raw pattern string. Guaranteed to be a valid FTS3/4 pattern. - public let rawPattern: String - - /// Creates a pattern from a raw pattern string; throws DatabaseError on - /// invalid syntax. - /// - /// The pattern syntax is documented at https://www.sqlite.org/fts3.html#full_text_index_queries - /// - /// try FTS3Pattern(rawPattern: "and") // OK - /// try FTS3Pattern(rawPattern: "AND") // malformed MATCH expression: [AND] - public init(rawPattern: String) throws { - // Correctness above all: use SQLite to validate the pattern. - // - // Invalid patterns have SQLite return an error on the first - // call to sqlite3_step() on a statement that matches against - // that pattern. - do { - try DatabaseQueue().inDatabase { db in - try db.execute(sql: "CREATE VIRTUAL TABLE documents USING fts3()") - try db.execute(sql: "SELECT * FROM documents WHERE content MATCH ?", arguments: [rawPattern]) - } - } catch let error as DatabaseError { - // Remove private SQL & arguments from the thrown error - throw DatabaseError(resultCode: error.extendedResultCode, message: error.message, sql: nil, arguments: nil) - } - - // Pattern is valid - self.rawPattern = rawPattern - } - - #if GRDBCUSTOMSQLITE || GRDBCIPHER - /// Creates a pattern that matches any token found in the input string; - /// returns nil if no pattern could be built. - /// - /// FTS3Pattern(matchingAnyTokenIn: "") // nil - /// FTS3Pattern(matchingAnyTokenIn: "foo bar") // foo OR bar - /// - /// - parameter string: The string to turn into an FTS3 pattern - public init?(matchingAnyTokenIn string: String) { - let tokens = FTS3TokenizerDescriptor.simple.tokenize(string) - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: tokens.joined(separator: " OR ")) - } - - /// Creates a pattern that matches all tokens found in the input string; - /// returns nil if no pattern could be built. - /// - /// FTS3Pattern(matchingAllTokensIn: "") // nil - /// FTS3Pattern(matchingAllTokensIn: "foo bar") // foo bar - /// - /// - parameter string: The string to turn into an FTS3 pattern - public init?(matchingAllTokensIn string: String) { - let tokens = FTS3TokenizerDescriptor.simple.tokenize(string) - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: tokens.joined(separator: " ")) - } - - /// Creates a pattern that matches a contiguous string; returns nil if no - /// pattern could be built. - /// - /// FTS3Pattern(matchingPhrase: "") // nil - /// FTS3Pattern(matchingPhrase: "foo bar") // "foo bar" - /// - /// - parameter string: The string to turn into an FTS3 pattern - public init?(matchingPhrase string: String) { - let tokens = FTS3TokenizerDescriptor.simple.tokenize(string) - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: "\"" + tokens.joined(separator: " ") + "\"") - } - #else - /// Creates a pattern that matches any token found in the input string; - /// returns nil if no pattern could be built. - /// - /// FTS3Pattern(matchingAnyTokenIn: "") // nil - /// FTS3Pattern(matchingAnyTokenIn: "foo bar") // foo OR bar - /// - /// - parameter string: The string to turn into an FTS3 pattern - @available(OSX 10.10, *) - public init?(matchingAnyTokenIn string: String) { - let tokens = FTS3TokenizerDescriptor.simple.tokenize(string) - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: tokens.joined(separator: " OR ")) - } - - /// Creates a pattern that matches all tokens found in the input string; - /// returns nil if no pattern could be built. - /// - /// FTS3Pattern(matchingAllTokensIn: "") // nil - /// FTS3Pattern(matchingAllTokensIn: "foo bar") // foo bar - /// - /// - parameter string: The string to turn into an FTS3 pattern - @available(OSX 10.10, *) - public init?(matchingAllTokensIn string: String) { - let tokens = FTS3TokenizerDescriptor.simple.tokenize(string) - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: tokens.joined(separator: " ")) - } - - /// Creates a pattern that matches a contiguous string; returns nil if no - /// pattern could be built. - /// - /// FTS3Pattern(matchingPhrase: "") // nil - /// FTS3Pattern(matchingPhrase: "foo bar") // "foo bar" - /// - /// - parameter string: The string to turn into an FTS3 pattern - @available(OSX 10.10, *) - public init?(matchingPhrase string: String) { - let tokens = FTS3TokenizerDescriptor.simple.tokenize(string) - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: "\"" + tokens.joined(separator: " ") + "\"") - } - #endif -} - -extension FTS3Pattern : DatabaseValueConvertible { - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return rawPattern.databaseValue - } - - /// Returns an FTS3Pattern initialized from *dbValue*, if it contains - /// a suitable value. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> FTS3Pattern? { - return String - .fromDatabaseValue(dbValue) - .flatMap { try? FTS3Pattern(rawPattern: $0) } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS3TokenizerDescriptor.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS3TokenizerDescriptor.swift deleted file mode 100755 index 44f667d..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS3TokenizerDescriptor.swift +++ /dev/null @@ -1,130 +0,0 @@ -/// An FTS3 tokenizer, suitable for FTS3 and FTS4 table definitions: -/// -/// db.create(virtualTable: "book", using: FTS4()) { t in -/// t.tokenizer = .simple // FTS3TokenizerDescriptor -/// } -/// -/// See https://www.sqlite.org/fts3.html#tokenizer -public struct FTS3TokenizerDescriptor { - let name: String - let arguments: [String] - - init(_ name: String, arguments: [String] = []) { - self.name = name - self.arguments = arguments - } - - /// The "simple" tokenizer. - /// - /// db.create(virtualTable: "book", using: FTS4()) { t in - /// t.tokenizer = .simple - /// } - /// - /// See https://www.sqlite.org/fts3.html#tokenizer - public static let simple = FTS3TokenizerDescriptor("simple") - - /// The "porter" tokenizer. - /// - /// db.create(virtualTable: "book", using: FTS4()) { t in - /// t.tokenizer = .porter - /// } - /// - /// See https://www.sqlite.org/fts3.html#tokenizer - public static let porter = FTS3TokenizerDescriptor("porter") - - #if GRDBCUSTOMSQLITE || GRDBCIPHER - /// The "unicode61" tokenizer. - /// - /// db.create(virtualTable: "book", using: FTS4()) { t in - /// t.tokenizer = .unicode61() - /// } - /// - /// - parameters: - /// - diacritics: By default SQLite will strip diacritics from - /// latin characters. - /// - separators: Unless empty (the default), SQLite will consider these - /// characters as token separators. - /// - tokenCharacters: Unless empty (the default), SQLite will consider - /// these characters as token characters. - /// - /// See https://www.sqlite.org/fts3.html#tokenizer - public static func unicode61(diacritics: FTS3.Diacritics = .removeLegacy, separators: Set = [], tokenCharacters: Set = []) -> FTS3TokenizerDescriptor { - return _unicode61(diacritics: diacritics, separators: separators, tokenCharacters: tokenCharacters) - } - #else - /// The "unicode61" tokenizer. - /// - /// db.create(virtualTable: "book", using: FTS4()) { t in - /// t.tokenizer = .unicode61() - /// } - /// - /// - parameters: - /// - diacritics: By default SQLite will strip diacritics from - /// latin characters. - /// - separators: Unless empty (the default), SQLite will consider these - /// characters as token separators. - /// - tokenCharacters: Unless empty (the default), SQLite will consider - /// these characters as token characters. - /// - /// See https://www.sqlite.org/fts3.html#tokenizer - @available(OSX 10.10, *) - public static func unicode61(diacritics: FTS3.Diacritics = .removeLegacy, separators: Set = [], tokenCharacters: Set = []) -> FTS3TokenizerDescriptor { - // query_only pragma was added in SQLite 3.8.0 http://www.sqlite.org/changes.html#version_3_8_0 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - return _unicode61(diacritics: diacritics, separators: separators, tokenCharacters: tokenCharacters) - } - #endif - - private static func _unicode61(diacritics: FTS3.Diacritics, separators: Set = [], tokenCharacters: Set = []) -> FTS3TokenizerDescriptor { - var arguments: [String] = [] - switch diacritics { - case .removeLegacy: - break - case .keep: - arguments.append("remove_diacritics=0") - #if GRDBCUSTOMSQLITE - case .remove: - arguments.append("remove_diacritics=2") - #endif - } - if !separators.isEmpty { - // TODO: test "=" and "\"", "(" and ")" as separators, with both FTS3Pattern(matchingAnyTokenIn:tokenizer:) and Database.create(virtualTable:using:) - arguments.append("separators=" + separators.sorted().map { String($0) }.joined(separator: "")) - } - if !tokenCharacters.isEmpty { - // TODO: test "=" and "\"", "(" and ")" as tokenCharacters, with both FTS3Pattern(matchingAnyTokenIn:tokenizer:) and Database.create(virtualTable:using:) - arguments.append("tokenchars=" + tokenCharacters.sorted().map { String($0) }.joined(separator: "")) - } - return FTS3TokenizerDescriptor("unicode61", arguments: arguments) - } - - #if GRDBCUSTOMSQLITE || GRDBCIPHER - func tokenize(_ string: String) -> [String] { - return _tokenize(string) - } - #else - @available(OSX 10.10, *) - func tokenize(_ string: String) -> [String] { - return _tokenize(string) - } - #endif - - /// Returns an array of tokens found in the string argument. - /// - /// FTS3TokenizerDescriptor.simple.tokenize("foo bar") // ["foo", "bar"] - private func _tokenize(_ string: String) -> [String] { - // fts3tokenize was introduced in SQLite 3.7.17 https://www.sqlite.org/changes.html#version_3_7_17 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - return DatabaseQueue().inDatabase { db in - var tokenizerChunks: [String] = [] - tokenizerChunks.append(name) - for option in arguments { - tokenizerChunks.append("\"\(option)\"") - } - let tokenizerSQL = tokenizerChunks.joined(separator: ", ") - // Assume fts3tokenize virtual table in an in-memory database always succeeds - try! db.execute(sql: "CREATE VIRTUAL TABLE tokens USING fts3tokenize(\(tokenizerSQL))") - return try! String.fetchAll(db, sql: "SELECT token FROM tokens WHERE input = ? ORDER BY position", arguments: [string]) - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS4.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS4.swift deleted file mode 100755 index 56dc6e0..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS4.swift +++ /dev/null @@ -1,328 +0,0 @@ -/// FTS4 lets you define "fts4" virtual tables. -/// -/// // CREATE VIRTUAL TABLE document USING fts4(content) -/// try db.create(virtualTable: "document", using: FTS4()) { t in -/// t.column("content") -/// } -/// -/// See https://www.sqlite.org/fts3.html -public struct FTS4 : VirtualTableModule { - - /// Creates a FTS4 module suitable for the Database - /// `create(virtualTable:using:)` method. - /// - /// // CREATE VIRTUAL TABLE document USING fts4(content) - /// try db.create(virtualTable: "document", using: FTS4()) { t in - /// t.column("content") - /// } - /// - /// See https://www.sqlite.org/fts3.html - public init() { - } - - // MARK: - VirtualTableModule Adoption - - /// The virtual table module name - public let moduleName = "fts4" - - /// Reserved; part of the VirtualTableModule protocol. - /// - /// See Database.create(virtualTable:using:) - public func makeTableDefinition() -> FTS4TableDefinition { - return FTS4TableDefinition() - } - - /// Reserved; part of the VirtualTableModule protocol. - /// - /// See Database.create(virtualTable:using:) - public func moduleArguments(for definition: FTS4TableDefinition, in db: Database) -> [String] { - var arguments: [String] = [] - - for column in definition.columns { - if column.isLanguageId { - arguments.append("languageid=\"\(column.name)\"") - } else { - arguments.append(column.name) - if !column.isIndexed { - arguments.append("notindexed=\(column.name)") - } - } - } - - if let tokenizer = definition.tokenizer { - if tokenizer.arguments.isEmpty { - arguments.append("tokenize=\(tokenizer.name)") - } else { - arguments.append("tokenize=\(tokenizer.name) " + tokenizer.arguments.map { "\"\($0)\"" as String }.joined(separator: " ")) - } - } - - switch definition.contentMode { - case .raw(let content): - if let content = content { - arguments.append("content=\"\(content)\"") - } - case .synchronized(let contentTable): - arguments.append("content=\"\(contentTable)\"") - } - - if let compress = definition.compress { - arguments.append("compress=\"\(compress)\"") - } - - if let uncompress = definition.uncompress { - arguments.append("uncompress=\"\(uncompress)\"") - } - - if let matchinfo = definition.matchinfo { - arguments.append("matchinfo=\"\(matchinfo)\"") - } - - if let prefixes = definition.prefixes { - arguments.append("prefix=\"\(prefixes.sorted().map { "\($0)" }.joined(separator: ","))\"") - } - - return arguments - } - - /// Reserved; part of the VirtualTableModule protocol. - /// - /// See Database.create(virtualTable:using:) - public func database(_ db: Database, didCreate tableName: String, using definition: FTS4TableDefinition) throws { - switch definition.contentMode { - case .raw: - break - case .synchronized(let contentTable): - // https://www.sqlite.org/fts3.html#_external_content_fts4_tables_ - - let rowIDColumn = try db.primaryKey(contentTable).rowIDColumn ?? Column.rowID.name - let ftsTable = tableName.quotedDatabaseIdentifier - let content = contentTable.quotedDatabaseIdentifier - let indexedColumns = definition.columns.map { $0.name } - - let ftsColumns = (["docid"] + indexedColumns) - .map { $0.quotedDatabaseIdentifier } - .joined(separator: ", ") - - let newContentColumns = ([rowIDColumn] + indexedColumns) - .map { "new.\($0.quotedDatabaseIdentifier)" } - .joined(separator: ", ") - - let oldRowID = "old.\(rowIDColumn.quotedDatabaseIdentifier)" - - try db.execute(sql: """ - CREATE TRIGGER \("__\(tableName)_bu".quotedDatabaseIdentifier) BEFORE UPDATE ON \(content) BEGIN - DELETE FROM \(ftsTable) WHERE docid=\(oldRowID); - END; - CREATE TRIGGER \("__\(tableName)_bd".quotedDatabaseIdentifier) BEFORE DELETE ON \(content) BEGIN - DELETE FROM \(ftsTable) WHERE docid=\(oldRowID); - END; - CREATE TRIGGER \("__\(tableName)_au".quotedDatabaseIdentifier) AFTER UPDATE ON \(content) BEGIN - INSERT INTO \(ftsTable)(\(ftsColumns)) VALUES(\(newContentColumns)); - END; - CREATE TRIGGER \("__\(tableName)_ai".quotedDatabaseIdentifier) AFTER INSERT ON \(content) BEGIN - INSERT INTO \(ftsTable)(\(ftsColumns)) VALUES(\(newContentColumns)); - END; - """) - - // https://www.sqlite.org/fts3.html#*fts4rebuidcmd - - try db.execute(sql: "INSERT INTO \(ftsTable)(\(ftsTable)) VALUES('rebuild')") - } - } -} - -/// The FTS4TableDefinition class lets you define columns of a FTS4 virtual table. -/// -/// You don't create instances of this class. Instead, you use the Database -/// `create(virtualTable:using:)` method: -/// -/// try db.create(virtualTable: "document", using: FTS4()) { t in // t is FTS4TableDefinition -/// t.column("content") -/// } -/// -/// See https://www.sqlite.org/fts3.html -public final class FTS4TableDefinition { - enum ContentMode { - case raw(content: String?) - case synchronized(contentTable: String) - } - - fileprivate var columns: [FTS4ColumnDefinition] = [] - fileprivate var contentMode: ContentMode = .raw(content: nil) - - /// The virtual table tokenizer - /// - /// try db.create(virtualTable: "document", using: FTS4()) { t in - /// t.tokenizer = .porter - /// } - /// - /// See https://www.sqlite.org/fts3.html#creating_and_destroying_fts_tables - public var tokenizer: FTS3TokenizerDescriptor? - - /// The FTS4 `content` option - /// - /// When you want the full-text table to be synchronized with the - /// content of an external table, prefer the `synchronize(withTable:)` - /// method. - /// - /// Setting this property invalidates any synchronization previously - /// established with the `synchronize(withTable:)` method. - /// - /// See https://www.sqlite.org/fts3.html#the_content_option_ - public var content: String? { - get { - switch contentMode { - case .raw(let content): - return content - case .synchronized(let contentTable): - return contentTable - } - } - set { - contentMode = .raw(content: newValue) - } - } - - /// The FTS4 `compress` option - /// - /// See https://www.sqlite.org/fts3.html#the_compress_and_uncompress_options - public var compress: String? - - /// The FTS4 `uncompress` option - /// - /// See https://www.sqlite.org/fts3.html#the_compress_and_uncompress_options - public var uncompress: String? - - /// The FTS4 `matchinfo` option - /// - /// See https://www.sqlite.org/fts3.html#the_matchinfo_option - public var matchinfo: String? - - /// Support for the FTS5 `prefix` option - /// - /// // CREATE VIRTUAL TABLE document USING FTS4(content, prefix='2 4'); - /// db.create(virtualTable: "document", using:FTS4()) { t in - /// t.prefixes = [2, 4] - /// t.column("content") - /// } - /// - /// See https://www.sqlite.org/fts3.html#the_prefix_option - public var prefixes: Set? - - /// Appends a table column. - /// - /// try db.create(virtualTable: "document", using: FTS4()) { t in - /// t.column("content") - /// } - /// - /// - parameter name: the column name. - @discardableResult - public func column(_ name: String) -> FTS4ColumnDefinition { - let column = FTS4ColumnDefinition(name: name) - columns.append(column) - return column - } - - /// Synchronizes the full-text table with the content of an external - /// table. - /// - /// The full-text table is initially populated with the existing - /// content in the external table. SQL triggers make sure that the - /// full-text table is kept up to date with the external table. - /// - /// See https://sqlite.org/fts5.html#external_content_tables - public func synchronize(withTable tableName: String) { - contentMode = .synchronized(contentTable: tableName) - } -} - -/// The FTS4ColumnDefinition class lets you refine a column of an FTS4 -/// virtual table. -/// -/// You get instances of this class when you create an FTS4 table: -/// -/// try db.create(virtualTable: "document", using: FTS4()) { t in -/// t.column("content") // FTS4ColumnDefinition -/// } -/// -/// See https://www.sqlite.org/fts3.html -public final class FTS4ColumnDefinition { - fileprivate let name: String - fileprivate var isIndexed: Bool - fileprivate var isLanguageId: Bool - - init(name: String) { - self.name = name - self.isIndexed = true - self.isLanguageId = false - } - - #if GRDBCUSTOMSQLITE || GRDBCIPHER - /// Excludes the column from the full-text index. - /// - /// try db.create(virtualTable: "document", using: FTS4()) { t in - /// t.column("a") - /// t.column("b").notIndexed() - /// } - /// - /// See https://www.sqlite.org/fts3.html#the_notindexed_option - /// - /// - returns: Self so that you can further refine the column definition. - /// :nodoc: - @discardableResult - public func notIndexed() -> Self { - // notindexed FTS4 option was added in SQLite 3.8.0 http://www.sqlite.org/changes.html#version_3_8_0 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - self.isIndexed = false - return self - } - #else - /// Excludes the column from the full-text index. - /// - /// try db.create(virtualTable: "document", using: FTS4()) { t in - /// t.column("a") - /// t.column("b").notIndexed() - /// } - /// - /// See https://www.sqlite.org/fts3.html#the_notindexed_option - /// - /// - returns: Self so that you can further refine the column definition. - @available(OSX 10.10, *) - @discardableResult - public func notIndexed() -> Self { - // notindexed FTS4 option was added in SQLite 3.8.0 http://www.sqlite.org/changes.html#version_3_8_0 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - self.isIndexed = false - return self - } - #endif - - /// Uses the column as the Int32 language id hidden column. - /// - /// try db.create(virtualTable: "document", using: FTS4()) { t in - /// t.column("a") - /// t.column("lid").asLanguageId() - /// } - /// - /// See https://www.sqlite.org/fts3.html#the_languageid_option - /// - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func asLanguageId() -> Self { - self.isLanguageId = true - return self - } -} - -extension Database { - /// Deletes the synchronization triggers for a synchronized FTS4 table - public func dropFTS4SynchronizationTriggers(forTable tableName: String) throws { - try execute(sql: """ - DROP TRIGGER IF EXISTS \("__\(tableName)_bu".quotedDatabaseIdentifier); - DROP TRIGGER IF EXISTS \("__\(tableName)_bd".quotedDatabaseIdentifier); - DROP TRIGGER IF EXISTS \("__\(tableName)_au".quotedDatabaseIdentifier); - DROP TRIGGER IF EXISTS \("__\(tableName)_ai".quotedDatabaseIdentifier); - """) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS5.swift deleted file mode 100755 index d78c52a..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5.swift +++ /dev/null @@ -1,407 +0,0 @@ -#if SQLITE_ENABLE_FTS5 -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// FTS5 lets you define "fts5" virtual tables. -/// -/// // CREATE VIRTUAL TABLE document USING fts5(content) -/// try db.create(virtualTable: "document", using: FTS5()) { t in -/// t.column("content") -/// } -/// -/// See https://www.sqlite.org/fts5.html -public struct FTS5 : VirtualTableModule { - /// Options for Latin script characters. Matches the raw "remove_diacritics" - /// tokenizer argument. - /// - /// See https://www.sqlite.org/fts5.html - public enum Diacritics { - /// Do not remove diacritics from Latin script characters. This - /// option matches the raw "remove_diacritics=0" tokenizer argument. - case keep - /// Remove diacritics from Latin script characters. This - /// option matches the raw "remove_diacritics=1" tokenizer argument. - case removeLegacy - #if GRDBCUSTOMSQLITE - /// Remove diacritics from Latin script characters. This - /// option matches the raw "remove_diacritics=2" tokenizer argument, - /// available from SQLite 3.27.0 - case remove - #endif - } - - /// Creates a FTS5 module suitable for the Database - /// `create(virtualTable:using:)` method. - /// - /// // CREATE VIRTUAL TABLE document USING fts5(content) - /// try db.create(virtualTable: "document", using: FTS5()) { t in - /// t.column("content") - /// } - /// - /// See https://www.sqlite.org/fts5.html - public init() { - } - - // MARK: - VirtualTableModule Adoption - - /// The virtual table module name - public let moduleName = "fts5" - - /// Don't use this method. - public func makeTableDefinition() -> FTS5TableDefinition { - return FTS5TableDefinition() - } - - /// Don't use this method. - public func moduleArguments(for definition: FTS5TableDefinition, in db: Database) throws -> [String] { - var arguments: [String] = [] - - if definition.columns.isEmpty { - // Programmer error - fatalError("FTS5 virtual table requires at least one column.") - } - - for column in definition.columns { - if column.isIndexed { - arguments.append("\(column.name)") - } else { - arguments.append("\(column.name) UNINDEXED") - } - } - - if let tokenizer = definition.tokenizer { - arguments.append("tokenize=\(tokenizer.components.joined(separator: " ").sqlExpression.quotedSQL())") - } - - switch definition.contentMode { - case .raw(let content, let contentRowID): - if let content = content { - arguments.append("content=\(content.sqlExpression.quotedSQL())") - } - if let contentRowID = contentRowID { - arguments.append("content_rowid=\(contentRowID.sqlExpression.quotedSQL())") - } - case .synchronized(let contentTable): - arguments.append("content=\(contentTable.sqlExpression.quotedSQL())") - if let rowIDColumn = try db.primaryKey(contentTable).rowIDColumn { - arguments.append("content_rowid=\(rowIDColumn.sqlExpression.quotedSQL())") - } - } - - - if let prefixes = definition.prefixes { - arguments.append("prefix=\(prefixes.sorted().map { "\($0)" }.joined(separator: " ").sqlExpression.quotedSQL())") - } - - if let columnSize = definition.columnSize { - arguments.append("columnSize=\(columnSize)") - } - - if let detail = definition.detail { - arguments.append("detail=\(detail)") - } - - return arguments - } - - /// Reserved; part of the VirtualTableModule protocol. - /// - /// See Database.create(virtualTable:using:) - public func database(_ db: Database, didCreate tableName: String, using definition: FTS5TableDefinition) throws { - switch definition.contentMode { - case .raw: - break - case .synchronized(let contentTable): - // https://sqlite.org/fts5.html#external_content_tables - - let rowIDColumn = try db.primaryKey(contentTable).rowIDColumn ?? Column.rowID.name - let ftsTable = tableName.quotedDatabaseIdentifier - let content = contentTable.quotedDatabaseIdentifier - let indexedColumns = definition.columns.map { $0.name } - - let ftsColumns = (["rowid"] + indexedColumns) - .map { $0.quotedDatabaseIdentifier } - .joined(separator: ", ") - - let newContentColumns = ([rowIDColumn] + indexedColumns) - .map { "new.\($0.quotedDatabaseIdentifier)" } - .joined(separator: ", ") - - let oldContentColumns = ([rowIDColumn] + indexedColumns) - .map { "old.\($0.quotedDatabaseIdentifier)" } - .joined(separator: ", ") - - try db.execute(sql: """ - CREATE TRIGGER \("__\(tableName)_ai".quotedDatabaseIdentifier) AFTER INSERT ON \(content) BEGIN - INSERT INTO \(ftsTable)(\(ftsColumns)) VALUES (\(newContentColumns)); - END; - CREATE TRIGGER \("__\(tableName)_ad".quotedDatabaseIdentifier) AFTER DELETE ON \(content) BEGIN - INSERT INTO \(ftsTable)(\(ftsTable), \(ftsColumns)) VALUES('delete', \(oldContentColumns)); - END; - CREATE TRIGGER \("__\(tableName)_au".quotedDatabaseIdentifier) AFTER UPDATE ON \(content) BEGIN - INSERT INTO \(ftsTable)(\(ftsTable), \(ftsColumns)) VALUES('delete', \(oldContentColumns)); - INSERT INTO \(ftsTable)(\(ftsColumns)) VALUES (\(newContentColumns)); - END; - """) - - // https://sqlite.org/fts5.html#the_rebuild_command - - try db.execute(sql: "INSERT INTO \(ftsTable)(\(ftsTable)) VALUES('rebuild')") - } - } - - static func api(_ db: Database) -> UnsafePointer { - // Access to FTS5 is one of the rare SQLite api which was broken in - // SQLite 3.20.0+, for security reasons: - // - // Starting SQLite 3.20.0+, we need to use the new sqlite3_bind_pointer api. - // The previous way to access FTS5 does not work any longer. - // - // So let's see which SQLite version we are linked against: - - #if GRDBCUSTOMSQLITE || GRDBCIPHER - // GRDB is linked against SQLCipher or a custom SQLite build: SQLite 3.20.0 or more. - return api_v2(db, sqlite3_prepare_v3, sqlite3_bind_pointer) - #else - // GRDB is linked against the system SQLite. - // - // Do we use SQLite 3.19.3 (iOS 11.4), or SQLite 3.24.0 (iOS 12.0)? - if #available(iOS 12.0, OSX 10.14, watchOS 5.0, *) { - // SQLite 3.24.0 or more - return api_v2(db, sqlite3_prepare_v3, sqlite3_bind_pointer) - } else { - // SQLite 3.19.3 or less - return api_v1(db) - } - #endif - } - - private static func api_v1(_ db: Database) -> UnsafePointer { - guard let data = try! Data.fetchOne(db, sql: "SELECT fts5()") else { - fatalError("FTS5 is not available") - } - #if swift(>=5.0) - return data.withUnsafeBytes { - $0.bindMemory(to: UnsafePointer.self).first! - } - #else - return data.withUnsafeBytes { - $0.pointee - } - #endif - } - - // Technique given by Jordan Rose: - // https://forums.swift.org/t/c-interoperability-combinations-of-library-and-os-versions/14029/4 - private static func api_v2( - _ db: Database, - _ sqlite3_prepare_v3: @convention(c) (OpaquePointer?, UnsafePointer?, Int32, UInt32, UnsafeMutablePointer?, UnsafeMutablePointer?>?) -> Int32, - _ sqlite3_bind_pointer: @convention(c) (OpaquePointer?, Int32, UnsafeMutableRawPointer?, UnsafePointer?, (@convention(c) (UnsafeMutableRawPointer?) -> Void)?) -> Int32) - -> UnsafePointer - { - let sqliteConnection = db.sqliteConnection - var statement: SQLiteStatement? = nil - var api: UnsafePointer? = nil - let type: StaticString = "fts5_api_ptr" - - let code = sqlite3_prepare_v3(db.sqliteConnection, "SELECT fts5(?)", -1, 0, &statement, nil) - guard code == SQLITE_OK else { - fatalError("FTS5 is not available") - } - defer { sqlite3_finalize(statement) } - type.utf8Start.withMemoryRebound(to: Int8.self, capacity: type.utf8CodeUnitCount) { typePointer in - _ = sqlite3_bind_pointer(statement, 1, &api, typePointer, nil) - } - sqlite3_step(statement) - guard let result = api else { - fatalError("FTS5 is not available") - } - return result - } -} - -/// The FTS5TableDefinition class lets you define columns of a FTS5 virtual table. -/// -/// You don't create instances of this class. Instead, you use the Database -/// `create(virtualTable:using:)` method: -/// -/// try db.create(virtualTable: "document", using: FTS5()) { t in // t is FTS5TableDefinition -/// t.column("content") -/// } -/// -/// See https://www.sqlite.org/fts5.html -public final class FTS5TableDefinition { - enum ContentMode { - case raw(content: String?, contentRowID: String?) - case synchronized(contentTable: String) - } - - fileprivate var columns: [FTS5ColumnDefinition] = [] - fileprivate var contentMode: ContentMode = .raw(content: nil, contentRowID: nil) - - /// The virtual table tokenizer - /// - /// try db.create(virtualTable: "document", using: FTS5()) { t in - /// t.tokenizer = .porter() - /// } - /// - /// See https://www.sqlite.org/fts5.html#fts5_table_creation_and_initialization - public var tokenizer: FTS5TokenizerDescriptor? - - /// The FTS5 `content` option - /// - /// When you want the full-text table to be synchronized with the - /// content of an external table, prefer the `synchronize(withTable:)` - /// method. - /// - /// Setting this property invalidates any synchronization previously - /// established with the `synchronize(withTable:)` method. - /// - /// See https://www.sqlite.org/fts5.html#external_content_and_contentless_tables - public var content: String? { - get { - switch contentMode { - case .raw(let content, _): - return content - case .synchronized(let contentTable): - return contentTable - } - } - set { - switch contentMode { - case .raw(_, let contentRowID): - contentMode = .raw(content: newValue, contentRowID: contentRowID) - case .synchronized: - contentMode = .raw(content: newValue, contentRowID: nil) - } - } - } - - /// The FTS5 `content_rowid` option - /// - /// When you want the full-text table to be synchronized with the - /// content of an external table, prefer the `synchronize(withTable:)` - /// method. - /// - /// Setting this property invalidates any synchronization previously - /// established with the `synchronize(withTable:)` method. - /// - /// See https://sqlite.org/fts5.html#external_content_tables - public var contentRowID: String? { - get { - switch contentMode { - case .raw(_, let contentRowID): - return contentRowID - case .synchronized: - return nil - } - } - set { - switch contentMode { - case .raw(let content, _): - contentMode = .raw(content: content, contentRowID: newValue) - case .synchronized: - contentMode = .raw(content: nil, contentRowID: newValue) - } - } - } - - /// Support for the FTS5 `prefix` option - /// - /// See https://www.sqlite.org/fts5.html#prefix_indexes - public var prefixes: Set? - - /// Support for the FTS5 `columnsize` option - /// - /// https://www.sqlite.org/fts5.html#the_columnsize_option - public var columnSize: Int? - - /// Support for the FTS5 `detail` option - /// - /// https://www.sqlite.org/fts5.html#the_detail_option - public var detail: String? - - /// Appends a table column. - /// - /// try db.create(virtualTable: "document", using: FTS5()) { t in - /// t.column("content") - /// } - /// - /// - parameter name: the column name. - @discardableResult - public func column(_ name: String) -> FTS5ColumnDefinition { - let column = FTS5ColumnDefinition(name: name) - columns.append(column) - return column - } - - /// Synchronizes the full-text table with the content of an external - /// table. - /// - /// The full-text table is initially populated with the existing - /// content in the external table. SQL triggers make sure that the - /// full-text table is kept up to date with the external table. - /// - /// See https://sqlite.org/fts5.html#external_content_tables - public func synchronize(withTable tableName: String) { - contentMode = .synchronized(contentTable: tableName) - } -} - -/// The FTS5ColumnDefinition class lets you refine a column of an FTS5 -/// virtual table. -/// -/// You get instances of this class when you create an FTS5 table: -/// -/// try db.create(virtualTable: "document", using: FTS5()) { t in -/// t.column("content") // FTS5ColumnDefinition -/// } -/// -/// See https://www.sqlite.org/fts5.html -public final class FTS5ColumnDefinition { - fileprivate let name: String - fileprivate var isIndexed: Bool - - init(name: String) { - self.name = name - self.isIndexed = true - } - - /// Excludes the column from the full-text index. - /// - /// try db.create(virtualTable: "document", using: FTS5()) { t in - /// t.column("a") - /// t.column("b").notIndexed() - /// } - /// - /// See https://www.sqlite.org/fts5.html#the_unindexed_column_option - /// - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func notIndexed() -> Self { - self.isIndexed = false - return self - } -} - -extension Column { - /// The FTS5 rank column - public static let rank = Column("rank") -} - -extension Database { - /// Deletes the synchronization triggers for a synchronized FTS5 table - public func dropFTS5SynchronizationTriggers(forTable tableName: String) throws { - try execute(sql: """ - DROP TRIGGER IF EXISTS \("__\(tableName)_ai".quotedDatabaseIdentifier); - DROP TRIGGER IF EXISTS \("__\(tableName)_ad".quotedDatabaseIdentifier); - DROP TRIGGER IF EXISTS \("__\(tableName)_au".quotedDatabaseIdentifier); - """) - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5CustomTokenizer.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS5CustomTokenizer.swift deleted file mode 100755 index 9d3a545..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5CustomTokenizer.swift +++ /dev/null @@ -1,161 +0,0 @@ -#if SQLITE_ENABLE_FTS5 -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// The protocol for custom FTS5 tokenizers. -public protocol FTS5CustomTokenizer : FTS5Tokenizer { - /// The name of the tokenizer; should uniquely identify your custom - /// tokenizer. - static var name: String { get } - - /// Creates a custom tokenizer. - /// - /// The arguments parameter is an array of String built from the CREATE - /// VIRTUAL TABLE statement. In the example below, the arguments will - /// be `["arg1", "arg2"]`. - /// - /// CREATE VIRTUAL TABLE document USING fts5( - /// tokenize='custom arg1 arg2' - /// ) - /// - /// - parameter db: A Database connection - /// - parameter arguments: An array of string arguments - init(db: Database, arguments: [String]) throws -} - -extension FTS5CustomTokenizer { - - /// Creates an FTS5 tokenizer descriptor. - /// - /// class MyTokenizer : FTS5CustomTokenizer { ... } - /// - /// db.create(virtualTable: "book", using: FTS5()) { t in - /// let tokenizer = MyTokenizer.tokenizerDescriptor(arguments: ["unicode61", "remove_diacritics", "0"]) - /// t.tokenizer = tokenizer - /// } - public static func tokenizerDescriptor(arguments: [String] = []) -> FTS5TokenizerDescriptor { - return FTS5TokenizerDescriptor(components: [name] + arguments) - } - -} - -extension Database { - - // MARK: - FTS5 - - private class FTS5TokenizerConstructor { - let db: Database - let constructor: (Database, [String], UnsafeMutablePointer?) -> Int32 - - init(db: Database, constructor: @escaping (Database, [String], UnsafeMutablePointer?) -> Int32) { - self.db = db - self.constructor = constructor - } - } - - /// Add a custom FTS5 tokenizer. - /// - /// class MyTokenizer : FTS5CustomTokenizer { ... } - /// db.add(tokenizer: MyTokenizer.self) - public func add(tokenizer: Tokenizer.Type) { - let api = FTS5.api(self) - - // Swift won't let the @convention(c) xCreate() function below create - // an instance of the generic Tokenizer type. - // - // We thus hide the generic Tokenizer type inside a neutral type: - // FTS5TokenizerConstructor - let constructor = FTS5TokenizerConstructor( - db: self, - constructor: { (db, arguments, tokenizerHandle) in - guard let tokenizerHandle = tokenizerHandle else { - return SQLITE_ERROR - } - do { - let tokenizer = try Tokenizer(db: db, arguments: arguments) - - // Tokenizer must remain alive until xDeleteTokenizer() - // is called, as the xDelete member of xTokenizer - let tokenizerPointer = OpaquePointer(Unmanaged.passRetained(tokenizer).toOpaque()) - - tokenizerHandle.pointee = tokenizerPointer - return SQLITE_OK - } catch let error as DatabaseError { - return error.extendedResultCode.rawValue - } catch { - return SQLITE_ERROR - } - }) - - // Constructor must remain alive until deleteConstructor() is - // called, as the last argument of the xCreateTokenizer() function. - let constructorPointer = Unmanaged.passRetained(constructor).toOpaque() - - func deleteConstructor(constructorPointer: UnsafeMutableRawPointer?) { - guard let constructorPointer = constructorPointer else { return } - Unmanaged.fromOpaque(constructorPointer).release() - } - - func xCreateTokenizer(constructorPointer: UnsafeMutableRawPointer?, azArg: UnsafeMutablePointer?>?, nArg: Int32, tokenizerHandle: UnsafeMutablePointer?) -> Int32 { - guard let constructorPointer = constructorPointer else { - return SQLITE_ERROR - } - let constructor = Unmanaged.fromOpaque(constructorPointer).takeUnretainedValue() - var arguments: [String] = [] - if let azArg = azArg { - for i in 0...fromOpaque(UnsafeMutableRawPointer(tokenizerPointer)).release() - } - - func xTokenize(tokenizerPointer: OpaquePointer?, context: UnsafeMutableRawPointer?, flags: Int32, pText: UnsafePointer?, nText: Int32, tokenCallback: (@convention(c) (UnsafeMutableRawPointer?, Int32, UnsafePointer?, Int32, Int32, Int32) -> Int32)?) -> Int32 { - guard let tokenizerPointer = tokenizerPointer else { - return SQLITE_ERROR - } - let object = Unmanaged.fromOpaque(UnsafeMutableRawPointer(tokenizerPointer)).takeUnretainedValue() - guard let tokenizer = object as? FTS5Tokenizer else { - return SQLITE_ERROR - } - return tokenizer.tokenize(context: context, tokenization: FTS5Tokenization(rawValue: flags), pText: pText, nText: nText, tokenCallback: tokenCallback!) - } - - var xTokenizer = fts5_tokenizer(xCreate: xCreateTokenizer, xDelete: xDeleteTokenizer, xTokenize: xTokenize) - let code = withUnsafeMutablePointer(to: &xTokenizer) { xTokenizerPointer in - api.pointee.xCreateTokenizer(UnsafeMutablePointer(mutating: api), Tokenizer.name, constructorPointer, xTokenizerPointer, deleteConstructor) - } - guard code == SQLITE_OK else { - // Assume a GRDB bug: there is no point throwing any error. - fatalError(DatabaseError(resultCode: code, message: lastErrorMessage).description) - } - } -} - -extension DatabaseQueue { - - // MARK: - Custom FTS5 Tokenizers - - /// Add a custom FTS5 tokenizer. - /// - /// class MyTokenizer : FTS5CustomTokenizer { ... } - /// dbQueue.add(tokenizer: MyTokenizer.self) - public func add(tokenizer: Tokenizer.Type) { - inDatabase { db in - db.add(tokenizer: Tokenizer.self) - } - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5Pattern.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS5Pattern.swift deleted file mode 100755 index c67558f..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5Pattern.swift +++ /dev/null @@ -1,121 +0,0 @@ -#if SQLITE_ENABLE_FTS5 -/// A full text pattern that can query FTS5 virtual tables. -public struct FTS5Pattern { - - /// The raw pattern string. Guaranteed to be a valid FTS5 pattern. - public let rawPattern: String - - /// Creates a pattern that matches any token found in the input string; - /// returns nil if no pattern could be built. - /// - /// FTS5Pattern(matchingAnyTokenIn: "") // nil - /// FTS5Pattern(matchingAnyTokenIn: "foo bar") // foo OR bar - /// - /// - parameter string: The string to turn into an FTS5 pattern - public init?(matchingAnyTokenIn string: String) { - guard let tokens = try? DatabaseQueue().inDatabase({ db in try db.makeTokenizer(.ascii()).nonSynonymTokens(in: string, for: .query) }) else { return nil } - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: tokens.joined(separator: " OR ")) - } - - /// Creates a pattern that matches all tokens found in the input string; - /// returns nil if no pattern could be built. - /// - /// FTS5Pattern(matchingAllTokensIn: "") // nil - /// FTS5Pattern(matchingAllTokensIn: "foo bar") // foo bar - /// - /// - parameter string: The string to turn into an FTS5 pattern - public init?(matchingAllTokensIn string: String) { - guard let tokens = try? DatabaseQueue().inDatabase({ db in try db.makeTokenizer(.ascii()).nonSynonymTokens(in: string, for: .query) }) else { return nil } - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: tokens.joined(separator: " ")) - } - - /// Creates a pattern that matches a contiguous string; returns nil if no - /// pattern could be built. - /// - /// FTS5Pattern(matchingPhrase: "") // nil - /// FTS5Pattern(matchingPhrase: "foo bar") // "foo bar" - /// - /// - parameter string: The string to turn into an FTS5 pattern - public init?(matchingPhrase string: String) { - guard let tokens = try? DatabaseQueue().inDatabase({ db in try db.makeTokenizer(.ascii()).nonSynonymTokens(in: string, for: .query) }) else { return nil } - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: "\"" + tokens.joined(separator: " ") + "\"") - } - - /// Creates a pattern that matches a contiguous string prefix; returns - /// nil if no pattern could be built. - /// - /// FTS5Pattern(matchingPrefixPhrase: "") // nil - /// FTS5Pattern(matchingPrefixPhrase: "foo bar") // ^"foo bar" - /// - /// - parameter string: The string to turn into an FTS5 pattern - public init?(matchingPrefixPhrase string: String) { - guard let tokens = try? DatabaseQueue().inDatabase({ db in try db.makeTokenizer(.ascii()).nonSynonymTokens(in: string, for: .query) }) else { return nil } - guard !tokens.isEmpty else { return nil } - try? self.init(rawPattern: "^\"" + tokens.joined(separator: " ") + "\"") - } - - init(rawPattern: String, allowedColumns: [String] = []) throws { - // Correctness above all: use SQLite to validate the pattern. - // - // Invalid patterns have SQLite return an error on the first - // call to sqlite3_step() on a statement that matches against - // that pattern. - do { - try DatabaseQueue().inDatabase { db in - try db.create(virtualTable: "document", using: FTS5()) { t in - if allowedColumns.isEmpty { - t.column("__grdb__") - } else { - for column in allowedColumns { - t.column(column) - } - } - } - try db.makeSelectStatement(sql: "SELECT * FROM document WHERE document MATCH ?") - .makeCursor(arguments: [rawPattern]) - .next() // error on next() for invalid patterns - } - } catch let error as DatabaseError { - // Remove private SQL & arguments from the thrown error - throw DatabaseError(resultCode: error.extendedResultCode, message: error.message, sql: nil, arguments: nil) - } - - // Pattern is valid - self.rawPattern = rawPattern - } -} - -extension Database { - - // MARK: - FTS5 - - /// Creates a pattern from a raw pattern string; throws DatabaseError on - /// invalid syntax. - /// - /// The pattern syntax is documented at https://www.sqlite.org/fts5.html#full_text_query_syntax - /// - /// try db.makeFTS5Pattern(rawPattern: "and", forTable: "document") // OK - /// try db.makeFTS5Pattern(rawPattern: "AND", forTable: "document") // malformed MATCH expression: [AND] - public func makeFTS5Pattern(rawPattern: String, forTable table: String) throws -> FTS5Pattern { - return try FTS5Pattern(rawPattern: rawPattern, allowedColumns: columns(in: table).map { $0.name }) - } -} - -extension FTS5Pattern : DatabaseValueConvertible { - /// Returns a value that can be stored in the database. - public var databaseValue: DatabaseValue { - return rawPattern.databaseValue - } - - /// Returns an FTS5Pattern initialized from *dbValue*, if it - /// contains a suitable value. - public static func fromDatabaseValue(_ dbValue: DatabaseValue) -> FTS5Pattern? { - return String - .fromDatabaseValue(dbValue) - .flatMap { try? FTS5Pattern(rawPattern: $0) } - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5Tokenizer.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS5Tokenizer.swift deleted file mode 100755 index d5dd44d..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5Tokenizer.swift +++ /dev/null @@ -1,222 +0,0 @@ -#if SQLITE_ENABLE_FTS5 -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// A low-level SQLite function that lets FTS5Tokenizer notify tokens. -/// -/// See FTS5Tokenizer.tokenize(context:flags:pText:nText:tokenCallback:) -public typealias FTS5TokenCallback = @convention(c) (_ context: UnsafeMutableRawPointer?, _ flags: Int32, _ pToken: UnsafePointer?, _ nToken: Int32, _ iStart: Int32, _ iEnd: Int32) -> Int32 - -/// The reason why FTS5 is requesting tokenization. -/// -/// See https://www.sqlite.org/fts5.html#custom_tokenizers -public struct FTS5Tokenization : OptionSet { - public let rawValue: Int32 - - public init(rawValue: Int32) { - self.rawValue = rawValue - } - - /// FTS5_TOKENIZE_QUERY - public static let query = FTS5Tokenization(rawValue: FTS5_TOKENIZE_QUERY) - - /// FTS5_TOKENIZE_PREFIX - public static let prefix = FTS5Tokenization(rawValue: FTS5_TOKENIZE_PREFIX) - - /// FTS5_TOKENIZE_DOCUMENT - public static let document = FTS5Tokenization(rawValue: FTS5_TOKENIZE_DOCUMENT) - - /// FTS5_TOKENIZE_AUX - public static let aux = FTS5Tokenization(rawValue: FTS5_TOKENIZE_AUX) -} - -/// The protocol for FTS5 tokenizers -public protocol FTS5Tokenizer : class { - /// Tokenizes the text described by `pText` and `nText`, and - /// notifies found tokens to the `tokenCallback` function. - /// - /// It matches the `xTokenize` function documented at https://www.sqlite.org/fts5.html#custom_tokenizers - /// - /// - parameters: - /// - context: An opaque pointer that is the first argument to - /// the `tokenCallback` function - /// - tokenization: The reason why FTS5 is requesting tokenization. - /// - pText: The tokenized text bytes. May or may not be - /// nul-terminated. - /// - nText: The number of bytes in the tokenized text. - /// - tokenCallback: The function to call for each found token. - /// It matches the `xToken` callback at https://www.sqlite.org/fts5.html#custom_tokenizers - func tokenize(context: UnsafeMutableRawPointer?, tokenization: FTS5Tokenization, pText: UnsafePointer?, nText: Int32, tokenCallback: @escaping FTS5TokenCallback) -> Int32 -} - -private class TokenizeContext { - var tokens: [(String, FTS5TokenFlags)] = [] -} - -extension FTS5Tokenizer { - - /// Tokenizes the string argument into an array of - /// (String, FTS5TokenFlags) pairs. - /// - /// let tokenizer = try db.makeTokenizer(.ascii()) - /// try tokenizer.tokenize("foo bar", for: .document) // [("foo", flags), ("bar", flags)] - /// - /// - parameter string: The string to tokenize - /// - parameter tokenization: The reason why tokenization is requested: - /// - .document: Tokenize like a document being inserted into an FTS table. - /// - .query: Tokenize like the search pattern of the MATCH operator. - /// - parameter tokenizer: A FTS5TokenizerDescriptor such as .ascii() - func tokenize(_ string: String, for tokenization: FTS5Tokenization) throws -> [(String, FTS5TokenFlags)] { - return try ContiguousArray(string.utf8).withUnsafeBufferPointer { buffer -> [(String, FTS5TokenFlags)] in - guard let addr = buffer.baseAddress else { - return [] - } - let pText = UnsafeMutableRawPointer(mutating: addr).assumingMemoryBound(to: Int8.self) - let nText = Int32(buffer.count) - - var context = TokenizeContext() - try withUnsafeMutablePointer(to: &context) { contextPointer in - let code = tokenize(context: UnsafeMutableRawPointer(contextPointer), tokenization: tokenization, pText: pText, nText: nText, tokenCallback: { (contextPointer, flags, pToken, nToken, iStart, iEnd) -> Int32 in - guard let contextPointer = contextPointer else { return SQLITE_ERROR } - - // Extract token - guard let token = pToken.flatMap({ String(data: Data(bytesNoCopy: UnsafeMutableRawPointer(mutating: $0), count: Int(nToken), deallocator: .none), encoding: .utf8) }) else { - return SQLITE_OK - } - - let context = contextPointer.assumingMemoryBound(to: TokenizeContext.self).pointee - context.tokens.append((token, FTS5TokenFlags(rawValue: flags))) - - return SQLITE_OK - }) - if (code != SQLITE_OK) { - throw DatabaseError(resultCode: code) - } - } - return context.tokens - } - } - - func nonSynonymTokens(in string: String, for tokenization: FTS5Tokenization) throws -> [String] { - var tokens: [String] = [] - for (token, flags) in try tokenize(string, for: tokenization) { - if !flags.contains(.colocated) { - tokens.append(token) - } - } - return tokens - } -} - -extension Database { - - // MARK: - FTS5 - - /// Private type that makes a pre-registered FTS5 tokenizer available - /// through the FTS5Tokenizer protocol. - private final class FTS5RegisteredTokenizer : FTS5Tokenizer { - let xTokenizer: fts5_tokenizer - let tokenizerPointer: OpaquePointer - - init(xTokenizer: fts5_tokenizer, contextPointer: UnsafeMutableRawPointer?, arguments: [String]) throws { - guard let xCreate = xTokenizer.xCreate else { - throw DatabaseError(resultCode: .SQLITE_ERROR, message: "nil fts5_tokenizer.xCreate") - } - - self.xTokenizer = xTokenizer - - var tokenizerPointer: OpaquePointer? = nil - let code: Int32 - if let argument = arguments.first { - // Turn [String] into ContiguousArray> - // (for an alternative implementation see https://oleb.net/blog/2016/10/swift-array-of-c-strings/) - func convertArguments(_ array: inout ContiguousArray>, _ car: String, _ cdr: [String], _ body: (ContiguousArray>) -> Result) -> Result { - return car.withCString { cString in - if let car = cdr.first { - array.append(cString) - return convertArguments(&array, car, Array(cdr.suffix(from: 1)), body) - } else { - return body(array) - } - } - } - var cStrings = ContiguousArray>() - code = convertArguments(&cStrings, argument, Array(arguments.suffix(from: 1))) { cStrings in - cStrings.withUnsafeBufferPointer { azArg in - xCreate(contextPointer, UnsafeMutablePointer(OpaquePointer(azArg.baseAddress!)), Int32(cStrings.count), &tokenizerPointer) - } - } - } else { - code = xCreate(contextPointer, nil, 0, &tokenizerPointer) - } - - guard code == SQLITE_OK else { - throw DatabaseError(resultCode: code, message: "failed fts5_tokenizer.xCreate") - } - - if let tokenizerPointer = tokenizerPointer { - self.tokenizerPointer = tokenizerPointer - } else { - throw DatabaseError(resultCode: code, message: "nil tokenizer") - } - } - - deinit { - if let delete = xTokenizer.xDelete { - delete(tokenizerPointer) - } - } - - func tokenize(context: UnsafeMutableRawPointer?, tokenization: FTS5Tokenization, pText: UnsafePointer?, nText: Int32, tokenCallback: @escaping FTS5TokenCallback) -> Int32 { - guard let xTokenize = xTokenizer.xTokenize else { - return SQLITE_ERROR - } - return xTokenize(tokenizerPointer, context, tokenization.rawValue, pText, nText, tokenCallback) - } - } - - /// Creates an FTS5 tokenizer, given its descriptor. - /// - /// let unicode61 = try db.makeTokenizer(.unicode61()) - /// - /// It is a programmer error to use the tokenizer outside of a protected - /// database queue, or after the database has been closed. - /// - /// Use this method when you implement a custom wrapper tokenizer: - /// - /// final class MyTokenizer : FTS5WrapperTokenizer { - /// var wrappedTokenizer: FTS5Tokenizer - /// - /// init(db: Database, arguments: [String]) throws { - /// wrappedTokenizer = try db.makeTokenizer(.unicode61()) - /// } - /// } - public func makeTokenizer(_ descriptor: FTS5TokenizerDescriptor) throws -> FTS5Tokenizer { - let api = FTS5.api(self) - - let xTokenizerPointer: UnsafeMutablePointer = .allocate(capacity: 1) - defer { xTokenizerPointer.deallocate() } - - let contextHandle: UnsafeMutablePointer = .allocate(capacity: 1) - defer { contextHandle.deallocate() } - - let code = api.pointee.xFindTokenizer!( - UnsafeMutablePointer(mutating: api), - descriptor.name, - contextHandle, - xTokenizerPointer) - - guard code == SQLITE_OK else { - throw DatabaseError(resultCode: code) - } - - let contextPointer = contextHandle.pointee - return try FTS5RegisteredTokenizer(xTokenizer: xTokenizerPointer.pointee, contextPointer: contextPointer, arguments: descriptor.arguments) - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5TokenizerDescriptor.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS5TokenizerDescriptor.swift deleted file mode 100755 index 618392e..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5TokenizerDescriptor.swift +++ /dev/null @@ -1,138 +0,0 @@ -#if SQLITE_ENABLE_FTS5 -/// An FTS5 tokenizer, suitable for FTS5 table definitions: -/// -/// db.create(virtualTable: "book", using: FTS5()) { t in -/// t.tokenizer = .unicode61() // FTS5TokenizerDescriptor -/// } -/// -/// See https://www.sqlite.org/fts5.html#tokenizers -public struct FTS5TokenizerDescriptor { - /// The tokenizer components - /// - /// // ["unicode61"] - /// FTS5TokenizerDescriptor.unicode61().components - /// - /// // ["unicode61", "remove_diacritics", "0"] - /// FTS5TokenizerDescriptor.unicode61(removeDiacritics: false)).components - public let components: [String] - - /// The tokenizer name - /// - /// // "unicode61" - /// FTS5TokenizerDescriptor.unicode61().name - /// - /// // "unicode61" - /// FTS5TokenizerDescriptor.unicode61(removeDiacritics: false)).name - var name: String { - return components[0] - } - - var arguments: [String] { - return Array(components.suffix(from: 1)) - } - - /// Creates an FTS5 tokenizer descriptor. - /// - /// db.create(virtualTable: "book", using: FTS5()) { t in - /// let tokenizer = FTS5TokenizerDescriptor(components: ["porter", "unicode61", "remove_diacritics", "0"]) - /// t.tokenizer = tokenizer - /// } - /// - /// - precondition: Components is not empty - public init(components: [String]) { - GRDBPrecondition(!components.isEmpty, "FTS5TokenizerDescriptor requires at least one component") - assert(!components.isEmpty) - self.components = components - } - - /// The "ascii" tokenizer - /// - /// db.create(virtualTable: "book", using: FTS5()) { t in - /// t.tokenizer = .ascii() - /// } - /// - /// - parameters: - /// - separators: Unless empty (the default), SQLite will consider - /// these characters as token separators. - /// - /// See https://www.sqlite.org/fts5.html#ascii_tokenizer - public static func ascii(separators: Set = []) -> FTS5TokenizerDescriptor { - if separators.isEmpty { - return FTS5TokenizerDescriptor(components: ["ascii"]) - } else { - return FTS5TokenizerDescriptor(components: ["ascii", "separators", separators.map { String($0) }.joined(separator: "").sqlExpression.quotedSQL()]) - } - } - - /// The "porter" tokenizer - /// - /// db.create(virtualTable: "book", using: FTS5()) { t in - /// t.tokenizer = .porter() - /// } - /// - /// - parameters: - /// - base: An eventual wrapping tokenizer which replaces the - // default unicode61() base tokenizer. - /// - /// See https://www.sqlite.org/fts5.html#porter_tokenizer - public static func porter(wrapping base: FTS5TokenizerDescriptor? = nil) -> FTS5TokenizerDescriptor { - if let base = base { - return FTS5TokenizerDescriptor(components: ["porter"] + base.components) - } else { - return FTS5TokenizerDescriptor(components: ["porter"]) - } - } - - /// An "unicode61" tokenizer - /// - /// db.create(virtualTable: "book", using: FTS5()) { t in - /// t.tokenizer = .unicode61() - /// } - /// - /// - parameters: - /// - diacritics: By default SQLite will strip diacritics from - /// latin characters. - /// - separators: Unless empty (the default), SQLite will consider - /// these characters as token separators. - /// - tokenCharacters: Unless empty (the default), SQLite will - /// consider these characters as token characters. - /// - /// See https://www.sqlite.org/fts5.html#unicode61_tokenizer - public static func unicode61(diacritics: FTS5.Diacritics = .removeLegacy, separators: Set = [], tokenCharacters: Set = []) -> FTS5TokenizerDescriptor { - var components: [String] = ["unicode61"] - switch diacritics { - case .removeLegacy: - break - case .keep: - components.append(contentsOf: ["remove_diacritics", "0"]) - #if GRDBCUSTOMSQLITE - case .remove: - components.append(contentsOf: ["remove_diacritics", "2"]) - #endif - } - if !separators.isEmpty { - // TODO: test "=" and "\"", "(" and ")" as separators, with both FTS3Pattern(matchingAnyTokenIn:tokenizer:) and Database.create(virtualTable:using:) - components.append(contentsOf: [ - "separators", - separators - .sorted() - .map { String($0) } - .joined(separator: "") - .sqlExpression - .quotedSQL()]) - } - if !tokenCharacters.isEmpty { - // TODO: test "=" and "\"", "(" and ")" as tokenCharacters, with both FTS3Pattern(matchingAnyTokenIn:tokenizer:) and Database.create(virtualTable:using:) - components.append(contentsOf: [ - "tokenchars", - tokenCharacters - .sorted() - .map { String($0) } - .joined(separator: "") - .sqlExpression - .quotedSQL()]) - } - return FTS5TokenizerDescriptor(components: components) - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5WrapperTokenizer.swift b/Example/Pods/GRDB.swift/GRDB/FTS/FTS5WrapperTokenizer.swift deleted file mode 100755 index a217176..0000000 --- a/Example/Pods/GRDB.swift/GRDB/FTS/FTS5WrapperTokenizer.swift +++ /dev/null @@ -1,149 +0,0 @@ -#if SQLITE_ENABLE_FTS5 -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// Flags that tell SQLite how to register a token. -/// -/// See https://www.sqlite.org/fts5.html#custom_tokenizers -public struct FTS5TokenFlags : OptionSet { - public let rawValue: Int32 - - public init(rawValue: Int32) { - self.rawValue = rawValue - } - - /// FTS5_TOKEN_COLOCATED - public static let colocated = FTS5TokenFlags(rawValue: FTS5_TOKEN_COLOCATED) -} - -/// A function that lets FTS5WrapperTokenizer notify tokens. -/// -/// See FTS5WrapperTokenizer.accept(token:flags:tokenCallback:) -public typealias FTS5WrapperTokenCallback = (_ token: String, _ flags: FTS5TokenFlags) throws -> () - -/// The protocol for custom FTS5 tokenizers that wrap another tokenizer. -/// -/// Types that adopt FTS5WrapperTokenizer don't have to implement the -/// low-level FTS5Tokenizer.tokenize(context:flags:pText:nText:tokenCallback:). -/// -/// Instead, they process regular Swift strings. -/// -/// Here is the implementation for a trivial tokenizer that wraps the -/// built-in ascii tokenizer without any custom processing: -/// -/// class TrivialAsciiTokenizer : FTS5WrapperTokenizer { -/// static let name = "trivial" -/// let wrappedTokenizer: FTS5Tokenizer -/// -/// init(db: Database, arguments: [String]) throws { -/// wrappedTokenizer = try db.makeTokenizer(.ascii()) -/// } -/// -/// func accept(token: String, flags: FTS5TokenFlags, for tokenization: FTS5Tokenization, tokenCallback: FTS5WrapperTokenCallback) throws { -/// try tokenCallback(token, flags) -/// } -/// } -public protocol FTS5WrapperTokenizer : FTS5CustomTokenizer { - /// The wrapped tokenizer - var wrappedTokenizer: FTS5Tokenizer { get } - - /// Given a token produced by the wrapped tokenizer, notifies customized - /// tokens to the `tokenCallback` function. - /// - /// For example: - /// - /// func accept(token: String, flags: FTS5TokenFlags, for tokenization: FTS5Tokenization, tokenCallback: FTS5WrapperTokenCallback) throws { - /// // pass through: - /// try tokenCallback(token, flags) - /// } - /// - /// When implementing the accept method, there are a two rules - /// to observe: - /// - /// 1. Errors thrown by the tokenCallback function must not be caught. - /// - /// 2. The input `flags` should be given unmodified to the tokenCallback - /// function, unless you union it with the .colocated flag when the - /// tokenizer produces synonyms (see - /// https://www.sqlite.org/fts5.html#synonym_support). - /// - /// - parameters: - /// - token: A token produced by the wrapped tokenizer - /// - flags: Flags that tell SQLite how to register a token. - /// - tokenization: The reason why FTS5 is requesting tokenization. - /// - tokenCallback: The function to call for each customized token. - func accept(token: String, flags: FTS5TokenFlags, for tokenization: FTS5Tokenization, tokenCallback: FTS5WrapperTokenCallback) throws -} - -private struct FTS5WrapperContext { - let tokenizer: FTS5WrapperTokenizer - let context: UnsafeMutableRawPointer? - let tokenization: FTS5Tokenization - let tokenCallback: FTS5TokenCallback -} - -extension FTS5WrapperTokenizer { - /// Default implementation - public func tokenize(context: UnsafeMutableRawPointer?, tokenization: FTS5Tokenization, pText: UnsafePointer?, nText: Int32, tokenCallback: @escaping FTS5TokenCallback) -> Int32 { - // `tokenCallback` is @convention(c). This requires a little setup - // in order to transfer context. - var customContext = FTS5WrapperContext( - tokenizer: self, - context: context, - tokenization: tokenization, - tokenCallback: tokenCallback) - return withUnsafeMutablePointer(to: &customContext) { customContextPointer in - // Invoke wrappedTokenizer - return wrappedTokenizer.tokenize(context: customContextPointer, tokenization: tokenization, pText: pText, nText: nText) { (customContextPointer, tokenFlags, pToken, nToken, iStart, iEnd) in - - // Extract token produced by wrapped tokenizer - guard let token = pToken.flatMap({ String(data: Data(bytesNoCopy: UnsafeMutableRawPointer(mutating: $0), count: Int(nToken), deallocator: .none), encoding: .utf8) }) else { - return 0 // SQLITE_OK - } - - // Extract context - let customContext = customContextPointer!.assumingMemoryBound(to: FTS5WrapperContext.self).pointee - let tokenizer = customContext.tokenizer - let context = customContext.context - let tokenization = customContext.tokenization - let tokenCallback = customContext.tokenCallback - - // Process token produced by wrapped tokenizer - do { - try tokenizer.accept( - token: token, - flags: FTS5TokenFlags(rawValue: tokenFlags), - for: tokenization, - tokenCallback: { (token, flags) in - // Turn token into bytes - return try ContiguousArray(token.utf8).withUnsafeBufferPointer { buffer in - guard let addr = buffer.baseAddress else { - return - } - let pToken = UnsafeMutableRawPointer(mutating: addr).assumingMemoryBound(to: Int8.self) - let nToken = Int32(buffer.count) - - // Inject token bytes into SQLite - let code = tokenCallback(context, flags.rawValue, pToken, nToken, iStart, iEnd) - guard code == SQLITE_OK else { - throw DatabaseError(resultCode: code, message: "token callback failed") - } - } - }) - - return SQLITE_OK - } catch let error as DatabaseError { - return error.extendedResultCode.rawValue - } catch { - return SQLITE_ERROR - } - } - } - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/Fixit/GRDB-4.0.swift b/Example/Pods/GRDB.swift/GRDB/Fixit/GRDB-4.0.swift deleted file mode 100755 index 048ed5d..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Fixit/GRDB-4.0.swift +++ /dev/null @@ -1,157 +0,0 @@ -import Dispatch - -// Fixits for changes introduced by GRDB 4.0.0 - -extension Cursor { - @available(*, unavailable, renamed: "compactMap") - public func flatMap(_ transform: @escaping (Element) throws -> ElementOfResult?) -> MapCursor>, ElementOfResult> { preconditionFailure() } -} - -extension DatabaseWriter { - @available(*, unavailable, message: "Use concurrentRead instead") - public func readFromCurrentState(_ block: @escaping (Database) -> Void) throws { preconditionFailure() } -} - -extension ValueObservation { - @available(*, unavailable, message: "Provide the reducer in a (Database) -> Reducer closure") - public static func tracking(_ regions: DatabaseRegionConvertible..., reducer: Reducer) -> ValueObservation { preconditionFailure() } - - @available(*, unavailable, message: "Use distinctUntilChanged() instead") - public static func tracking(_ regions: DatabaseRegionConvertible..., fetchDistinct fetch: @escaping (Database) throws -> Value) -> ValueObservation>> where Value: Equatable { preconditionFailure() } -} - -@available(*, unavailable, renamed: "FastDatabaseValueCursor") -public typealias ColumnCursor = FastDatabaseValueCursor - -@available(*, unavailable, renamed: "FastNullableDatabaseValueCursor") -public typealias NullableColumnCursor = FastNullableDatabaseValueCursor - -extension Database { - @available(*, unavailable, renamed: "execute(sql:arguments:)") - public func execute(_ sql: String, arguments: StatementArguments? = nil) throws { preconditionFailure() } - - @available(*, unavailable, renamed: "makeSelectStatement(sql:)") - public func makeSelectStatement(_ sql: String) throws -> SelectStatement { preconditionFailure() } - - @available(*, unavailable, renamed: "cachedSelectStatement(sql:)") - public func cachedSelectStatement(_ sql: String) throws -> SelectStatement { preconditionFailure() } - - @available(*, unavailable, renamed: "makeUpdateStatement(sql:)") - public func makeUpdateStatement(_ sql: String) throws -> UpdateStatement { preconditionFailure() } - - @available(*, unavailable, renamed: "cachedUpdateStatement(sql:)") - public func cachedUpdateStatement(_ sql: String) throws -> UpdateStatement { preconditionFailure() } -} - -extension DatabaseValueConvertible { - @available(*, unavailable, renamed: "fetchCursor(_:sql:arguments:adapter:)") - public static func fetchCursor(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> DatabaseValueCursor { preconditionFailure() } - - @available(*, unavailable, renamed: "fetchAll(_:sql:arguments:adapter:)") - public static func fetchAll(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Self] { preconditionFailure() } - - @available(*, unavailable, renamed: "fetchOne(_:sql:arguments:adapter:)") - public static func fetchOne(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> Self? { preconditionFailure() } -} - -extension Optional where Wrapped: DatabaseValueConvertible { - @available(*, unavailable, renamed: "fetchCursor(_:sql:arguments:adapter:)") - public static func fetchCursor(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> NullableDatabaseValueCursor { preconditionFailure() } - - @available(*, unavailable, renamed: "fetchAll(_:sql:arguments:adapter:)") - public static func fetchAll(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Wrapped?] { preconditionFailure() } -} - -extension Row { - @available(*, unavailable, renamed: "fetchCursor(_:sql:arguments:adapter:)") - public static func fetchCursor(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> RowCursor { preconditionFailure() } - - @available(*, unavailable, renamed: "fetchAll(_:sql:arguments:adapter:)") - public static func fetchAll(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Row] { preconditionFailure() } - - @available(*, unavailable, renamed: "fetchOne(_:sql:arguments:adapter:)") - public static func fetchOne(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> Row? { preconditionFailure() } -} - -extension DatabaseValueConvertible where Self: StatementColumnConvertible { - @available(*, unavailable, renamed: "fetchCursor(_:sql:arguments:adapter:)") - public static func fetchCursor(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> FastDatabaseValueCursor { preconditionFailure() } -} - -extension Optional where Wrapped: DatabaseValueConvertible & StatementColumnConvertible { - @available(*, unavailable, renamed: "fetchCursor(_:sql:arguments:adapter:)") - public static func fetchCursor(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> FastNullableDatabaseValueCursor { preconditionFailure() } -} - -extension FetchableRecord { - @available(*, unavailable, renamed: "fetchCursor(_:sql:arguments:adapter:)") - public static func fetchCursor(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> RecordCursor { preconditionFailure() } - - @available(*, unavailable, renamed: "fetchAll(_:sql:arguments:adapter:)") - public static func fetchAll(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Self] { preconditionFailure() } - - @available(*, unavailable, renamed: "fetchOne(_:sql:arguments:adapter:)") - public static func fetchOne(_ db: Database, _ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> Self? { preconditionFailure() } -} - -extension SQLRequest { - @available(*, unavailable, renamed: "init(sql:arguments:adapter:cached:)") - public init(_ sql: String, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil, cached: Bool = false) { preconditionFailure() } -} - -extension SQLExpressionLiteral { - @available(*, unavailable, renamed: "init(sql:arguments:)") - public init(_ sql: String, arguments: StatementArguments? = nil) { preconditionFailure() } -} - -extension SQLExpression { - @available(*, unavailable, message: "Use sqlLiteral property instead") - public var literal: SQLExpressionLiteral { preconditionFailure() } -} - -extension FTS3TokenizerDescriptor { - @available(*, unavailable, renamed: "unicode61(diacritics:separators:tokenCharacters:)") - public static func unicode61(removeDiacritics: Bool, separators: Set = [], tokenCharacters: Set = []) -> FTS3TokenizerDescriptor { preconditionFailure() } -} - -#if SQLITE_ENABLE_FTS5 -extension FTS5TokenizerDescriptor { - @available(*, unavailable, renamed: "unicode61(diacritics:separators:tokenCharacters:)") - public static func unicode61(removeDiacritics: Bool = true, separators: Set = [], tokenCharacters: Set = []) -> FTS5TokenizerDescriptor { preconditionFailure() } -} -#endif - -extension DatabaseValue { - @available(*, unavailable) - public func losslessConvert(sql: String? = nil, arguments: StatementArguments? = nil) -> T where T: DatabaseValueConvertible { preconditionFailure() } - - @available(*, unavailable) - public func losslessConvert(sql: String? = nil, arguments: StatementArguments? = nil) -> T? where T: DatabaseValueConvertible { preconditionFailure() } -} - -extension ValueScheduling { - @available(*, unavailable, renamed: "async(onQueue:startImmediately:)") - public static func onQueue(_ queue: DispatchQueue, startImmediately: Bool) -> ValueScheduling { preconditionFailure() } -} - -extension ValueObservation { - @available(*, unavailable, message: "Observation extent is controlled by the lifetime of observers returned by the start() method.") - public var extent: Database.TransactionObservationExtent { - get { preconditionFailure() } - set { preconditionFailure() } - } -} - -extension Configuration { - @available(*, unavailable, message: "Run the PRAGMA cipher_page_size in Configuration.prepareDatabase instead.") - public var cipherPageSize: Int { - get { preconditionFailure() } - set { preconditionFailure() } - } - - @available(*, unavailable, message: "Run the PRAGMA kdf_iter in Configuration.prepareDatabase instead.") - public var kdfIterations: Int { - get { preconditionFailure() } - set { preconditionFailure() } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Migration/DatabaseMigrator.swift b/Example/Pods/GRDB.swift/GRDB/Migration/DatabaseMigrator.swift deleted file mode 100755 index b8d18d1..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Migration/DatabaseMigrator.swift +++ /dev/null @@ -1,270 +0,0 @@ -/// A DatabaseMigrator registers and applies database migrations. -/// -/// Migrations are named blocks of SQL statements that are guaranteed to be -/// applied in order, once and only once. -/// -/// When a user upgrades your application, only non-applied migration are run. -/// -/// Usage: -/// -/// var migrator = DatabaseMigrator() -/// -/// // 1st migration -/// migrator.registerMigration("createLibrary") { db in -/// try db.create(table: "author") { t in -/// t.autoIncrementedPrimaryKey("id") -/// t.column("creationDate", .datetime) -/// t.column("name", .text).notNull() -/// } -/// -/// try db.create(table: "book") { t in -/// t.autoIncrementedPrimaryKey("id") -/// t.column("authorId", .integer) -/// .notNull() -/// .references("author", onDelete: .cascade) -/// t.column("title", .text).notNull() -/// } -/// } -/// -/// // 2nd migration -/// migrator.registerMigration("AddBirthYearToAuthors") { db in -/// try db.alter(table: "author") { t -/// t.add(column: "birthYear", .integer) -/// } -/// } -/// -/// // Migrations for future versions will be inserted here: -/// // -/// // // 3rd migration -/// // migrator.registerMigration("...") { db in -/// // ... -/// // } -/// -/// try migrator.migrate(dbQueue) -public struct DatabaseMigrator { - /// When the `eraseDatabaseOnSchemaChange` flag is true, the migrator will - /// automatically wipe out the full database content, and recreate the whole - /// database from scratch, if it detects that a migration has changed its - /// definition. - /// - /// This flag can destroy your precious users' data! - /// - /// But it may be useful in two situations: - /// - /// 1. During application development, as you are still designing - /// migrations, and the schema changes often. - /// - /// In this case, it is recommended that you make sure this flag does - /// not ship in the distributed application, in order to avoid undesired - /// data loss: - /// - /// var migrator = DatabaseMigrator() - /// #if DEBUG - /// // Speed up development by nuking the database when migrations change - /// migrator.eraseDatabaseOnSchemaChange = true - /// #endif - /// - /// 2. When the database content can easily be recreated, such as a cache - /// for some downloaded data. - public var eraseDatabaseOnSchemaChange = false - private var migrations: [Migration] = [] - - /// A new migrator. - public init() { - } - - /// Registers a migration. - /// - /// migrator.registerMigration("createAuthors") { db in - /// try db.create(table: "author") { t in - /// t.autoIncrementedPrimaryKey("id") - /// t.column("creationDate", .datetime) - /// t.column("name", .text).notNull() - /// } - /// } - /// - /// - parameters: - /// - identifier: The migration identifier. - /// - block: The migration block that performs SQL statements. - /// - precondition: No migration with the same same as already been registered. - public mutating func registerMigration(_ identifier: String, migrate: @escaping (Database) throws -> Void) { - registerMigration(Migration(identifier: identifier, migrate: migrate)) - } - - #if GRDBCUSTOMSQLITE || GRDBCIPHER - /// Registers an advanced migration, as described at https://www.sqlite.org/lang_altertable.html#otheralter - /// - /// // Add a NOT NULL constraint on players.name: - /// migrator.registerMigrationWithDeferredForeignKeyCheck("AddNotNullCheckOnName") { db in - /// try db.create(table: "new_player") { t in - /// t.autoIncrementedPrimaryKey("id") - /// t.column("name", .text).notNull() - /// } - /// try db.execute(sql: "INSERT INTO new_player SELECT * FROM player") - /// try db.drop(table: "player") - /// try db.rename(table: "new_player", to: "player") - /// } - /// - /// While your migration code runs with disabled foreign key checks, those - /// are re-enabled and checked at the end of the migration, regardless of - /// eventual errors. - /// - /// - parameters: - /// - identifier: The migration identifier. - /// - block: The migration block that performs SQL statements. - /// - precondition: No migration with the same same as already been registered. - /// - /// :nodoc: - public mutating func registerMigrationWithDeferredForeignKeyCheck(_ identifier: String, migrate: @escaping (Database) throws -> Void) { - registerMigration(Migration(identifier: identifier, disabledForeignKeyChecks: true, migrate: migrate)) - } - #else - @available(OSX 10.10, *) - /// Registers an advanced migration, as described at https://www.sqlite.org/lang_altertable.html#otheralter - /// - /// // Add a NOT NULL constraint on players.name: - /// migrator.registerMigrationWithDeferredForeignKeyCheck("AddNotNullCheckOnName") { db in - /// try db.create(table: "new_player") { t in - /// t.autoIncrementedPrimaryKey("id") - /// t.column("name", .text).notNull() - /// } - /// try db.execute(sql: "INSERT INTO new_player SELECT * FROM player") - /// try db.drop(table: "player") - /// try db.rename(table: "new_player", to: "player") - /// } - /// - /// While your migration code runs with disabled foreign key checks, those - /// are re-enabled and checked at the end of the migration, regardless of - /// eventual errors. - /// - /// - parameters: - /// - identifier: The migration identifier. - /// - block: The migration block that performs SQL statements. - /// - precondition: No migration with the same same as already been registered. - public mutating func registerMigrationWithDeferredForeignKeyCheck(_ identifier: String, migrate: @escaping (Database) throws -> Void) { - registerMigration(Migration(identifier: identifier, disabledForeignKeyChecks: true, migrate: migrate)) - } - #endif - - /// Iterate migrations in the same order as they were registered. If a - /// migration has not yet been applied, its block is executed in - /// a transaction. - /// - /// - parameter db: A DatabaseWriter (DatabaseQueue or DatabasePool) where - /// migrations should apply. - /// - throws: An eventual error thrown by the registered migration blocks. - public func migrate(_ writer: DatabaseWriter) throws { - guard let lastMigration = migrations.last else { - return - } - try migrate(writer, upTo: lastMigration.identifier) - } - - /// Iterate migrations in the same order as they were registered, up to the - /// provided target. If a migration has not yet been applied, its block is - /// executed in a transaction. - /// - /// - parameter db: A DatabaseWriter (DatabaseQueue or DatabasePool) where - /// migrations should apply. - /// - targetIdentifier: The identifier of a registered migration. - /// - throws: An eventual error thrown by the registered migration blocks. - public func migrate(_ writer: DatabaseWriter, upTo targetIdentifier: String) throws { - if eraseDatabaseOnSchemaChange { - let witness = try DatabaseQueue(path: "") - - // Erase database if we detect a change in the *current* schema. - let (currentIdentifier, currentSchema) = try writer.writeWithoutTransaction { db -> (String?, SchemaInfo) in - try setupMigrations(db) - let identifiers = try appliedIdentifiers(db) - let currentIdentifier = migrations - .reversed() - .first { identifiers.contains($0.identifier) }? - .identifier - return try (currentIdentifier, db.schema()) - } - if let currentIdentifier = currentIdentifier { - let witnessSchema: SchemaInfo = try witness.writeWithoutTransaction { db in - try setupMigrations(db) - try runMigrations(db, upTo: currentIdentifier) - return try db.schema() - } - - if currentSchema != witnessSchema { - try writer.erase() - } - } - - // Migrate to *target* schema - let schema: SchemaInfo = try writer.writeWithoutTransaction { db in - try setupMigrations(db) - try runMigrations(db, upTo: targetIdentifier) - return try db.schema() - } - - // Erase database if we detect a change in the *target* schema. - let witnessSchema: SchemaInfo = try witness.writeWithoutTransaction { db in - try setupMigrations(db) - try runMigrations(db, upTo: targetIdentifier) - return try db.schema() - } - - if schema != witnessSchema { - try writer.erase() - try writer.writeWithoutTransaction { db in - try setupMigrations(db) - try runMigrations(db, upTo: targetIdentifier) - } - } - } else { - try writer.writeWithoutTransaction { db in - try setupMigrations(db) - try runMigrations(db, upTo: targetIdentifier) - } - } - } - - /// Returns the set of applied migration identifiers. - public func appliedMigrations(in reader: DatabaseReader) throws -> Set { - return try reader.read { try appliedIdentifiers($0) } - } - - - // MARK: - Non public - - private mutating func registerMigration(_ migration: Migration) { - GRDBPrecondition(!migrations.map({ $0.identifier }).contains(migration.identifier), "already registered migration: \(String(reflecting: migration.identifier))") - migrations.append(migration) - } - - private func setupMigrations(_ db: Database) throws { - try db.execute(sql: "CREATE TABLE IF NOT EXISTS grdb_migrations (identifier TEXT NOT NULL PRIMARY KEY)") - } - - private func appliedIdentifiers(_ db: Database) throws -> Set { - return try Set(String.fetchAll(db, sql: "SELECT identifier FROM grdb_migrations")) - } - - private func runMigrations(_ db: Database, upTo targetIdentifier: String) throws { - var prefixMigrations: [Migration] = [] - for migration in migrations { - prefixMigrations.append(migration) - if migration.identifier == targetIdentifier { - break - } - } - - // targetIdentifier must refer to a registered migration - GRDBPrecondition(prefixMigrations.last?.identifier == targetIdentifier, "undefined migration: \(String(reflecting: targetIdentifier))") - - // Subsequent migration must not be applied - let appliedIdentifiers = try self.appliedIdentifiers(db) - if prefixMigrations.count < migrations.count { - let nextIdentifier = migrations[prefixMigrations.count].identifier - GRDBPrecondition(!appliedIdentifiers.contains(nextIdentifier), "database is already migrated beyond migration \(String(reflecting: targetIdentifier))") - } - - for migration in prefixMigrations where !appliedIdentifiers.contains(migration.identifier) { - try migration.run(db) - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Migration/Migration.swift b/Example/Pods/GRDB.swift/GRDB/Migration/Migration.swift deleted file mode 100755 index 17d60de..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Migration/Migration.swift +++ /dev/null @@ -1,85 +0,0 @@ -/// An internal struct that defines a migration. -struct Migration { - let identifier: String - let disabledForeignKeyChecks: Bool - let migrate: (Database) throws -> Void - - #if GRDBCUSTOMSQLITE || GRDBCIPHER - init(identifier: String, disabledForeignKeyChecks: Bool = false, migrate: @escaping (Database) throws -> Void) { - self.identifier = identifier - self.disabledForeignKeyChecks = disabledForeignKeyChecks - self.migrate = migrate - } - #else - init(identifier: String, migrate: @escaping (Database) throws -> Void) { - self.identifier = identifier - self.disabledForeignKeyChecks = false - self.migrate = migrate - } - - @available(OSX 10.10, *) - // PRAGMA foreign_key_check was introduced in SQLite 3.7.16 http://www.sqlite.org/changes.html#version_3_7_16 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - init(identifier: String, disabledForeignKeyChecks: Bool, migrate: @escaping (Database) throws -> Void) { - self.identifier = identifier - self.disabledForeignKeyChecks = disabledForeignKeyChecks - self.migrate = migrate - } - #endif - - func run(_ db: Database) throws { - if try disabledForeignKeyChecks && (Bool.fetchOne(db, sql: "PRAGMA foreign_keys") ?? false) { - try runWithDisabledForeignKeys(db) - } else { - try runWithoutDisabledForeignKeys(db) - } - } - - - private func runWithoutDisabledForeignKeys(_ db: Database) throws { - try db.inTransaction(.immediate) { - try migrate(db) - try insertAppliedIdentifier(db) - return .commit - } - } - - private func runWithDisabledForeignKeys(_ db: Database) throws { - // Support for database alterations described at - // https://www.sqlite.org/lang_altertable.html#otheralter - // - // > 1. If foreign key constraints are enabled, disable them using - // > PRAGMA foreign_keys=OFF. - try db.execute(sql: "PRAGMA foreign_keys = OFF") - - // > 2. Start a transaction. - try db.inTransaction(.immediate) { - try migrate(db) - try insertAppliedIdentifier(db) - - // > 10. If foreign key constraints were originally enabled then run PRAGMA - // > foreign_key_check to verify that the schema change did not break any foreign key - // > constraints. - if try Row.fetchOne(db, sql: "PRAGMA foreign_key_check") != nil { - // https://www.sqlite.org/pragma.html#pragma_foreign_key_check - // - // PRAGMA foreign_key_check does not return an error, - // but the list of violated foreign key constraints. - // - // Let's turn any violation into an SQLITE_CONSTRAINT - // error, and rollback the transaction. - throw DatabaseError(resultCode: .SQLITE_CONSTRAINT, message: "FOREIGN KEY constraint failed") - } - - // > 11. Commit the transaction started in step 2. - return .commit - } - - // > 12. If foreign keys constraints were originally enabled, reenable them now. - try db.execute(sql: "PRAGMA foreign_keys = ON") - } - - private func insertAppliedIdentifier(_ db: Database) throws { - try db.execute(sql: "INSERT INTO grdb_migrations (identifier) VALUES (?)", arguments: [identifier]) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/FTS3+QueryInterface.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/FTS3+QueryInterface.swift deleted file mode 100755 index 7bdfaad..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/FTS3+QueryInterface.swift +++ /dev/null @@ -1,55 +0,0 @@ -extension QueryInterfaceRequest { - - // MARK: Full Text Search - - /// Creates a request with a full-text predicate added to the eventual - /// set of already applied predicates. - /// - /// // SELECT * FROM book WHERE book MATCH '...' - /// var request = Book.all() - /// request = request.matching(pattern) - /// - /// If the search pattern is nil, the request does not match any - /// database row. - public func matching(_ pattern: FTS3Pattern?) -> QueryInterfaceRequest { - guard let pattern = pattern else { - return none() - } - let alias = TableAlias() - let matchExpression = TableMatchExpression(alias: alias, pattern: pattern.databaseValue) - return self.aliased(alias).filter(matchExpression) - } -} - -extension TableRecord { - - // MARK: Full Text Search - - /// Returns a QueryInterfaceRequest with a matching predicate. - /// - /// // SELECT * FROM book WHERE book MATCH '...' - /// var request = Book.matching(pattern) - /// - /// If the search pattern is nil, the request does not match any - /// database row. - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func matching(_ pattern: FTS3Pattern?) -> QueryInterfaceRequest { - return all().matching(pattern) - } -} - -extension ColumnExpression { - /// A matching SQL expression with the `MATCH` SQL operator. - /// - /// // content MATCH '...' - /// Column("content").match(pattern) - /// - /// If the search pattern is nil, SQLite will evaluate the expression - /// to false. - public func match(_ pattern: FTS3Pattern?) -> SQLExpression { - return SQLExpressionBinary(.match, self, pattern ?? DatabaseValue.null) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/FTS5+QueryInterface.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/FTS5+QueryInterface.swift deleted file mode 100755 index ab3bb55..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/FTS5+QueryInterface.swift +++ /dev/null @@ -1,44 +0,0 @@ -#if SQLITE_ENABLE_FTS5 - extension QueryInterfaceRequest { - - // MARK: Full Text Search - - /// Creates a request with a full-text predicate added to the eventual - /// set of already applied predicates. - /// - /// // SELECT * FROM book WHERE book MATCH '...' - /// var request = Book.all() - /// request = request.matching(pattern) - /// - /// If the search pattern is nil, the request does not match any - /// database row. - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public func matching(_ pattern: FTS5Pattern?) -> QueryInterfaceRequest { - guard let pattern = pattern else { - return none() - } - let alias = TableAlias() - let matchExpression = TableMatchExpression(alias: alias, pattern: pattern.databaseValue) - return self.aliased(alias).filter(matchExpression) - } - } - - extension TableRecord { - - // MARK: Full Text Search - - /// Returns a QueryInterfaceRequest with a matching predicate. - /// - /// // SELECT * FROM book WHERE book MATCH '...' - /// var request = Book.matching(pattern) - /// - /// If the search pattern is nil, the request does not match any - /// database row. - public static func matching(_ pattern: FTS5Pattern?) -> QueryInterfaceRequest { - return all().matching(pattern) - } - } -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/FetchableRecord+QueryInterfaceRequest.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/FetchableRecord+QueryInterfaceRequest.swift deleted file mode 100755 index c600e87..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/FetchableRecord+QueryInterfaceRequest.swift +++ /dev/null @@ -1,120 +0,0 @@ -extension QueryInterfaceRequest where RowDecoder: FetchableRecord { - /// A cursor over fetched records. - /// - /// let request: QueryInterfaceRequest = ... - /// let players = try request.fetchCursor(db) // Cursor of Player - /// while let player = try players.next() { // Player - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameter db: A database connection. - /// - returns: A cursor over fetched records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchCursor(_ db: Database) throws -> RecordCursor { - return try RowDecoder.fetchCursor(db, self) - } - - /// An array of fetched records. - /// - /// let request: QueryInterfaceRequest = ... - /// let players = try request.fetchAll(db) // [Player] - /// - /// - parameter db: A database connection. - /// - returns: An array of records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchAll(_ db: Database) throws -> [RowDecoder] { - return try RowDecoder.fetchAll(db, self) - } - - /// The first fetched record. - /// - /// let request: QueryInterfaceRequest = ... - /// let player = try request.fetchOne(db) // Player? - /// - /// - parameter db: A database connection. - /// - returns: An optional record. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchOne(_ db: Database) throws -> RowDecoder? { - return try RowDecoder.fetchOne(db, self) - } -} - -extension FetchableRecord { - - // MARK: Fetching From QueryInterfaceRequest - - /// Returns a cursor over records fetched from a fetch request. - /// - /// let request = try Player.all() - /// let players = try Player.fetchCursor(db, request) // Cursor of Player - /// while let player = try players.next() { // Player - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - sql: a FetchRequest. - /// - returns: A cursor over fetched records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, _ request: QueryInterfaceRequest) throws -> RecordCursor { - precondition(request.prefetchedAssociations.isEmpty, "Not implemented: fetchCursor with prefetched associations") - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchCursor(statement, adapter: adapter) - } - - /// Returns an array of records fetched from a query interface request. - /// - /// let request = try Player.all() - /// let players = try Player.fetchAll(db, request) // [Player] - /// - /// - parameters: - /// - db: A database connection. - /// - sql: a FetchRequest. - /// - returns: An array of records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, _ request: QueryInterfaceRequest) throws -> [Self] { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - let associations = request.prefetchedAssociations - if associations.isEmpty { - return try fetchAll(statement, adapter: adapter) - } else { - let rows = try Row.fetchAll(statement, adapter: adapter) - try Row.prefetch(db, associations: associations, in: rows) - return rows.map(Self.init(row:)) - } - } - - /// Returns a single record fetched from a query interface request. - /// - /// let request = try Player.filter(key: 1) - /// let player = try Player.fetchOne(db, request) // Player? - /// - /// - parameters: - /// - db: A database connection. - /// - sql: a FetchRequest. - /// - returns: An optional record. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, _ request: QueryInterfaceRequest) throws -> Self? { - let (statement, adapter) = try request.prepare(db, forSingleResult: true) - let associations = request.prefetchedAssociations - if associations.isEmpty { - return try fetchOne(statement, adapter: adapter) - } else { - guard let row = try Row.fetchOne(statement, adapter: adapter) else { - return nil - } - try Row.prefetch(db, associations: associations, in: [row]) - return Self.init(row: row) - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/Association.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/Association.swift deleted file mode 100755 index 2ff915f..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/Association.swift +++ /dev/null @@ -1,514 +0,0 @@ -import Foundation - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The base protocol for all associations that define a connection between two -/// record types. -public protocol Association: DerivableRequest { - // OriginRowDecoder and RowDecoder provide type safety: - // - // Book.including(required: Book.author) // compiles - // Fruit.including(required: Book.author) // does not compile - - /// The record type at the origin of the association. - /// - /// In the `belongsTo` association below, it is Book: - /// - /// struct Book: TableRecord { - /// // BelongsToAssociation - /// static let author = belongsTo(Author.self) - /// } - associatedtype OriginRowDecoder - - /// The associated record type. - /// - /// In the `belongsTo` association below, it is Author: - /// - /// struct Book: TableRecord { - /// // BelongsToAssociation - /// static let author = belongsTo(Author.self) - /// } - associatedtype RowDecoder - - /// :nodoc: - var sqlAssociation: SQLAssociation { get } - - /// Creates an association with the given key. - /// - /// This new key impacts how rows fetched from the resulting association - /// should be consumed: - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // Consume rows: - /// let request = Player.including(required: Player.team.forKey("custom")) - /// for row in Row.fetchAll(db, request) { - /// let team: Team = row["custom"] - /// } - func forKey(_ key: String) -> Self - - /// :nodoc: - init(sqlAssociation: SQLAssociation) -} - -extension Association { - private func mapDestinationRelation(_ transform: (SQLRelation) -> SQLRelation) -> Self { - return Self.init(sqlAssociation: sqlAssociation.mapDestinationRelation(transform)) - } -} - -extension Association { - - /// The association key defines how rows fetched from this association - /// should be consumed. - /// - /// For example: - /// - /// struct Player: TableRecord { - /// // The default key of this association is the name of the - /// // database table for teams, let's say "team": - /// static let team = belongsTo(Team.self) - /// } - /// print(Player.team.key) // Prints "team" - /// - /// // Consume rows: - /// let request = Player.including(required: Player.team) - /// for row in Row.fetchAll(db, request) { - /// let team: Team = row["team"] // the association key - /// } - /// - /// The key can be redefined with the `forKey` method: - /// - /// let request = Player.including(required: Player.team.forKey("custom")) - /// for row in Row.fetchAll(db, request) { - /// let team: Team = row["custom"] - /// } - var key: SQLAssociationKey { - return sqlAssociation.destination.key - } - - /// Creates an association which selects *selection*. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.color - /// // FROM player - /// // JOIN team ON team.id = player.teamId - /// let association = Player.team.select([Column("color")]) - /// var request = Player.including(required: association) - /// - /// Any previous selection is replaced: - /// - /// // SELECT player.*, team.color - /// // FROM player - /// // JOIN team ON team.id = player.teamId - /// let association = Player.team - /// .select([Column("id")]) - /// .select([Column("color")]) - /// var request = Player.including(required: association) - public func select(_ selection: [SQLSelectable]) -> Self { - return mapDestinationRelation { $0.select(selection) } - } - - /// Creates an association which appends *selection*. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.color, team.name - /// // FROM player - /// // JOIN team ON team.id = player.teamId - /// let association = Player.team - /// .select([Column("color")]) - /// .annotated(with: [Column("name")]) - /// var request = Player.including(required: association) - public func annotated(with selection: [SQLSelectable]) -> Self { - return mapDestinationRelation { $0.annotated(with: selection) } - } - - /// Creates an association with the provided *predicate promise* added to - /// the eventual set of already applied predicates. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.* - /// // FROM player - /// // JOIN team ON team.id = player.teamId AND 1 - /// let association = Player.team.filter { db in true } - /// var request = Player.including(required: association) - public func filter(_ predicate: @escaping (Database) throws -> SQLExpressible) -> Self { - return mapDestinationRelation { $0.filter(predicate) } - } - - /// Creates an association with the provided *orderings promise*. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.* - /// // FROM player - /// // JOIN team ON team.id = player.teamId - /// // ORDER BY team.name - /// let association = Player.team.order { _ in [Column("name")] } - /// var request = Player.including(required: association) - /// - /// Any previous ordering is replaced: - /// - /// // SELECT player.*, team.* - /// // FROM player - /// // JOIN team ON team.id = player.teamId - /// // ORDER BY team.name - /// let association = Player.team - /// .order{ _ in [Column("color")] } - /// .reversed() - /// .order{ _ in [Column("name")] } - /// var request = Player.including(required: association) - public func order(_ orderings: @escaping (Database) throws -> [SQLOrderingTerm]) -> Self { - return mapDestinationRelation { $0.order(orderings) } - } - - /// Creates an association that reverses applied orderings. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.* - /// // FROM player - /// // JOIN team ON team.id = player.teamId - /// // ORDER BY team.name DESC - /// let association = Player.team.order(Column("name")).reversed() - /// var request = Player.including(required: association) - /// - /// If no ordering was applied, the returned association is identical. - /// - /// // SELECT player.*, team.* - /// // FROM player - /// // JOIN team ON team.id = player.teamId - /// let association = Player.team.reversed() - /// var request = Player.including(required: association) - public func reversed() -> Self { - return mapDestinationRelation { $0.reversed() } - } - - /// Creates an association without any ordering. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.* - /// // FROM player - /// // JOIN team ON team.id = player.teamId - /// let association = Player.team.order(Column("name")).unordered() - /// var request = Player.including(required: association) - public func unordered() -> Self { - return mapDestinationRelation { $0.unordered() } - } - - /// Creates an association with the given key. - /// - /// This new key helps Decodable records decode rows fetched from the - /// resulting association: - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// struct PlayerInfo: FetchableRecord, Decodable { - /// let player: Player - /// let team: Team - /// - /// static func all() -> QueryInterfaceRequest { - /// return Player - /// .including(required: Player.team.forKey(CodingKeys.team)) - /// .asRequest(of: PlayerInfo.self) - /// } - /// } - /// - /// let playerInfos = PlayerInfo.all().fetchAll(db) - /// print(playerInfos.first?.team) - public func forKey(_ codingKey: CodingKey) -> Self { - return forKey(codingKey.stringValue) - } - - /// Creates an association that allows you to define expressions that target - /// a specific database table. - /// - /// In the example below, the "team.color = 'red'" condition in the where - /// clause could be not achieved without table aliases. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.* - /// // JOIN team ON ... - /// // WHERE team.color = 'red' - /// let teamAlias = TableAlias() - /// let request = Player - /// .including(required: Player.team.aliased(teamAlias)) - /// .filter(teamAlias[Column("color")] == "red") - /// - /// When you give a name to a table alias, you can reliably inject sql - /// snippets in your requests: - /// - /// // SELECT player.*, custom.* - /// // JOIN team custom ON ... - /// // WHERE custom.color = 'red' - /// let teamAlias = TableAlias(name: "custom") - /// let request = Player - /// .including(required: Player.team.aliased(teamAlias)) - /// .filter(sql: "custom.color = ?", arguments: ["red"]) - public func aliased(_ alias: TableAlias) -> Self { - return mapDestinationRelation { $0.qualified(with: alias) } - } -} - -extension Association { - /// Creates an association that prefetches another one. - public func including(all association: A) -> Self where A.OriginRowDecoder == RowDecoder { - return mapDestinationRelation { - $0.including(all: association.sqlAssociation) - } - } - - /// Creates an association that includes another one. The columns of the - /// associated record are selected. The returned association does not - /// require that the associated database table contains a matching row. - public func including(optional association: A) -> Self where A.OriginRowDecoder == RowDecoder { - return mapDestinationRelation { - $0.including(optional: association.sqlAssociation) - } - } - - /// Creates an association that includes another one. The columns of the - /// associated record are selected. The returned association requires - /// that the associated database table contains a matching row. - public func including(required association: A) -> Self where A.OriginRowDecoder == RowDecoder { - return mapDestinationRelation { - $0.including(required: association.sqlAssociation) - } - } - - /// Creates an association that joins another one. The columns of the - /// associated record are not selected. The returned association does not - /// require that the associated database table contains a matching row. - public func joining(optional association: A) -> Self where A.OriginRowDecoder == RowDecoder { - return mapDestinationRelation { - $0.joining(optional: association.sqlAssociation) - } - } - - /// Creates an association that joins another one. The columns of the - /// associated record are not selected. The returned association requires - /// that the associated database table contains a matching row. - public func joining(required association: A) -> Self where A.OriginRowDecoder == RowDecoder { - return mapDestinationRelation { - $0.joining(required: association.sqlAssociation) - } - } -} - -// Allow association.filter(key: ...) -extension Association where Self: TableRequest, RowDecoder: TableRecord { - /// :nodoc: - public var databaseTableName: String { return RowDecoder.databaseTableName } -} - -// MARK: - AssociationToOne - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The base protocol for all associations that define a one-to-one connection. -public protocol AssociationToOne: Association { } - -extension AssociationToOne { - public func forKey(_ key: String) -> Self { - let associationKey = SQLAssociationKey.fixedSingular(key) - return Self.init(sqlAssociation: sqlAssociation.forDestinationKey(associationKey)) - } -} - -// MARK: - AssociationToMany - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The base protocol for all associations that define a one-to-many connection. -public protocol AssociationToMany: Association { } - -extension AssociationToMany { - public func forKey(_ key: String) -> Self { - let associationKey = SQLAssociationKey.fixedPlural(key) - return Self.init(sqlAssociation: sqlAssociation.forDestinationKey(associationKey)) - } -} - -extension AssociationToMany where OriginRowDecoder: TableRecord { - private func makeAggregate(_ expression: SQLExpression) -> AssociationAggregate { - return AssociationAggregate { request in - let tableAlias = TableAlias() - let request = request - .joining(optional: self.aliased(tableAlias)) - .groupByPrimaryKey() - let expression = tableAlias[expression] - return (request: request, expression: expression) - } - } - - /// The number of associated records. - /// - /// It has a default name, which is "[key]Count", where key is the key of - /// the association. For example: - /// - /// For example: - /// - /// struct TeamInfo: FetchableRecord, Decodable { - /// var team: Team - /// var playerCount: Int - /// } - /// let request = Team.annotated(with: Team.players.count()) - /// let infos: [TeamInfo] = try TeamInfo.fetchAll(db, request) - /// - /// let teams: [Team] = try Team.having(Team.players.count() > 10).fetchAll(db) - public var count: AssociationAggregate { - return makeAggregate(SQLExpressionCountDistinct(Column.rowID)) - .aliased("\(key.singularizedName)Count") - } - - /// Creates an aggregate that is true if there exists no associated records. - /// - /// It has a default name, which is "hasNo[Key]", where key is the key of - /// the association. For example: - /// - /// struct TeamInfo: FetchableRecord, Decodable { - /// var team: Team - /// var hasNoPlayer: Bool - /// } - /// let request = Team.annotated(with: Team.players.isEmpty()) - /// let infos: [TeamInfo] = try TeamInfo.fetchAll(db, request) - /// - /// let teams: [Team] = try Team.having(Team.players.isEmpty()).fetchAll(db) - /// let teams: [Team] = try Team.having(!Team.players.isEmpty()) - /// let teams: [Team] = try Team.having(Team.players.isEmpty() == false) - public var isEmpty: AssociationAggregate { - return makeAggregate(SQLExpressionIsEmpty(SQLExpressionCountDistinct(Column.rowID))) - .aliased("hasNo\(key.singularizedName.uppercasingFirstCharacter)") - } - - /// Creates an aggregate which evaluate to the average value of the given - /// expression in associated records. - /// - /// When the averaged expression is a column, the aggregate has a default - /// name which is "average[Key][Column]", where key is the key of the - /// association. For example: - /// - /// For example: - /// - /// struct TeamInfo: FetchableRecord, Decodable { - /// var team: Team - /// var averagePlayerScore: Double - /// } - /// let request = Team.annotated(with: Team.players.average(Column("score"))) - /// let infos: [TeamInfo] = try TeamInfo.fetchAll(db, request) - /// - /// let teams: [Team] = try Team.having(Team.players.average(Column("score")) > 100).fetchAll(db) - public func average(_ expression: SQLExpressible) -> AssociationAggregate { - let aggregate = makeAggregate(SQLExpressionFunction(.avg, arguments: expression)) - if let column = expression as? ColumnExpression { - let name = key.singularizedName - return aggregate.aliased("average\(name.uppercasingFirstCharacter)\(column.name.uppercasingFirstCharacter)") - } else { - return aggregate - } - } - - /// Creates an aggregate which evaluate to the maximum value of the given - /// expression in associated records. - /// - /// When the maximized expression is a column, the aggregate has a default - /// name which is "maximum[Key][Column]", where key is the key of the - /// association. For example: - /// - /// For example: - /// - /// struct TeamInfo: FetchableRecord, Decodable { - /// var team: Team - /// var maxPlayerScore: Double - /// } - /// let request = Team.annotated(with: Team.players.max(Column("score"))) - /// let infos: [TeamInfo] = try TeamInfo.fetchAll(db, request) - /// - /// let teams: [Team] = try Team.having(Team.players.max(Column("score")) < 100).fetchAll(db) - public func max(_ expression: SQLExpressible) -> AssociationAggregate { - let aggregate = makeAggregate(SQLExpressionFunction(.max, arguments: expression)) - if let column = expression as? ColumnExpression { - let name = key.singularizedName - return aggregate.aliased("max\(name.uppercasingFirstCharacter)\(column.name.uppercasingFirstCharacter)") - } else { - return aggregate - } - } - - /// Creates an aggregate which evaluate to the minimum value of the given - /// expression in associated records. - /// - /// When the minimized expression is a column, the aggregate has a default - /// name which is "minimum[Key][Column]", where key is the key of the - /// association. For example: - /// - /// For example: - /// - /// struct TeamInfo: FetchableRecord, Decodable { - /// var team: Team - /// var minPlayerScore: Double - /// } - /// let request = Team.annotated(with: Team.players.min(Column("score"))) - /// let infos: [TeamInfo] = try TeamInfo.fetchAll(db, request) - /// - /// let teams: [Team] = try Team.having(Team.players.min(Column("score")) > 100).fetchAll(db) - public func min(_ expression: SQLExpressible) -> AssociationAggregate { - let aggregate = makeAggregate(SQLExpressionFunction(.min, arguments: expression)) - if let column = expression as? ColumnExpression { - let name = key.singularizedName - return aggregate.aliased("min\(name.uppercasingFirstCharacter)\(column.name.uppercasingFirstCharacter)") - } else { - return aggregate - } - } - - /// Creates an aggregate which evaluate to the sum of the given expression - /// in associated records. - /// - /// When the summed expression is a column, the aggregate has a default - /// name which is "[key][Column]Sum", where key is the key of the - /// association. For example: - /// - /// For example: - /// - /// struct TeamInfo: FetchableRecord, Decodable { - /// var team: Team - /// var playerScoreSum: Double - /// } - /// let request = Team.annotated(with: Team.players.sum(Column("score"))) - /// let infos: [TeamInfo] = try TeamInfo.fetchAll(db, request) - /// - /// let teams: [Team] = try Team.having(Team.players.sum(Column("score")) > 100).fetchAll(db) - public func sum(_ expression: SQLExpressible) -> AssociationAggregate { - let aggregate = makeAggregate(SQLExpressionFunction(.sum, arguments: expression)) - if let column = expression as? ColumnExpression { - let name = key.singularizedName - return aggregate.aliased("\(name)\(column.name.uppercasingFirstCharacter)Sum") - } else { - return aggregate - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/AssociationAggregate.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/AssociationAggregate.swift deleted file mode 100755 index cf67dd5..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/AssociationAggregate.swift +++ /dev/null @@ -1,709 +0,0 @@ -import Foundation - -/// An AssociationAggregate is able to compute aggregated values from a -/// population of associated records. -/// -/// For example: -/// -/// struct Author: TableRecord { -/// static let books = hasMany(Book.self) -/// } -/// -/// let bookCount = Author.books.count // AssociationAggregate -/// -/// Association aggregates can be used in the `annotated(with:)` and -/// `having(_:)` request methods: -/// -/// let request = Author.annotated(with: bookCount) -/// let request = Author.having(bookCount >= 10) -/// -/// The RowDecoder generic type helps the compiler prevent incorrect use -/// of aggregates: -/// -/// // Won't compile because Fruit is not Author. -/// let request = Fruit.annotated(with: bookCount) -public struct AssociationAggregate { - /// Given a request, returns a tuple made of a request extended with the - /// associated records used to compute the aggregate, and an expression - /// whose value is the aggregated value. - /// - /// For example: - /// - /// struct Author: TableRecord { - /// static let books = hasMany(Book.self) - /// } - /// - /// // SELECT * FROM author - /// let request = Author.all() - /// - /// let aggregate = Author.books.count - /// let tuple = aggregate.prepare(request) - /// - /// // The request extended with associated records: - /// // - /// // SELECT author.* FROM author - /// // LEFT JOIN book ON book.authorId = author.id - /// // GROUP BY author.id - /// tuple.request - /// - /// // The aggregated value: - /// // - /// // COUNT(DISTINCT book.rowid) - /// tuple.expression - /// - /// The aggregated value is not right away embedded in the extended request: - /// - /// - We don't know yet if the aggregated value will be used in the - /// SQL selection, or in the HAVING clause. - /// - It helps implementing aggregate operators such as `&&`, `+`, etc. - let prepare: (QueryInterfaceRequest) -> (request: QueryInterfaceRequest, expression: SQLExpression) - - /// The SQL alias for the value of this aggregate. See aliased(_:). - var alias: String? - - init(_ prepare: @escaping (QueryInterfaceRequest) -> (request: QueryInterfaceRequest, expression: SQLExpression)) { - self.prepare = prepare - } -} - -extension AssociationAggregate { - /// Returns an aggregate that is selected in a column with the given name. - /// - /// For example: - /// - /// let aggregate = Author.books.count.aliased("foo") - /// let request = Author.annotated(with: aggregate) - /// if let row = try Row.fetchOne(db, request) { - /// let bookCount: Int = row["foo"] - /// } - public func aliased(_ name: String) -> AssociationAggregate { - var aggregate = self - aggregate.alias = name - return aggregate - } - - /// Returns an aggregate that is selected in a column named like the given - /// coding key. - /// - /// For example: - /// - /// struct AuthorInfo: Decodable, FetchableRecord { - /// var author: Author - /// var bookCount: Int - /// - /// static func fetchAll(_ db: Database) throws -> [AuthorInfo] { - /// let aggregate = Author.books.count.aliased(CodingKeys.bookCount) - /// let request = Author.annotated(with: aggregate) - /// return try AuthorInfo.fetchAll(db, request) - /// } - /// } - public func aliased(_ key: CodingKey) -> AssociationAggregate { - return aliased(key.stringValue) - } -} - -// MARK: - Logical Operators (AND, OR, NOT) - -/// Returns a logically negated aggregate. -/// -/// For example: -/// -/// Author.having(!Author.books.isEmpty) -public prefix func ! (aggregate: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = aggregate.prepare(request) - return (request: request, expression: !expression) - } -} - -/// Groups two aggregates with the `AND` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.isEmpty && Author.paintings.isEmpty) -public func && (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression && rExpression) - } -} - -// TODO: test -/// :nodoc: -public func && (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression && rhs) - } -} - -// TODO: test -/// :nodoc: -public func && (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs && expression) - } -} - - -/// Groups two aggregates with the `OR` SQL operator. -/// -/// For example: -/// -/// Author.having(!Author.books.isEmpty || !Author.paintings.isEmpty) -public func || (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression || rExpression) - } -} - -// TODO: test -/// :nodoc: -public func || (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression || rhs) - } -} - -// TODO: test -/// :nodoc: -public func || (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs || expression) - } -} - -// MARK: - Egality and Identity Operators (=, <>, IS, IS NOT) - -/// Returns an aggregate that compares two aggregates with the `=` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count == Author.paintings.count) -public func == (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression == rExpression) - } -} - -/// Returns an aggregate that compares an aggregate with the `=` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count == 3) -public func == (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression == rhs) - } -} - -/// Returns an aggregate that compares an aggregate with the `=` SQL operator. -/// -/// For example: -/// -/// Author.having(3 == Author.books.count) -public func == (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs == expression) - } -} - -/// Returns an aggregate that checks the boolean value of an aggregate. -/// -/// For example: -/// -/// Author.having(Author.books.isEmpty == false) -public func == (lhs: AssociationAggregate, rhs: Bool) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression == rhs) - } -} - -/// Returns an aggregate that checks the boolean value of an aggregate. -/// -/// For example: -/// -/// Author.having(false == Author.books.isEmpty) -public func == (lhs: Bool, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs == expression) - } -} - -/// Returns an aggregate that compares two aggregates with the `<>` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count != Author.paintings.count) -public func != (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression != rExpression) - } -} - -/// Returns an aggregate that compares an aggregate with the `<>` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count != 3) -public func != (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression != rhs) - } -} - -/// Returns an aggregate that compares an aggregate with the `<>` SQL operator. -/// -/// For example: -/// -/// Author.having(3 != Author.books.count) -public func != (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs != expression) - } -} - -/// Returns an aggregate that checks the boolean value of an aggregate. -/// -/// For example: -/// -/// Author.having(Author.books.isEmpty != true) -public func != (lhs: AssociationAggregate, rhs: Bool) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression != rhs) - } -} - -/// Returns an aggregate that checks the boolean value of an aggregate. -/// -/// For example: -/// -/// Author.having(true != Author.books.isEmpty) -public func != (lhs: Bool, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs != expression) - } -} - -/// Returns an aggregate that compares two aggregates with the `IS` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count === Author.paintings.count) -public func === (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression === rExpression) - } -} - -/// Returns an aggregate that compares an aggregate with the `IS` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count === 3) -public func === (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression === rhs) - } -} - -/// Returns an aggregate that compares an aggregate with the `IS` SQL operator. -/// -/// For example: -/// -/// Author.having(3 === Author.books.count) -public func === (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs === expression) - } -} - -/// Returns an aggregate that compares two aggregates with the `IS NOT` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count !== Author.paintings.count) -public func !== (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression !== rExpression) - } -} - -/// Returns an aggregate that compares an aggregate with the `IS NOT` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count !== 3) -public func !== (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression !== rhs) - } -} - -/// Returns an aggregate that compares an aggregate with the `IS NOT` SQL operator. -/// -/// For example: -/// -/// Author.having(3 !== Author.books.count) -public func !== (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs !== expression) - } -} - -// MARK: - Comparison Operators (<, >, <=, >=) - -/// Returns an aggregate that compares two aggregates with the `<=` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count <= Author.paintings.count) -public func <= (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression <= rExpression) - } -} - -/// Returns an aggregate that compares an aggregate with the `<=` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count <= 3) -public func <= (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression <= rhs) - } -} - -/// Returns an aggregate that compares an aggregate with the `<=` SQL operator. -/// -/// For example: -/// -/// Author.having(3 <= Author.books.count) -public func <= (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs <= expression) - } -} - -/// Returns an aggregate that compares two aggregates with the `<` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count < Author.paintings.count) -public func < (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression < rExpression) - } -} - -/// Returns an aggregate that compares an aggregate with the `<` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count < 3) -public func < (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression < rhs) - } -} - -/// Returns an aggregate that compares an aggregate with the `<` SQL operator. -/// -/// For example: -/// -/// Author.having(3 < Author.books.count) -public func < (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs < expression) - } -} - -/// Returns an aggregate that compares two aggregates with the `>` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count > Author.paintings.count) -public func > (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression > rExpression) - } -} - -/// Returns an aggregate that compares an aggregate with the `>` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count > 3) -public func > (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression > rhs) - } -} - -/// Returns an aggregate that compares an aggregate with the `>` SQL operator. -/// -/// For example: -/// -/// Author.having(3 > Author.books.count) -public func > (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs > expression) - } -} - -/// Returns an aggregate that compares two aggregates with the `>=` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count >= Author.paintings.count) -public func >= (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression >= rExpression) - } -} - -/// Returns an aggregate that compares an aggregate with the `>=` SQL operator. -/// -/// For example: -/// -/// Author.having(Author.books.count >= 3) -public func >= (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression >= rhs) - } -} - -/// Returns an aggregate that compares an aggregate with the `>=` SQL operator. -/// -/// For example: -/// -/// Author.having(3 >= Author.books.count) -public func >= (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs >= expression) - } -} - -// MARK: - Arithmetic Operators (+, -, *, /) - -/// Returns an arithmetically negated aggregate. -/// -/// For example: -/// -/// Author.annotated(with: -Author.books.count) -public prefix func - (aggregate: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = aggregate.prepare(request) - return (request: request, expression:-expression) - } -} - -/// Returns an aggregate that sums two aggregates with the `+` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: Author.books.count + Author.paintings.count) -public func + (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression + rExpression) - } -} - -/// Returns an aggregate that sums an aggregate with the `+` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: Author.books.count + 1) -public func + (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression + rhs) - } -} - -/// Returns an aggregate that sums an aggregate with the `+` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: 1 + Author.books.count) -public func + (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs + expression) - } -} - -/// Returns an aggregate that substracts two aggregates with the `-` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: Author.books.count - Author.paintings.count) -public func - (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression - rExpression) - } -} - -/// Returns an aggregate that substracts an aggregate with the `-` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: Author.books.count - 1) -public func - (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression - rhs) - } -} - -/// Returns an aggregate that substracts an aggregate with the `-` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: 1 - Author.books.count) -public func - (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs - expression) - } -} - -/// Returns an aggregate that multiplies two aggregates with the `*` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: Author.books.count * Author.paintings.count) -public func * (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression * rExpression) - } -} - -/// Returns an aggregate that substracts an aggregate with the `*` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: Author.books.count * 2) -public func * (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression * rhs) - } -} - -/// Returns an aggregate that substracts an aggregate with the `*` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: 2 * Author.books.count) -public func * (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs * expression) - } -} - -/// Returns an aggregate that multiplies two aggregates with the `/` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: Author.books.count / Author.paintings.count) -public func / (lhs: AssociationAggregate, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (lRequest, lExpression) = lhs.prepare(request) - let (request, rExpression) = rhs.prepare(lRequest) - return (request: request, expression: lExpression / rExpression) - } -} - -/// Returns an aggregate that substracts an aggregate with the `/` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: Author.books.count / 2) -public func / (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression / rhs) - } -} - -/// Returns an aggregate that substracts an aggregate with the `/` SQL operator. -/// -/// For example: -/// -/// Author.annotated(with: 2 / Author.books.count) -public func / (lhs: SQLExpressible, rhs: AssociationAggregate) -> AssociationAggregate { - return AssociationAggregate { request in - let (request, expression) = rhs.prepare(request) - return (request: request, expression: lhs / expression) - } -} - -// MARK: - IFNULL(...) - -/// Returns an aggregate that evaluates the `IFNULL` SQL function. -/// -/// Team.annotated(with: Team.players.min(Column("score")) ?? 0) -public func ?? (lhs: AssociationAggregate, rhs: SQLExpressible) -> AssociationAggregate { - var aggregate = AssociationAggregate { request in - let (request, expression) = lhs.prepare(request) - return (request: request, expression: expression ?? rhs) - } - - // Preserve alias - aggregate.alias = lhs.alias - return aggregate -} - -// TODO: add support for ABS(aggregate) -// TODO: add support for LENGTH(aggregate) diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/BelongsToAssociation.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/BelongsToAssociation.swift deleted file mode 100755 index 1f45962..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/BelongsToAssociation.swift +++ /dev/null @@ -1,78 +0,0 @@ -/// The BelongsTo association sets up a one-to-one connection from a record -/// type to another record type, such as each instance of the declaring record -/// "belongs to" an instance of the other record. -/// -/// For example, if your application includes authors and books, and each book -/// is assigned its author, you'd declare the association this way: -/// -/// struct Author: TableRecord { ... } -/// struct Book: TableRecord { -/// static let author = belongsTo(Author.self) -/// ... -/// } -/// -/// A BelongsTo associations should be supported by an SQLite foreign key. -/// -/// Foreign keys are the recommended way to declare relationships between -/// database tables because not only will SQLite guarantee the integrity of your -/// data, but GRDB will be able to use those foreign keys to automatically -/// configure your association. -/// -/// You define the foreign key when you create database tables. For example: -/// -/// try db.create(table: "author") { t in -/// t.autoIncrementedPrimaryKey("id") // (1) -/// t.column("name", .text) -/// } -/// try db.create(table: "book") { t in -/// t.autoIncrementedPrimaryKey("id") -/// t.column("authorId", .integer) // (2) -/// .notNull() // (3) -/// .indexed() // (4) -/// .references("author", onDelete: .cascade) // (5) -/// t.column("title", .text) -/// } -/// -/// 1. The author table has a primary key. -/// 2. The book.authorId column is used to link a book to the author it -/// belongs to. -/// 3. Make the book.authorId column not null if you want SQLite to guarantee -/// that all books have an author. -/// 4. Create an index on the book.authorId column in order to ease the -/// selection of an author's books. -/// 5. Create a foreign key from book.authorId column to authors.id, so that -/// SQLite guarantees that no book refers to a missing author. The -/// `onDelete: .cascade` option has SQLite automatically delete all of an -/// author's books when that author is deleted. -/// See https://sqlite.org/foreignkeys.html#fk_actions for more information. -/// -/// The example above uses auto-incremented primary keys. But generally -/// speaking, all primary keys are supported. -/// -/// If the database schema does not define foreign keys between tables, you can -/// still use BelongsTo associations. But your help is needed to define the -/// missing foreign key: -/// -/// struct Book: FetchableRecord, TableRecord { -/// static let author = belongsTo(Author.self, using: ForeignKey(...)) -/// } -/// -/// See ForeignKey for more information. -public struct BelongsToAssociation: AssociationToOne { - /// :nodoc: - public typealias OriginRowDecoder = Origin - - /// :nodoc: - public typealias RowDecoder = Destination - - /// :nodoc: - public var sqlAssociation: SQLAssociation - - /// :nodoc: - public init(sqlAssociation: SQLAssociation) { - self.sqlAssociation = sqlAssociation - } -} - -// Allow BelongsToAssociation(...).filter(key: ...) -extension BelongsToAssociation: TableRequest where Destination: TableRecord { } diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasManyAssociation.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasManyAssociation.swift deleted file mode 100755 index d02586f..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasManyAssociation.swift +++ /dev/null @@ -1,78 +0,0 @@ -/// The HasMany association indicates a one-to-many connection between two -/// record types, such as each instance of the declaring record "has many" -/// instances of the other record. -/// -/// For example, if your application includes authors and books, and each author -/// is assigned zero or more books, you'd declare the association this way: -/// -/// struct Book: TableRecord { ... } -/// struct Author: TableRecord { -/// static let books = hasMany(Book.self) -/// ... -/// } -/// -/// HasMany associations should be supported by an SQLite foreign key. -/// -/// Foreign keys are the recommended way to declare relationships between -/// database tables because not only will SQLite guarantee the integrity of your -/// data, but GRDB will be able to use those foreign keys to automatically -/// configure your association. -/// -/// You define the foreign key when you create database tables. For example: -/// -/// try db.create(table: "author") { t in -/// t.autoIncrementedPrimaryKey("id") // (1) -/// t.column("name", .text) -/// } -/// try db.create(table: "book") { t in -/// t.autoIncrementedPrimaryKey("id") -/// t.column("authorId", .integer) // (2) -/// .notNull() // (3) -/// .indexed() // (4) -/// .references("author", onDelete: .cascade) // (5) -/// t.column("title", .text) -/// } -/// -/// 1. The author table has a primary key. -/// 2. The book.authorId column is used to link a book to the author it -/// belongs to. -/// 3. Make the book.authorId column not null if you want SQLite to guarantee -/// that all books have an author. -/// 4. Create an index on the book.authorId column in order to ease the -/// selection of an author's books. -/// 5. Create a foreign key from book.authorId column to authors.id, so that -/// SQLite guarantees that no book refers to a missing author. The -/// `onDelete: .cascade` option has SQLite automatically delete all of an -/// author's books when that author is deleted. -/// See https://sqlite.org/foreignkeys.html#fk_actions for more information. -/// -/// The example above uses auto-incremented primary keys. But generally -/// speaking, all primary keys are supported. -/// -/// If the database schema does not define foreign keys between tables, you can -/// still use HasMany associations. But your help is needed to define the -/// missing foreign key: -/// -/// struct Author: TableRecord { -/// static let books = hasMany(Book.self, using: ForeignKey(...)) -/// } -/// -/// See ForeignKey for more information. -public struct HasManyAssociation: AssociationToMany { - /// :nodoc: - public typealias OriginRowDecoder = Origin - - /// :nodoc: - public typealias RowDecoder = Destination - - /// :nodoc: - public var sqlAssociation: SQLAssociation - - /// :nodoc: - public init(sqlAssociation: SQLAssociation) { - self.sqlAssociation = sqlAssociation - } -} - -// Allow HasManyAssociation(...).filter(key: ...) -extension HasManyAssociation: TableRequest where Destination: TableRecord { } diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasManyThroughAssociation.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasManyThroughAssociation.swift deleted file mode 100755 index e4e5cb3..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasManyThroughAssociation.swift +++ /dev/null @@ -1,61 +0,0 @@ -/// The **HasManyThrough** association is often used to set up a many-to-many -/// connection with another record. This association indicates that the -/// declaring record can be matched with zero or more instances of another -/// record by proceeding through a third record. -/// -/// For example, consider the practice of passport delivery. One coutry -/// "has many" citizens "through" its passports: -/// -/// struct Country: TableRecord { -/// static let passports = hasMany(Passport.self) -/// static let citizens = hasMany(Citizen.self, through: passports, using: Passport.citizen) -/// ... -/// } -/// -/// struct Passport: TableRecord { -/// static let citizen = belongsTo(Citizen.self) -/// ... -/// } -/// -/// struct Citizen: TableRecord { ... } -/// -/// The **HasManyThrough** association is also useful for setting up -/// "shortcuts" through nested HasMany associations. For example, if a document -/// has many sections, and a section has many paragraphs, you may sometimes want -/// to get a simple collection of all paragraphs in the document. You could set -/// that up this way: -/// -/// struct Document: TableRecord { -/// static let sections = hasMany(Section.self) -/// static let paragraphs = hasMany(Paragraph.self, through: sections, using: Section.paragraphs) -/// } -/// -/// struct Section: TableRecord { -/// static let paragraphs = hasMany(Paragraph.self) -/// } -/// -/// struct Paragraph: TableRecord { -/// } -/// -/// As in the examples above, **HasManyThrough** association is always built from -/// two other associations: the `through:` and `using:` arguments. Those -/// associations can be any other association (BelongsTo, HasMany, -/// HasManyThrough, etc). -public struct HasManyThroughAssociation: AssociationToMany { - /// :nodoc: - public typealias OriginRowDecoder = Origin - - /// :nodoc: - public typealias RowDecoder = Destination - - /// :nodoc: - public var sqlAssociation: SQLAssociation - - /// :nodoc: - public init(sqlAssociation: SQLAssociation) { - self.sqlAssociation = sqlAssociation - } -} - -// Allow HasManyThroughAssociation(...).filter(key: ...) -extension HasManyThroughAssociation: TableRequest where Destination: TableRecord { } diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasOneAssociation.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasOneAssociation.swift deleted file mode 100755 index 6b1f49f..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasOneAssociation.swift +++ /dev/null @@ -1,80 +0,0 @@ -/// The HasOne association indicates a one-to-one connection between two -/// record types, such as each instance of the declaring record "has one" -/// instances of the other record. -/// -/// For example, if your application has one database table for countries, and -/// another for their demographic profiles, you'd declare the association -/// this way: -/// -/// struct Demographics: TableRecord { ... } -/// struct Country: TableRecord { -/// static let demographics = hasOne(Demographics.self) -/// ... -/// } -/// -/// HasOne associations should be supported by an SQLite foreign key. -/// -/// Foreign keys are the recommended way to declare relationships between -/// database tables because not only will SQLite guarantee the integrity of your -/// data, but GRDB will be able to use those foreign keys to automatically -/// configure your association. -/// -/// You define the foreign key when you create database tables. For example: -/// -/// try db.create(table: "country") { t in -/// t.column("code", .text).primaryKey() // (1) -/// t.column("name", .text) -/// } -/// try db.create(table: "demographics") { t in -/// t.autoIncrementedPrimaryKey("id") -/// t.column("countryCode", .text) // (2) -/// .notNull() // (3) -/// .unique() // (4) -/// .references("country", onDelete: .cascade) // (5) -/// t.column("population", .integer) -/// t.column("density", .double) -/// } -/// -/// 1. The country table has a primary key. -/// 2. The demographics.countryCode column is used to link a demographic -/// profile to the country it belongs to. -/// 3. Make the demographics.countryCode column not null if you want SQLite to -/// guarantee that all profiles are linked to a country. -/// 4. Create a unique index on the demographics.countryCode column in order to -/// guarantee the unicity of any country's profile. -/// 5. Create a foreign key from demographics.countryCode column to -/// country.code, so that SQLite guarantees that no profile refers to a -/// missing country. The `onDelete: .cascade` option has SQLite automatically -/// delete a profile when its country is deleted. -/// See https://sqlite.org/foreignkeys.html#fk_actions for more information. -/// -/// The example above uses a string primary for the country table. But generally -/// speaking, all primary keys are supported. -/// -/// If the database schema does not follow this convention, and does not define -/// foreign keys between tables, you can still use HasOne associations. But -/// your help is needed to define the missing foreign key: -/// -/// struct Country: FetchableRecord, TableRecord { -/// static let demographics = hasOne(Demographics.self, using: ForeignKey(...)) -/// } -/// -/// See ForeignKey for more information. -public struct HasOneAssociation: AssociationToOne { - /// :nodoc: - public typealias OriginRowDecoder = Origin - - /// :nodoc: - public typealias RowDecoder = Destination - - /// :nodoc: - public var sqlAssociation: SQLAssociation - - /// :nodoc: - public init(sqlAssociation: SQLAssociation) { - self.sqlAssociation = sqlAssociation - } -} - -// Allow HasOneAssociation(...).filter(key: ...) -extension HasOneAssociation: TableRequest where Destination: TableRecord { } diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasOneThroughAssociation.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasOneThroughAssociation.swift deleted file mode 100755 index be25e31..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/Association/HasOneThroughAssociation.swift +++ /dev/null @@ -1,41 +0,0 @@ -/// A **HasOneThrough** association sets up a one-to-one connection with -/// another record. This association indicates that the declaring record can be -/// matched with one instance of another record by proceeding through a third -/// record. For example, if each book belongs to a library, and each library has -/// one address, then one knows where the book should be returned to: -/// -/// struct Book: TableRecord { -/// static let library = belongsTo(Library.self) -/// static let returnAddress = hasOne(Address.self, through: library, using: library.address) -/// ... -/// } -/// -/// struct Library: TableRecord { -/// static let address = hasOne(Address.self) -/// ... -/// } -/// -/// struct Address: TableRecord { ... } -/// -/// As in the example above, **HasOneThrough** association is always built from -/// two other associations: the `through:` and `using:` arguments. Those -/// associations can be any other association to one (BelongsTo, HasOne, -/// HasOneThrough). -public struct HasOneThroughAssociation: AssociationToOne { - /// :nodoc: - public typealias OriginRowDecoder = Origin - - /// :nodoc: - public typealias RowDecoder = Destination - - /// :nodoc: - public var sqlAssociation: SQLAssociation - - /// :nodoc: - public init(sqlAssociation: SQLAssociation) { - self.sqlAssociation = sqlAssociation - } -} - -// Allow HasOneThroughAssociation(...).filter(key: ...) -extension HasOneThroughAssociation: TableRequest where Destination: TableRecord { } diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/QueryInterfaceRequest+Association.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/QueryInterfaceRequest+Association.swift deleted file mode 100755 index 8ef57e1..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/QueryInterfaceRequest+Association.swift +++ /dev/null @@ -1,102 +0,0 @@ -extension QueryInterfaceRequest where RowDecoder: TableRecord { - // MARK: - Associations - - /// Creates a request that prefetches an association. - public func including(all association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == RowDecoder { - return mapQuery { - $0.mapRelation { - $0.including(all: association.sqlAssociation) - } - } - } - - /// Creates a request that includes an association. The columns of the - /// associated record are selected. The returned request does not - /// require that the associated database table contains a matching row. - public func including(optional association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == RowDecoder { - return mapQuery { - $0.mapRelation { - $0.including(optional: association.sqlAssociation) - } - } - } - - /// Creates a request that includes an association. The columns of the - /// associated record are selected. The returned request requires - /// that the associated database table contains a matching row. - public func including(required association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == RowDecoder { - return mapQuery { - $0.mapRelation { - $0.including(required: association.sqlAssociation) - } - } - } - - /// Creates a request that joins an association. The columns of the - /// associated record are not selected. The returned request does not - /// require that the associated database table contains a matching row. - public func joining(optional association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == RowDecoder { - return mapQuery { - $0.mapRelation { - $0.joining(optional: association.sqlAssociation) - } - } - } - - /// Creates a request that joins an association. The columns of the - /// associated record are not selected. The returned request requires - /// that the associated database table contains a matching row. - public func joining(required association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == RowDecoder { - return mapQuery { - $0.mapRelation { - $0.joining(required: association.sqlAssociation) - } - } - } - - // MARK: - Association Aggregates - - private func annotated(with aggregate: AssociationAggregate) -> QueryInterfaceRequest { - let (request, expression) = aggregate.prepare(self) - if let alias = aggregate.alias { - return request.annotated(with: [expression.aliased(alias)]) - } else { - return request.annotated(with: [expression]) - } - } - - /// Creates a request which appends *aggregates* to the current selection. - /// - /// // SELECT player.*, COUNT(DISTINCT book.rowid) AS bookCount - /// // FROM player LEFT JOIN book ... - /// var request = Player.all() - /// request = request.annotated(with: Player.books.count) - public func annotated(with aggregates: AssociationAggregate...) -> QueryInterfaceRequest { - return annotated(with: aggregates) - } - - /// Creates a request which appends *aggregates* to the current selection. - /// - /// // SELECT player.*, COUNT(DISTINCT book.rowid) AS bookCount - /// // FROM player LEFT JOIN book ... - /// var request = Player.all() - /// request = request.annotated(with: [Player.books.count]) - public func annotated(with aggregates: [AssociationAggregate]) -> QueryInterfaceRequest { - return aggregates.reduce(self) { request, aggregate in - request.annotated(with: aggregate) - } - } - - /// Creates a request which appends the provided aggregate *predicate* to - /// the eventual set of already applied predicates. - /// - /// // SELECT player.* - /// // FROM player LEFT JOIN book ... - /// // HAVING COUNT(DISTINCT book.rowid) = 0 - /// var request = Player.all() - /// request = request.having(Player.books.isEmpty) - public func having(_ predicate: AssociationAggregate) -> QueryInterfaceRequest { - let (request, expression) = predicate.prepare(self) - return request.having(expression) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/QueryInterfaceRequest.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/QueryInterfaceRequest.swift deleted file mode 100755 index 39f4a26..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/QueryInterfaceRequest.swift +++ /dev/null @@ -1,424 +0,0 @@ -// QueryInterfaceRequest is the type of requests generated by TableRecord: -// -// struct Player: TableRecord { ... } -// let playerRequest = Player.all() // QueryInterfaceRequest -// -// It wraps an SQLQuery, and has an attached type. -// -// The attached type helps decoding raw database values: -// -// try dbQueue.read { db in -// try playerRequest.fetchAll(db) // [Player] -// } -// -// The attached type also helps the compiler validate associated requests: -// -// playerRequest.including(required: Player.team) // OK -// fruitRequest.including(required: Player.team) // Does not compile - -/// QueryInterfaceRequest is a request that generates SQL for you. -/// -/// For example: -/// -/// try dbQueue.read { db in -/// let request = Player -/// .filter(Column("score") > 1000) -/// .order(Column("name")) -/// let players = try request.fetchAll(db) // [Player] -/// } -/// -/// See https://github.com/groue/GRDB.swift#the-query-interface -public struct QueryInterfaceRequest { - var query: SQLQuery - - init(query: SQLQuery) { - self.query = query - } - - init(relation: SQLRelation) { - self.init(query: SQLQuery(relation: relation)) - } - - var prefetchedAssociations: [SQLAssociation] { - return query.relation.prefetchedAssociations - } -} - -extension QueryInterfaceRequest : FetchRequest { - public typealias RowDecoder = T - - /// Returns a tuple that contains a prepared statement that is ready to be - /// executed, and an eventual row adapter. - /// - /// - parameter db: A database connection. - /// - parameter singleResult: A hint as to whether the query should be optimized for a single result. - /// - returns: A prepared statement and an eventual row adapter. - /// :nodoc: - public func prepare(_ db: Database, forSingleResult singleResult: Bool) throws -> (SelectStatement, RowAdapter?) { - var query = self.query - - // Optimize query by setting a limit of 1 when appropriate - if singleResult && !query.expectsSingleResult { - query.limit = SQLLimit(limit: 1, offset: query.limit?.offset) - } - - return try SQLQueryGenerator(query).prepare(db) - } - - /// Returns the number of rows fetched by the request. - /// - /// - parameter db: A database connection. - /// :nodoc: - public func fetchCount(_ db: Database) throws -> Int { - return try query.fetchCount(db) - } - - /// Returns the database region that the request looks into. - /// - /// - parameter db: A database connection. - /// :nodoc: - public func databaseRegion(_ db: Database) throws -> DatabaseRegion { - var region = try SQLQueryGenerator(query).databaseRegion(db) - - // Iterate all prefetched associations - var fifo = query.relation.prefetchedAssociations - while !fifo.isEmpty { - let association = fifo.removeFirst() - - // Build the query for prefetched rows. - // CAUTION: Keep this code in sync with Row.prefetch(_:associations:in:) - let pivotMappings = try association.pivot.condition.columnMappings(db) - let pivotColumns = pivotMappings.map { $0.right } - let pivotAlias = TableAlias() - let prefetchedRelation = association - .mapPivotRelation { $0.qualified(with: pivotAlias) } - .destinationRelation(fromOriginRows: { _ in [] /* no origin row */ }) - .annotated(with: pivotColumns.map { pivotAlias[Column($0)].aliased("grdb_\($0)") }) - let prefetchedQuery = SQLQuery(relation: prefetchedRelation) - - // Union region - try region.formUnion(SQLQueryGenerator(prefetchedQuery).databaseRegion(db)) - - // Append nested prefetched associations (support for - // A.including(all: A.bs.including(all: B.cs)) - fifo.append(contentsOf: prefetchedRelation.prefetchedAssociations) - } - - return region - } -} - -extension QueryInterfaceRequest : DerivableRequest, AggregatingRequest { - - // MARK: Request Derivation - - /// Creates a request which selects *selection*. - /// - /// // SELECT id, email FROM player - /// var request = Player.all() - /// request = request.select([Column("id"), Column("email")]) - /// - /// Any previous selection is replaced: - /// - /// // SELECT email FROM player - /// request - /// .select([Column("id")]) - /// .select([Column("email")]) - public func select(_ selection: [SQLSelectable]) -> QueryInterfaceRequest { - return mapQuery { $0.select(selection) } - } - - /// Creates a request which selects *selection*, and fetches values of - /// type *type*. - /// - /// try dbQueue.read { db in - /// // SELECT max(score) FROM player - /// let request = Player.all().select([max(Column("score"))], as: Int.self) - /// let maxScore: Int? = try request.fetchOne(db) - /// } - public func select(_ selection: [SQLSelectable], as type: RowDecoder.Type) -> QueryInterfaceRequest { - return mapQuery { $0.select(selection) }.asRequest(of: RowDecoder.self) - } - - /// Creates a request which selects *selection*, and fetches values of - /// type *type*. - /// - /// try dbQueue.read { db in - /// // SELECT max(score) FROM player - /// let request = Player.all().select(max(Column("score")), as: Int.self) - /// let maxScore: Int? = try request.fetchOne(db) - /// } - public func select(_ selection: SQLSelectable..., as type: RowDecoder.Type) -> QueryInterfaceRequest { - return select(selection, as: type) - } - - /// Creates a request which selects *sql*, and fetches values of - /// type *type*. - /// - /// try dbQueue.read { db in - /// // SELECT max(score) FROM player - /// let request = Player.all().select(sql: "max(score)", as: Int.self) - /// let maxScore: Int? = try request.fetchOne(db) - /// } - public func select(sql: String, arguments: StatementArguments = StatementArguments(), as type: RowDecoder.Type) -> QueryInterfaceRequest { - return select(literal: SQLLiteral(sql: sql, arguments: arguments), as: type) - } - - /// Creates a request which selects an SQL *literal*, and fetches values of - /// type *type*. - /// - /// try dbQueue.read { db in - /// // SELECT IFNULL(name, 'Anonymous') FROM player WHERE id = 42 - /// let request = Player. - /// .filter(primaryKey: 42) - /// .select( - /// SQLLiteral( - /// sql: "IFNULL(name, ?)", - /// arguments: ["Anonymous"]), - /// as: String.self) - /// let name: String? = try request.fetchOne(db) - /// } - /// - /// With Swift 5, you can safely embed raw values in your SQL queries, - /// without any risk of syntax errors or SQL injection: - /// - /// try dbQueue.read { db in - /// // SELECT IFNULL(name, 'Anonymous') FROM player WHERE id = 42 - /// let request = Player. - /// .filter(primaryKey: 42) - /// .select( - /// literal: "IFNULL(name, \("Anonymous"))", - /// as: String.self) - /// let name: String? = try request.fetchOne(db) - /// } - public func select(literal sqlLiteral: SQLLiteral, as type: RowDecoder.Type) -> QueryInterfaceRequest { - return select(SQLSelectionLiteral(literal: sqlLiteral), as: type) - } - - /// Creates a request which appends *selection*. - /// - /// // SELECT id, email, name FROM player - /// var request = Player.all() - /// request = request - /// .select([Column("id"), Column("email")]) - /// .annotated(with: [Column("name")]) - public func annotated(with selection: [SQLSelectable]) -> QueryInterfaceRequest { - // TODO: test consumption of - // - // let author = TableAlias() - // let request = Book - // .annotated(with: [author[Column("name")]]) - // .joining(requireed: Book.author) - // - // The problem is the "author.name" column. Can we consume it as "name"? - // From raw rows? From copied rows? - return mapQuery { $0.annotated(with: selection) } - } - - /// Creates a request which returns distinct rows. - /// - /// // SELECT DISTINCT * FROM player - /// var request = Player.all() - /// request = request.distinct() - /// - /// // SELECT DISTINCT name FROM player - /// var request = Player.select(Column("name")) - /// request = request.distinct() - public func distinct() -> QueryInterfaceRequest { - return mapQuery { $0.distinct() } - } - - /// Creates a request with the provided *predicate promise* added to the - /// eventual set of already applied predicates. - /// - /// // SELECT * FROM player WHERE 1 - /// var request = Player.all() - /// request = request.filter { db in true } - public func filter(_ predicate: @escaping (Database) throws -> SQLExpressible) -> QueryInterfaceRequest { - return mapQuery { $0.filter(predicate) } - } - - /// Creates a request which expects a single result. - /// - /// It is unlikely you need to call this method. Its net effect is that - /// QueryInterfaceRequest does not use any `LIMIT 1` sql clause when you - /// call a `fetchOne` method. - /// - /// :nodoc: - public func expectingSingleResult() -> QueryInterfaceRequest { - return mapQuery { $0.expectingSingleResult() } - } - - /// Creates a request grouped according to *expressions promise*. - public func group(_ expressions: @escaping (Database) throws -> [SQLExpressible]) -> QueryInterfaceRequest { - return mapQuery { $0.group(expressions) } - } - - /// Creates a request with the provided *predicate* added to the - /// eventual set of already applied predicates. - public func having(_ predicate: SQLExpressible) -> QueryInterfaceRequest { - return mapQuery { $0.having(predicate) } - } - - /// Creates a request with the provided *orderings promise*. - /// - /// // SELECT * FROM player ORDER BY name - /// var request = Player.all() - /// request = request.order { _ in [Column("name")] } - /// - /// Any previous ordering is replaced: - /// - /// // SELECT * FROM player ORDER BY name - /// request - /// .order{ _ in [Column("email")] } - /// .reversed() - /// .order{ _ in [Column("name")] } - public func order(_ orderings: @escaping (Database) throws -> [SQLOrderingTerm]) -> QueryInterfaceRequest { - return mapQuery { $0.order(orderings) } - } - - /// Creates a request that reverses applied orderings. - /// - /// // SELECT * FROM player ORDER BY name DESC - /// var request = Player.all().order(Column("name")) - /// request = request.reversed() - /// - /// If no ordering was applied, the returned request is identical. - /// - /// // SELECT * FROM player - /// var request = Player.all() - /// request = request.reversed() - public func reversed() -> QueryInterfaceRequest { - return mapQuery { $0.reversed() } - } - - /// Creates a request without any ordering. - /// - /// // SELECT * FROM player - /// var request = Player.all().order(Column("name")) - /// request = request.unordered() - public func unordered() -> QueryInterfaceRequest { - return mapQuery { $0.unordered() } - } - - /// Creates a request which fetches *limit* rows, starting at *offset*. - /// - /// // SELECT * FROM player LIMIT 1 - /// var request = Player.all() - /// request = request.limit(1) - /// - /// Any previous limit is replaced. - public func limit(_ limit: Int, offset: Int? = nil) -> QueryInterfaceRequest { - return mapQuery { $0.limit(limit, offset: offset) } - } - - /// Creates a request that allows you to define expressions that target - /// a specific database table. - /// - /// In the example below, the "team.avgScore < player.score" condition in - /// the ON clause could be not achieved without table aliases. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.* - /// // JOIN team ON ... AND team.avgScore < player.score - /// let playerAlias = TableAlias() - /// let request = Player - /// .all() - /// .aliased(playerAlias) - /// .including(required: Player.team.filter(Column("avgScore") < playerAlias[Column("score")]) - public func aliased(_ alias: TableAlias) -> QueryInterfaceRequest { - return mapQuery { $0.qualified(with: alias) } - } - - /// Creates a request bound to type Target. - /// - /// The returned request can fetch if the type Target is fetchable (Row, - /// value, record). - /// - /// // Int? - /// let maxScore = try Player - /// .select(max(scoreColumn)) - /// .asRequest(of: Int.self) // <-- - /// .fetchOne(db) - /// - /// - parameter type: The fetched type Target - /// - returns: A typed request bound to type Target. - public func asRequest(of type: RowDecoder.Type) -> QueryInterfaceRequest { - return QueryInterfaceRequest(query: query) - } - - /// Returns a request whose query is transformed by the given closure. - func mapQuery(_ transform: (SQLQuery) -> SQLQuery) -> QueryInterfaceRequest { - var request = self - request.query = transform(query) - return request - } -} - -extension QueryInterfaceRequest { - /// Turns a request into a SQLRelation. - /// - /// This method helps initializing associations: - /// - /// struct Book: TableRecord { - /// // invokes Author.all().relation - /// static let author = belongsTo(Author.self) - /// } - var relation: SQLRelation { - let query = self.query - - // Prevent information loss - GRDBPrecondition(!query.isDistinct, "Not implemented: join distinct queries") - GRDBPrecondition(query.groupPromise == nil, "Can't join aggregated queries") - GRDBPrecondition(query.havingExpression == nil, "Can't join aggregated queries") - GRDBPrecondition(query.limit == nil, "Can't join limited queries") - - return query.relation - } -} - -extension QueryInterfaceRequest: TableRequest { - /// :nodoc: - public var databaseTableName: String { - switch query.relation.source { - case .table(tableName: let tableName, alias: _): - // Use case: - // - // let request = Player.all() - // request.filter(key: ...) - // request.filter(keys: ...) - // request.orderByPrimaryKey() - return tableName - case .query: - // The only current use case for SQLSource.query is the - // "trivial count query" (see SQLQuery.countQuery): - // - // // SELECT COUNT(*) FROM (SELECT * FROM player LIMIT 10) - // let request = Player.limit(10) - // let count = try request.fetchCount(db) - // - // This query is currently never wrapped in a QueryInterfaceRequest - // So this fatal error can not currently happen. - fatalError("Request is not based on a database table") - } - } -} - -extension QueryInterfaceRequest where T: MutablePersistableRecord { - - // MARK: Deleting - - /// Deletes matching rows; returns the number of deleted rows. - /// - /// - parameter db: A database connection. - /// - returns: The number of deleted rows - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - @discardableResult - public func deleteAll(_ db: Database) throws -> Int { - try SQLQueryGenerator(query).makeDeleteStatement(db).execute() - return db.changesCount - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/RequestProtocols.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/RequestProtocols.swift deleted file mode 100755 index 44f6901..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Request/RequestProtocols.swift +++ /dev/null @@ -1,522 +0,0 @@ -// MARK: - SelectionRequest - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The protocol for all requests that can refine their selection. -/// -/// :nodoc: -public protocol SelectionRequest { - /// Creates a request which selects *selection*. - /// - /// // SELECT id, email FROM player - /// var request = Player.all() - /// request = request.select([Column("id"), Column("email")]) - /// - /// Any previous selection is replaced: - /// - /// // SELECT email FROM player - /// request - /// .select([Column("id")]) - /// .select([Column("email")]) - func select(_ selection: [SQLSelectable]) -> Self - - /// Creates a request which appends *selection*. - /// - /// // SELECT id, email, name FROM player - /// var request = Player.all() - /// request = request - /// .select([Column("id"), Column("email")]) - /// .annotated(with: [Column("name")]) - func annotated(with selection: [SQLSelectable]) -> Self -} - -/// :nodoc: -extension SelectionRequest { - /// Creates a request which selects *selection*. - /// - /// // SELECT id, email FROM player - /// var request = Player.all() - /// request = request.select(Column("id"), Column("email")) - /// - /// Any previous selection is replaced: - /// - /// // SELECT email FROM player - /// request - /// .select(Column("id")) - /// .select(Column("email")) - public func select(_ selection: SQLSelectable...) -> Self { - return select(selection) - } - - /// Creates a request which selects *sql*. - /// - /// // SELECT id, email FROM player - /// var request = Player.all() - /// request = request.select(sql: "id, email") - /// - /// Any previous selection is replaced: - /// - /// // SELECT email FROM player - /// request - /// .select(sql: "id") - /// .select(sql: "email") - public func select(sql: String, arguments: StatementArguments = StatementArguments()) -> Self { - return select(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// Creates a request which selects an SQL *literal*. - /// - /// // SELECT id, email, score + 1000 FROM player - /// let bonus = 1000 - /// var request = Player.all() - /// request = request.select(literal: SQLLiteral(sql: """ - /// id, email, score + ? - /// """, arguments: [bonus])) - /// - /// With Swift 5, you can safely embed raw values in your SQL queries, - /// without any risk of syntax errors or SQL injection: - /// - /// // SELECT id, email, score + 1000 FROM player - /// let bonus = 1000 - /// var request = Player.all() - /// request = request.select(literal: """ - /// id, email, score + \(bonus) - /// """) - /// - /// Any previous selection is replaced: - /// - /// // SELECT email FROM player - /// request - /// .select(...) - /// .select(literal: SQLLiteral(sql: "email")) - public func select(literal sqlLiteral: SQLLiteral) -> Self { - // NOT TESTED - return select(SQLSelectionLiteral(literal: sqlLiteral)) - } - - /// Creates a request which appends *selection*. - /// - /// // SELECT id, email, name FROM player - /// var request = Player.all() - /// request = request - /// .select([Column("id"), Column("email")]) - /// .annotated(with: Column("name")) - public func annotated(with selection: SQLSelectable...) -> Self { - return annotated(with: selection) - } -} - -// MARK: - FilteredRequest - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The protocol for all requests that can be filtered. -/// -/// :nodoc: -public protocol FilteredRequest { - /// Creates a request with the provided *predicate promise* added to the - /// eventual set of already applied predicates. - /// - /// // SELECT * FROM player WHERE 1 - /// var request = Player.all() - /// request = request.filter { db in true } - func filter(_ predicate: @escaping (Database) throws -> SQLExpressible) -> Self - - /// Creates a request which expects a single result. - /// - /// Requests expecting a single result may ignore the second parameter of - /// the `FetchRequest.prepare(_:forSingleResult:)` method, in order to - /// produce sharply tailored SQL. - /// - /// This method has a default implementation which returns self. - func expectingSingleResult() -> Self -} - -/// :nodoc: -extension FilteredRequest { - public func expectingSingleResult() -> Self { - return self - } - - /// Creates a request with the provided *predicate* added to the - /// eventual set of already applied predicates. - /// - /// // SELECT * FROM player WHERE email = 'arthur@example.com' - /// var request = Player.all() - /// request = request.filter(Column("email") == "arthur@example.com") - public func filter(_ predicate: SQLExpressible) -> Self { - return filter { _ in predicate } - } - - /// Creates a request with the provided *predicate* added to the - /// eventual set of already applied predicates. - /// - /// // SELECT * FROM player WHERE email = 'arthur@example.com' - /// var request = Player.all() - /// request = request.filter(sql: "email = ?", arguments: ["arthur@example.com"]) - public func filter(sql: String, arguments: StatementArguments = StatementArguments()) -> Self { - return filter(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// Creates a request with the provided *predicate* added to the - /// eventual set of already applied predicates. - /// - /// // SELECT * FROM player WHERE email = 'arthur@example.com' - /// var request = Player.all() - /// request = request.filter(literal: SQLLiteral(sql: """ - /// email = ? - /// """, arguments: ["arthur@example.com"]) - /// - /// With Swift 5, you can safely embed raw values in your SQL queries, - /// without any risk of syntax errors or SQL injection: - /// - /// var request = Player.all() - /// request = request.filter(literal: "name = \("O'Brien")") - public func filter(literal sqlLiteral: SQLLiteral) -> Self { - // NOT TESTED - return filter(SQLExpressionLiteral(literal: sqlLiteral)) - } - - /// Creates a request that matches nothing. - /// - /// // SELECT * FROM player WHERE 0 - /// var request = Player.all() - /// request = request.none() - public func none() -> Self { - return filter(false) - } -} - -// MARK: - TableRequest { - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The protocol for all requests that feed from a database table -/// -/// :nodoc: -public protocol TableRequest { - /// The name of the database table - var databaseTableName: String { get } - - /// Creates a request that allows you to define expressions that target - /// a specific database table. - /// - /// In the example below, the "team.avgScore < player.score" condition in - /// the ON clause could be not achieved without table aliases. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.* - /// // JOIN team ON ... AND team.avgScore < player.score - /// let playerAlias = TableAlias() - /// let request = Player - /// .all() - /// .aliased(playerAlias) - /// .including(required: Player.team.filter(Column("avgScore") < playerAlias[Column("score")]) - func aliased(_ alias: TableAlias) -> Self -} - -/// :nodoc: -extension TableRequest where Self: FilteredRequest { - - /// Creates a request with the provided primary key *predicate*. - public func filter(key: PrimaryKeyType?) -> Self { - guard let key = key else { - return none() - } - return filter(keys: [key]) - } - - /// Creates a request with the provided primary key *predicate*. - public func filter(keys: Sequence) -> Self where Sequence.Element: DatabaseValueConvertible { - var request = self - let keys = Array(keys) - switch keys.count { - case 0: - return none() - case 1: - request = request.expectingSingleResult() - default: - break - } - - let databaseTableName = self.databaseTableName - return request.filter { db in - let primaryKey = try db.primaryKey(databaseTableName) - GRDBPrecondition( - primaryKey.columns.count == 1, - "Requesting by key requires a single-column primary key in the table \(databaseTableName)") - return keys.contains(Column(primaryKey.columns[0])) - } - } - - /// Creates a request with the provided primary key *predicate*. - /// - /// When executed, this request raises a fatal error if there is no unique - /// index on the key columns. - public func filter(key: [String: DatabaseValueConvertible?]?) -> Self { - guard let key = key else { - return none() - } - return filter(keys: [key]) - } - - /// Creates a request with the provided primary key *predicate*. - /// - /// When executed, this request raises a fatal error if there is no unique - /// index on the key columns. - public func filter(keys: [[String: DatabaseValueConvertible?]]) -> Self { - var request = self - switch keys.count { - case 0: - return none() - case 1: - request = request.expectingSingleResult() - default: - break - } - - let databaseTableName = self.databaseTableName - return request.filter { db in - try keys - .map { key in - // Prevent filter(keys: [["foo": 1, "bar": 2]]) where - // ("foo", "bar") is not a unique key (primary key or columns of a - // unique index) - guard let columns = try db.columnsForUniqueKey(key.keys, in: databaseTableName) else { - fatalError("table \(databaseTableName) has no unique index on column(s) \(key.keys.sorted().joined(separator: ", "))") - } - - let lowercaseColumns = columns.map { $0.lowercased() } - return key - // Preserve ordering of columns in the unique index - .sorted { (kv1, kv2) in - let index1 = lowercaseColumns.firstIndex(of: kv1.key.lowercased())! - let index2 = lowercaseColumns.firstIndex(of: kv2.key.lowercased())! - return index1 < index2 - } - .map { (column, value) in Column(column) == value } - .joined(operator: .and) - } - .joined(operator: .or) - } - } -} - -/// :nodoc: -extension TableRequest where Self: OrderedRequest { - /// Creates a request ordered by primary key. - public func orderByPrimaryKey() -> Self { - let tableName = self.databaseTableName - return order { db in - try db.primaryKey(tableName).columns.map { Column($0) } - } - } -} - -/// :nodoc: -extension TableRequest where Self: AggregatingRequest { - /// Creates a request grouped by primary key. - public func groupByPrimaryKey() -> Self { - let tableName = self.databaseTableName - return group { db in - try db.primaryKey(tableName).columns.map { Column($0) } - } - } -} - -// MARK: - AggregatingRequest - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The protocol for all requests that can aggregate. -/// -/// :nodoc: -public protocol AggregatingRequest { - /// Creates a request grouped according to *expressions promise*. - func group(_ expressions: @escaping (Database) throws -> [SQLExpressible]) -> Self - - /// Creates a request with the provided *predicate* added to the - /// eventual set of already applied predicates. - func having(_ predicate: SQLExpressible) -> Self -} - -/// :nodoc: -extension AggregatingRequest { - /// Creates a request grouped according to *expressions*. - public func group(_ expressions: [SQLExpressible]) -> Self { - return group { _ in expressions } - } - - /// Creates a request grouped according to *expressions*. - public func group(_ expressions: SQLExpressible...) -> Self { - return group(expressions) - } - - /// Creates a request with a new grouping. - public func group(sql: String, arguments: StatementArguments = StatementArguments()) -> Self { - return group(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// Creates a request with a new grouping. - public func group(literal sqlLiteral: SQLLiteral) -> Self { - // NOT TESTED - // This "expression" is not a real expression. We support raw sql which - // actually contains several expressions: - // - // request = Player.group(sql: "teamId, level") - // - // This is why we use the "unsafeLiteral" initializer, so that the - // SQLExpressionLiteral does not wrap input in parentheses, and - // generates invalid SQL `GROUP BY (teamId, level)`. - return group(SQLExpressionLiteral(unsafeLiteral: sqlLiteral)) - } - - /// Creates a request with the provided *sql* added to the - /// eventual set of already applied predicates. - public func having(sql: String, arguments: StatementArguments = StatementArguments()) -> Self { - return having(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// Creates a request with the provided *sql* added to the - /// eventual set of already applied predicates. - public func having(literal sqlLiteral: SQLLiteral) -> Self { - // NOT TESTED - return having(SQLExpressionLiteral(literal: sqlLiteral)) - } -} - -// MARK: - OrderedRequest - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The protocol for all requests that be ordered. -/// -/// :nodoc: -public protocol OrderedRequest { - /// Creates a request with the provided *orderings promise*. - /// - /// // SELECT * FROM player ORDER BY name - /// var request = Player.all() - /// request = request.order { _ in [Column("name")] } - /// - /// Any previous ordering is replaced: - /// - /// // SELECT * FROM player ORDER BY name - /// request - /// .order{ _ in [Column("email")] } - /// .reversed() - /// .order{ _ in [Column("name")] } - func order(_ orderings: @escaping (Database) throws -> [SQLOrderingTerm]) -> Self - - /// Creates a request that reverses applied orderings. - /// - /// // SELECT * FROM player ORDER BY name DESC - /// var request = Player.all().order(Column("name")) - /// request = request.reversed() - /// - /// If no ordering was applied, the returned request is identical. - /// - /// // SELECT * FROM player - /// var request = Player.all() - /// request = request.reversed() - func reversed() -> Self - - /// Creates a request without any ordering. - /// - /// // SELECT * FROM player - /// var request = Player.all().order(Column("name")) - /// request = request.unordered() - func unordered() -> Self -} - -/// :nodoc: -extension OrderedRequest { - /// Creates a request with the provided *orderings*. - /// - /// // SELECT * FROM player ORDER BY name - /// var request = Player.all() - /// request = request.order(Column("name")) - /// - /// Any previous ordering is replaced: - /// - /// // SELECT * FROM player ORDER BY name - /// request - /// .order(Column("email")) - /// .reversed() - /// .order(Column("name")) - public func order(_ orderings: SQLOrderingTerm...) -> Self { - return order { _ in orderings } - } - - /// Creates a request with the provided *orderings*. - /// - /// // SELECT * FROM player ORDER BY name - /// var request = Player.all() - /// request = request.order(Column("name")) - /// - /// Any previous ordering is replaced: - /// - /// // SELECT * FROM player ORDER BY name - /// request - /// .order(Column("email")) - /// .reversed() - /// .order(Column("name")) - public func order(_ orderings: [SQLOrderingTerm]) -> Self { - return order { _ in orderings } - } - - /// Creates a request sorted according to *sql*. - /// - /// // SELECT * FROM player ORDER BY name - /// var request = Player.all() - /// request = request.order(sql: "name") - /// - /// Any previous ordering is replaced: - /// - /// // SELECT * FROM player ORDER BY name - /// request - /// .order(sql: "email") - /// .order(sql: "name") - public func order(sql: String, arguments: StatementArguments = StatementArguments()) -> Self { - return order(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// Creates a request sorted according to an SQL *literal*. - /// - /// // SELECT * FROM player ORDER BY name - /// var request = Player.all() - /// request = request.order(sql: "name") - /// - /// Any previous ordering is replaced: - /// - /// // SELECT * FROM player ORDER BY name - /// request - /// .order(sql: "email") - /// .order(sql: "name") - public func order(literal sqlLiteral: SQLLiteral) -> Self { - // NOT TESTED - // This "expression" is not a real expression. We support raw sql which - // actually contains several expressions: - // - // request = Player.order(sql: "teamId, level") - // - // This is why we use the "unsafeLiteral" initializer, so that the - // SQLExpressionLiteral does not wrap input in parentheses, and - // generates invalid SQL `ORDER BY (teamId, level)`. - return order(SQLExpressionLiteral(unsafeLiteral: sqlLiteral)) - } -} - -// MARK: - DerivableRequest - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The base protocol for all requests that can be refined. -/// -/// :nodoc: -public protocol DerivableRequest: SelectionRequest, FilteredRequest, OrderedRequest { - associatedtype RowDecoder -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Row+QueryInterfaceRequest.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Row+QueryInterfaceRequest.swift deleted file mode 100755 index 4efd97c..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Row+QueryInterfaceRequest.swift +++ /dev/null @@ -1,219 +0,0 @@ -extension QueryInterfaceRequest where RowDecoder == Row { - - // MARK: Fetching Rows - - /// A cursor over fetched rows. - /// - /// let request: QueryInterfaceRequest = ... - /// let rows = try request.fetchCursor(db) // RowCursor - /// while let row = try rows.next() { // Row - /// let id: Int64 = row[0] - /// let name: String = row[1] - /// } - /// - /// Fetched rows are reused during the cursor iteration: don't turn a row - /// cursor into an array with `Array(rows)` or `rows.filter { ... }` since - /// you would not get the distinct rows you expect. Use `Row.fetchAll(...)` - /// instead. - /// - /// For the same reason, make sure you make a copy whenever you extract a - /// row for later use: `row.copy()`. - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameter db: A database connection. - /// - returns: A cursor over fetched rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchCursor(_ db: Database) throws -> RowCursor { - return try Row.fetchCursor(db, self) - } - - /// An array of fetched rows. - /// - /// let request: QueryInterfaceRequest = ... - /// let rows = try request.fetchAll(db) - /// - /// - parameter db: A database connection. - /// - returns: An array of fetched rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchAll(_ db: Database) throws -> [Row] { - return try Row.fetchAll(db, self) - } - - /// The first fetched row. - /// - /// let request: QueryInterfaceRequest = ... - /// let row = try request.fetchOne(db) - /// - /// - parameter db: A database connection. - /// - returns: An optional row. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchOne(_ db: Database) throws -> Row? { - return try Row.fetchOne(db, self) - } -} - -extension Row { - - // MARK: - Fetching From QueryInterfaceRequest - - /// Returns a cursor over rows fetched from a fetch request. - /// - /// let request = Player.all() - /// let rows = try Row.fetchCursor(db, request) // RowCursor - /// while let row = try rows.next() { // Row - /// let id: Int64 = row["id"] - /// let name: String = row["name"] - /// } - /// - /// Fetched rows are reused during the cursor iteration: don't turn a row - /// cursor into an array with `Array(rows)` or `rows.filter { ... }` since - /// you would not get the distinct rows you expect. Use `Row.fetchAll(...)` - /// instead. - /// - /// For the same reason, make sure you make a copy whenever you extract a - /// row for later use: `row.copy()`. - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: A cursor over fetched rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, _ request: QueryInterfaceRequest) throws -> RowCursor { - precondition(request.prefetchedAssociations.isEmpty, "Not implemented: fetchCursor with prefetched associations") - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchCursor(statement, adapter: adapter) - } - - /// Returns an array of rows fetched from a fetch request. - /// - /// let request = Player.all() - /// let rows = try Row.fetchAll(db, request) - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An array of rows. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, _ request: QueryInterfaceRequest) throws -> [Row] { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - let rows = try fetchAll(statement, adapter: adapter) - - let associations = request.prefetchedAssociations - if associations.isEmpty == false { - try prefetch(db, associations: associations, in: rows) - } - return rows - } - - /// Returns a single row fetched from a fetch request. - /// - /// let request = Player.filter(key: 1) - /// let row = try Row.fetchOne(db, request) - /// - /// - parameters: - /// - db: A database connection. - /// - request: A FetchRequest. - /// - returns: An optional row. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, _ request: QueryInterfaceRequest) throws -> Row? { - let (statement, adapter) = try request.prepare(db, forSingleResult: true) - guard let row = try fetchOne(statement, adapter: adapter) else { - return nil - } - - let associations = request.prefetchedAssociations - if associations.isEmpty == false { - try prefetch(db, associations: associations, in: [row]) - } - return row - } - - /// Append rows from prefetched associations into the argument rows. - static func prefetch(_ db: Database, associations: [SQLAssociation], in rows: [Row]) throws { - guard let firstRow = rows.first else { - return - } - - // CAUTION: Keep this code in sync with QueryInterfaceRequest.databaseRegion(_:) - for association in associations { - let pivotMappings = try association.pivot.condition.columnMappings(db) - - let prefetchedRows: [[DatabaseValue] : [Row]] - do { - // Annotate prefetched rows with pivot columns, so that we can - // group them. - // - // Those pivot columns are necessary when we prefetch - // indirect associations: - // - // // SELECT country.*, passport.citizenId AS grdb_citizenId - // // -- ^ the necessary pivot column - // // FROM country - // // JOIN passport ON passport.countryCode = country.code - // // AND passport.citizenId IN (1, 2, 3) - // Citizen.including(all: Citizen.countries) - // - // Those pivot columns are redundant when we prefetch direct - // associations (maybe we'll remove this redundancy later): - // - // // SELECT *, authorId AS grdb_authorId - // // -- ^ the redundant pivot column - // // FROM book - // // WHERE authorId IN (1, 2, 3) - // Author.including(all: Author.books) - let pivotColumns = pivotMappings.map { $0.right } - let pivotAlias = TableAlias() - let prefetchedRelation = association - .mapPivotRelation { $0.qualified(with: pivotAlias) } - .destinationRelation(fromOriginRows: { _ in rows }) - .annotated(with: pivotColumns.map { pivotAlias[Column($0)].aliased("grdb_\($0)") }) - prefetchedRows = try QueryInterfaceRequest(relation: prefetchedRelation) - .fetchAll(db) - .grouped(byDatabaseValuesOnColumns: pivotColumns.map { "grdb_\($0)" }) - // TODO: can we remove those grdb_ columns now that grouping has been done? - } - - let groupingIndexes = firstRow.indexes(ofColumns: pivotMappings.map { $0.left }) - for row in rows { - let groupingKey = groupingIndexes.map { row.impl.databaseValue(atUncheckedIndex: $0) } - let prefetchedRows = prefetchedRows[groupingKey, default: []] - row.prefetchedRows.setRows(prefetchedRows, forKeyPath: association.keyPath) - } - } - } -} - -extension Array where Element == Row { - /// - precondition: Columns all exist in all rows. All rows have the same - /// columnns, in the same order. - fileprivate func grouped(byDatabaseValuesOnColumns columns: [String]) -> [[DatabaseValue]: [Row]] { - guard let firstRow = first else { - return [:] - } - let indexes = firstRow.indexes(ofColumns: columns) - return Dictionary(grouping: self, by: { row in - indexes.map { row.impl.databaseValue(atUncheckedIndex: $0) } - }) - } -} - -extension Row { - /// - precondition: Columns all exist in the row. - fileprivate func indexes(ofColumns columns: [String]) -> [Int] { - return columns.map { column -> Int in - guard let index = index(ofColumn: column) else { - fatalError("Column \(column) is not selected") - } - return index - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/Column.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/Column.swift deleted file mode 100755 index ef13a06..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/Column.swift +++ /dev/null @@ -1,100 +0,0 @@ -/// Adopt the ColumnExpression protocol when you define a column type. -/// -/// You can, for example, define a String-based column enum: -/// -/// enum Columns: String, ColumnExpression { -/// case id, name, score -/// } -/// let arthur = try Player.filter(Columns.name == "Arthur").fetchOne(db) -/// -/// You can also define a genuine column type: -/// -/// struct MyColumn: ColumnExpression { -/// var name: String -/// var sqlType: String -/// } -/// let nameColumn = MyColumn(name: "name", sqlType: "VARCHAR") -/// let arthur = try Player.filter(nameColumn == "Arthur").fetchOne(db) -/// -/// See https://github.com/groue/GRDB.swift#the-query-interface -public protocol ColumnExpression: SQLExpression { - /// The unqualified name of a database column. - /// - /// "score" is a valid unqualified name. "player.score" is not. - var name: String { get } -} - -extension ColumnExpression { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return name.quotedDatabaseIdentifier - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return QualifiedColumn(name, alias: alias) - } -} - -/// A column in a database table. -/// -/// When you need to introduce your own column type, don't wrap a Column. -/// Instead, adopt the ColumnExpression protocol. -/// -/// See https://github.com/groue/GRDB.swift#the-query-interface -public struct Column: ColumnExpression { - /// The hidden rowID column - public static let rowID = Column("rowid") - - /// The name of the column - public var name: String - - /// Creates a column given its name. - public init(_ name: String) { - self.name = name - } - - /// Creates a column given a CodingKey. - public init(_ codingKey: CodingKey) { - self.name = codingKey.stringValue - } -} - -/// A qualified column in the database, as in `SELECT t.a FROM t` -struct QualifiedColumn: ColumnExpression { - var name: String - private let alias: TableAlias - - /// Creates a column given its name. - init(_ name: String, alias: TableAlias) { - self.name = name - self.alias = alias - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - if let qualifier = context.qualifier(for: alias) { - return qualifier.quotedDatabaseIdentifier + "." + name.quotedDatabaseIdentifier - } - return name.quotedDatabaseIdentifier - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - // Never requalify - return self - } -} - -/// Support for column enums: -/// -/// struct Player { -/// enum Columns: String, ColumnExpression { -/// case id, name, score -/// } -/// } -extension ColumnExpression where Self: RawRepresentable, Self.RawValue == String { - public var name: String { - return rawValue - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/DatabasePromise.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/DatabasePromise.swift deleted file mode 100755 index d3194fc..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/DatabasePromise.swift +++ /dev/null @@ -1,50 +0,0 @@ -/// DatabasePromise represents a value that can only be resolved when a -/// database connection is available. -/// -/// This type is important for the query interface, which lets the user define -/// requests without any database context. -/// -/// For example, consider those two requests: -/// -/// let playerRequest = Player.filter(key: 1) -/// let countryRequest = Country.filter(key: "FR") -/// -/// Both need a database connection in order to introspect the database schema, -/// find the primary key of both table, and generate the correct SQL: -/// -/// try dbQueue.read { db in -/// // SELECT * FROM player WHERE id = 1 -/// let player = try playerRequest.fetchOne(db) -/// // SELECT * FROM country WHERE code = 'FR' -/// let country = try countryRequest.fetchOne(db) -/// } -/// -/// Such late computations are backed by DatabasePromise. In our example, -/// see SQLRelation.filterPromise. -struct DatabasePromise { - /// Returns the resolved value. - let resolve: (Database) throws -> T - - /// Creates a promise that resolves to a value. - init(value: T) { - self.resolve = { _ in value } - } - - /// Creates a promise from a closure. - init(_ resolve: @escaping (Database) throws -> T) { - self.resolve = resolve - } - - /// Returns a promise whose value is transformed by the given closure. - func map(_ transform: @escaping (T) throws -> U) -> DatabasePromise { - return DatabasePromise { db in - try transform(self.resolve(db)) - } - } - - func flatMap(_ transform: @escaping (T) -> DatabasePromise) -> DatabasePromise { - return DatabasePromise { db in - try transform(self.resolve(db)).resolve(db) - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLAssociation.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLAssociation.swift deleted file mode 100755 index a918fce..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLAssociation.swift +++ /dev/null @@ -1,353 +0,0 @@ -// MARK: - SQLAssociation - -/// An SQL association is a non-empty chain of steps which starts at the -/// "pivot" and ends on the "destination": -/// -/// // SELECT origin.*, destination.* -/// // FROM origin -/// // JOIN pivot ON ... -/// // JOIN ... -/// // JOIN ... -/// // JOIN destination ON ... -/// Origin.including(required: association) -/// -/// For direct associations such as BelongTo or HasMany, the chain contains a -/// single element, the "destination", without intermediate step: -/// -/// // "Origin" belongsTo "destination": -/// // SELECT origin.*, destination.* -/// // FROM origin -/// // JOIN destination ON destination.originId = origin.id -/// let association = Origin.belongsTo(Destination.self) -/// Origin.including(required: association) -/// -/// Indirect associations such as HasManyThrough have one or several -/// intermediate steps: -/// -/// // "Origin" has many "destination" through "pivot": -/// // SELECT origin.*, destination.* -/// // FROM origin -/// // JOIN pivot ON pivot.originId = origin.id -/// // JOIN destination ON destination.id = pivot.destinationId -/// let association = Origin.hasMany( -/// Destination.self, -/// through: Origin.hasMany(Pivot.self), -/// via: Pivot.belongsTo(Destination.self)) -/// Origin.including(required: association) -/// -/// // "Origin" has many "destination" through "pivot1" and "pivot2": -/// // SELECT origin.*, destination.* -/// // FROM origin -/// // JOIN pivot1 ON pivot1.originId = origin.id -/// // JOIN pivot2 ON pivot2.pivot1Id = pivot1.id -/// // JOIN destination ON destination.id = pivot.destinationId -/// let association = Origin.hasMany( -/// Destination.self, -/// through: Origin.hasMany(Pivot1.self), -/// via: Pivot1.hasMany( -/// Destination.self, -/// through: Pivot1.hasMany(Pivot2.self), -/// via: Pivot2.belongsTo(Destination.self))) -/// Origin.including(required: association) -/// -/// :nodoc: -public /* TODO: internal */ struct SQLAssociation { - // All steps, from pivot to destination. Never empty. - private(set) var steps: [SQLAssociationStep] - var keyPath: [String] { - return steps.map { $0.key.name(for: $0.cardinality) } - } - - var destination: SQLAssociationStep { - get { return steps[steps.count - 1] } - set { steps[steps.count - 1] = newValue } - } - - var pivot: SQLAssociationStep { - get { return steps[0] } - set { steps[0] = newValue } - } - - init(steps: [SQLAssociationStep]) { - assert(!steps.isEmpty) - self.steps = steps - } - - init( - key: SQLAssociationKey, - condition: SQLAssociationCondition, - relation: SQLRelation, - cardinality: SQLAssociationCardinality) - { - let step = SQLAssociationStep( - key: key, - condition: condition, - relation: relation, - cardinality: cardinality) - self.init(steps: [step]) - } - - /// Changes the destination key - func forDestinationKey(_ key: SQLAssociationKey) -> SQLAssociation { - var result = self - result.destination.key = key - return result - } - - /// Transforms the destination relation - func mapDestinationRelation(_ transform: (SQLRelation) -> SQLRelation) -> SQLAssociation { - var result = self - result.destination = result.destination.mapRelation(transform) - return result - } - - /// Transforms the pivot relation - func mapPivotRelation(_ transform: (SQLRelation) -> SQLRelation) -> SQLAssociation { - var result = self - result.pivot = result.pivot.mapRelation(transform) - return result - } - - /// Returns a new association - func through(_ other: SQLAssociation) -> SQLAssociation { - return SQLAssociation(steps: other.steps + steps) - } - - /// Given an origin alias and rows, returns the destination of the - /// association as a relation. - /// - /// This method provides support for association methods such - /// as `request(for:)`: - /// - /// struct Destination: TableRecord { } - /// struct Origin: TableRecord, EncodableRecord { - /// static let destinations = hasMany(Destination.self) - /// var destinations: QueryInterface { - /// return request(for: Origin.destinations) - /// } - /// } - /// - /// // SELECT destination.* - /// // FROM destination - /// // WHERE destination.originId = 1 - /// let origin = Origin(id: 1) - /// let destinations = origin.destinations.fetchAll(db) - /// - /// At low-level, this gives: - /// - /// let origin = Origin(id: 1) - /// let originAlias = TableAlias(tableName: Origin.databaseTableName) - /// let sqlAssociation = Origin.destination.sqlAssociation - /// let destinationRelation = sqlAssociation.destinationRelation( - /// from: originAlias, - /// rows: { db in try [Row(PersistenceContainer(db, origin))] }) - /// let query = SQLQuery(relation: destinationRelation) - /// let generator = SQLQueryGenerator(query) - /// let statement, _ = try generator.prepare(db) - /// print(statement.sql) - /// // SELECT destination.* - /// // FROM destination - /// // WHERE destination.originId = 1 - /// - /// This method works for simple direct associations such as BelongsTo or - /// HasMany in the above examples, but also for indirect associations such - /// as HasManyThrough, which have any number of pivot relations between the - /// origin and the destination. - func destinationRelation(fromOriginRows originRows: @escaping (Database) throws -> [Row]) -> SQLRelation { - // Filter the pivot - let pivot = self.pivot - let pivotAlias = TableAlias() - let filteredPivotRelation = pivot.relation - .qualified(with: pivotAlias) - .filter({ db in - // `pivot.originId = 123` or `pivot.originId IN (1, 2, 3)` - try pivot.condition.filteringExpression(db, leftRows: originRows(db), rightAlias: pivotAlias) - }) - - if steps.count == 1 { - // This is a direct join from origin to destination, without - // intermediate step. - // - // SELECT destination.* - // FROM destination - // WHERE destination.originId = 1 - // - // let association = Origin.hasMany(Destination.self) - // Origin(id: 1).request(for: association) - return filteredPivotRelation - } - - // This is an indirect join from origin to destination, through - // some intermediate steps: - // - // SELECT destination.* - // FROM destination - // JOIN pivot ON (pivot.destinationId = destination.id) AND (pivot.originId = 1) - // - // let association = Origin.hasMany( - // Destination.self, - // through: Origin.hasMany(Pivot.self), - // via: Pivot.belongsTo(Destination.self)) - // Origin(id: 1).request(for: association) - let reversedSteps = zip(steps, steps.dropFirst()) - .map { (step, nextStep) -> SQLAssociationStep in - // Intermediate steps are not included in the selection, and - // don't have any child. - let relation = step.relation.select([]).deletingChildren() - return SQLAssociationStep( - key: step.key, - condition: nextStep.condition.reversed, - relation: relation, - cardinality: step.cardinality) - } - .reversed() - - var reversedAssociation = SQLAssociation(steps: Array(reversedSteps)) - // Replace pivot with the filtered one (not included in the selection, - // without children). - reversedAssociation = reversedAssociation.mapDestinationRelation { _ in - filteredPivotRelation.select([]).deletingChildren() - } - return destination.relation.appending(reversedAssociation, kind: .oneRequired) - } -} - -struct SQLAssociationStep { - var key: SQLAssociationKey - var condition: SQLAssociationCondition - var relation: SQLRelation - var cardinality: SQLAssociationCardinality - - func mapRelation(_ transform: (SQLRelation) -> SQLRelation) -> SQLAssociationStep { - return SQLAssociationStep( - key: key, - condition: condition, - relation: transform(relation), - cardinality: cardinality) - } -} - -enum SQLAssociationCardinality { - case toOne - case toMany -} - -// MARK: - SQLAssociationKey - -/// Associations are meant to be consumed, most often into Decodable records. -/// -/// Those records have singular or plural property names, and we want -/// associations to be able to fill those singular or plural names -/// automatically, so that the user does not have to perform explicit -/// decoding configuration. -/// -/// Those plural or singular names are not decided when the association is -/// defined. For example, the Author.books association, which looks plural, may -/// actually generate "book" or "books" depending on the context: -/// -/// struct Author: TableRecord { -/// static let books = hasMany(Book.self) -/// } -/// struct Book: TableRecord { -/// } -/// -/// // "books" -/// struct AuthorInfo: FetchableRecord, Decodable { -/// var author: Author -/// var books: [Book] -/// } -/// let request = Author.including(all: Author.books) -/// let authorInfos = try AuthorInfo.fetchAll(db, request) -/// -/// "book" -/// struct AuthorInfo: FetchableRecord, Decodable { -/// var author: Author -/// var book: Book -/// } -/// let request = Author.including(required: Author.books) -/// let authorInfos = try AuthorInfo.fetchAll(db, request) -/// -/// "bookCount" -/// struct AuthorInfo: FetchableRecord, Decodable { -/// var author: Author -/// var bookCount: Int -/// } -/// let request = Author.annotated(with: Author.books.count) -/// let authorInfos = try AuthorInfo.fetchAll(db, request) -/// -/// The SQLAssociationKey type aims at providing the necessary support for -/// those various inflections. -enum SQLAssociationKey { - /// A key that is inflected in singular and plural contexts. - /// - /// For example: - /// - /// struct Author: TableRecord { - /// static let databaseTableName = "authors" - /// } - /// struct Book: TableRecord { - /// let author = belongsTo(Author.self) - /// } - /// - /// let request = Book.including(required: Book.author) - /// let row = try Row.fetchOne(db, request)! - /// row.scopes["author"] // singularized "authors" table name - case inflected(String) - - /// A key that is inflected in plural contexts, but stricly honors - /// user-provided name in singular contexts. - /// - /// For example: - /// - /// struct Country: TableRecord { - /// let demographics = hasOne(Demographics.self, key: "demographics") - /// } - /// - /// let request = Country.including(required: Country.demographics) - /// let row = try Row.fetchOne(db, request)! - /// row.scopes["demographics"] // not singularized - case fixedSingular(String) - - /// A key that is inflected in singular contexts, but stricly honors - /// user-provided name in plural contexts. - /// See .inflected and .fixedSingular for some context. - case fixedPlural(String) - - /// A key that is never inflected. - case fixed(String) - - func name(for cardinality: SQLAssociationCardinality) -> String { - switch cardinality { - case .toOne: - return singularizedName - case .toMany: - return pluralizedName - } - } - - var pluralizedName: String { - switch self { - case .inflected(let name): - return name.pluralized - case .fixedSingular(let name): - return name.pluralized - case .fixedPlural(let name): - return name - case .fixed(let name): - return name - } - } - - var singularizedName: String { - switch self { - case .inflected(let name): - return name.singularized - case .fixedSingular(let name): - return name - case .fixedPlural(let name): - return name.singularized - case .fixed(let name): - return name - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLCollatedExpression.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLCollatedExpression.swift deleted file mode 100755 index 29582b5..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLCollatedExpression.swift +++ /dev/null @@ -1,73 +0,0 @@ -/// SQLCollatedExpression taints an expression so that every derived expression -/// is eventually evaluated using an SQLite collation. -/// -/// You create one by calling the SQLSpecificExpressible.collating() method. -/// -/// let email: SQLCollatedExpression = Column("email").collating(.nocase) -/// -/// // SELECT * FROM player WHERE email = 'arthur@example.com' COLLATE NOCASE -/// Player.filter(email == "arthur@example.com") -/// -/// :nodoc: -public struct SQLCollatedExpression { - /// The tainted expression - public let expression: SQLExpression - - /// The name of the collation - public let collationName: Database.CollationName - - /// Returns an ordering suitable for QueryInterfaceRequest.order() - /// - /// let email: SQLCollatedExpression = Column("email").collating(.nocase) - /// - /// // SELECT * FROM player ORDER BY email COLLATE NOCASE ASC - /// Player.order(email.asc) - /// - /// See https://github.com/groue/GRDB.swift/#the-query-interface - public var asc: SQLOrderingTerm { - return SQLOrdering.asc(sqlExpression) - } - - /// Returns an ordering suitable for QueryInterfaceRequest.order() - /// - /// let email: SQLCollatedExpression = Column("email").collating(.nocase) - /// - /// // SELECT * FROM player ORDER BY email COLLATE NOCASE DESC - /// Player.order(email.desc) - /// - /// See https://github.com/groue/GRDB.swift/#the-query-interface - public var desc: SQLOrderingTerm { - return SQLOrdering.desc(sqlExpression) - } - - init(_ expression: SQLExpression, collationName: Database.CollationName) { - self.expression = expression - self.collationName = collationName - } - - var sqlExpression: SQLExpression { - return SQLExpressionCollate(expression, collationName: collationName) - } -} - -/// :nodoc: -extension SQLCollatedExpression : SQLOrderingTerm { - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public var reversed: SQLOrderingTerm { - return desc - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func orderingTermSQL(_ context: inout SQLGenerationContext) -> String { - return sqlExpression.orderingTermSQL(&context) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func qualifiedOrdering(with alias: TableAlias) -> SQLOrderingTerm { - return SQLCollatedExpression(expression.qualifiedExpression(with: alias), collationName: collationName) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLCollection.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLCollection.swift deleted file mode 100755 index 8bc5f68..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLCollection.swift +++ /dev/null @@ -1,63 +0,0 @@ -// MARK: - SQLCollection - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLCollection is the protocol for types that can be checked for inclusion. -/// -/// :nodoc: -public protocol SQLCollection { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns an SQL string that represents the collection. - func collectionSQL(_ context: inout SQLGenerationContext) -> String - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns an expression that check whether the collection contains - /// the expression. - func contains(_ value: SQLExpressible) -> SQLExpression -} - - -// MARK: Default Implementations - -/// :nodoc: -extension SQLCollection { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns a SQLExpressionContains which applies the `IN` SQL operator. - public func contains(_ value: SQLExpressible) -> SQLExpression { - return SQLExpressionContains(value, self) - } -} - - -// MARK: - SQLExpressionsArray - -/// SQLExpressionsArray wraps an array of expressions -/// -/// SQLExpressionsArray([1, 2, 3]) -struct SQLExpressionsArray : SQLCollection { - let expressions: [SQLExpression] - - init(_ expressions: S) where S.Iterator.Element : SQLExpressible { - self.expressions = expressions.map { $0.sqlExpression } - } - - func collectionSQL(_ context: inout SQLGenerationContext) -> String { - return (expressions.map { $0.expressionSQL(&context) } as [String]).joined(separator: ", ") - } - - func contains(_ value: SQLExpressible) -> SQLExpression { - guard let expression = expressions.first else { - // [].contains(Column("name")) => 0 - return false.databaseValue - } - if expressions.count == 1 { - // ["foo"].contains(Column("name")) => name = 'foo' - return value == expression - } - // ["foo", "bar"].contains(Column("name")) => name IN ('foo', 'bar') - return SQLExpressionContains(value, self) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpressible.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpressible.swift deleted file mode 100755 index f907786..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpressible.swift +++ /dev/null @@ -1,99 +0,0 @@ -// MARK: - SQLExpressible - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The protocol for all types that can be turned into an SQL expression. -/// -/// It is adopted by protocols like DatabaseValueConvertible, and types -/// like Column. -/// -/// See https://github.com/groue/GRDB.swift/#the-query-interface -/// -/// :nodoc: -public protocol SQLExpressible { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns an SQLExpression - var sqlExpression: SQLExpression { get } -} - -// MARK: - SQLSpecificExpressible - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLSpecificExpressible is a protocol for all database-specific types that can -/// be turned into an SQL expression. Types whose existence is not purely -/// dedicated to the database should adopt the SQLExpressible protocol instead. -/// -/// For example, Column is a type that only exists to help you build requests, -/// and it adopts SQLSpecificExpressible. -/// -/// On the other side, Int adopts SQLExpressible (via DatabaseValueConvertible). -/// -/// :nodoc: -public protocol SQLSpecificExpressible : SQLExpressible { - // SQLExpressible can be adopted by Swift standard types, and user - // types, through the DatabaseValueConvertible protocol which inherits - // from SQLExpressible. - // - // For example, Int adopts SQLExpressible through - // DatabaseValueConvertible. - // - // SQLSpecificExpressible, on the other side, is not adopted by any - // Swift standard type or any user type. It is only adopted by GRDB types, - // such as Column and SQLExpression. - // - // This separation lets us define functions and operators that do not - // spill out. The three declarations below have no chance overloading a - // Swift-defined operator, or a user-defined operator: - // - // - ==(SQLExpressible, SQLSpecificExpressible) - // - ==(SQLSpecificExpressible, SQLExpressible) - // - ==(SQLSpecificExpressible, SQLSpecificExpressible) -} - -// MARK: - SQLExpressible & SQLOrderingTerm - -extension SQLExpressible where Self: SQLOrderingTerm { - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public var reversed: SQLOrderingTerm { - return SQLOrdering.desc(sqlExpression) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func orderingTermSQL(_ context: inout SQLGenerationContext) -> String { - return sqlExpression.expressionSQL(&context) - } -} - -// MARK: - SQLExpressible & SQLSelectable - -extension SQLExpressible where Self: SQLSelectable { - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func resultColumnSQL(_ context: inout SQLGenerationContext) -> String { - return sqlExpression.expressionSQL(&context) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func countedSQL(_ context: inout SQLGenerationContext) -> String { - return sqlExpression.expressionSQL(&context) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func count(distinct: Bool) -> SQLCount? { - return sqlExpression.count(distinct: distinct) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func columnCount(_ db: Database) throws -> Int { - return 1 - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpression+QueryInterface.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpression+QueryInterface.swift deleted file mode 100755 index 3d1c0de..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpression+QueryInterface.swift +++ /dev/null @@ -1,730 +0,0 @@ -// MARK: - SQLExpression - -extension SQLExpression { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Converts an expression to an SQLLiteral - /// - /// :nodoc: - public var sqlLiteral: SQLLiteral { - var context = SQLGenerationContext.literalGenerationContext(withArguments: true) - let sql = expressionSQL(&context) - return SQLLiteral(sql: sql, arguments: context.arguments!) - } - - /// The expression as a quoted SQL literal (not public in order to avoid abuses) - /// - /// "foo'bar".databaseValue.quotedSQL() // "'foo''bar'"" - func quotedSQL() -> String { - var context = SQLGenerationContext.literalGenerationContext(withArguments: false) - return expressionSQL(&context) - } -} - -// MARK: - SQLExpressionLiteral - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLExpressionLiteral is an expression built from a raw SQL snippet. -/// -/// SQLExpressionLiteral(sql: "1 + 2") -/// -/// The SQL literal may contain `?` and colon-prefixed arguments: -/// -/// SQLExpressionLiteral(sql: "? + ?", arguments: [1, 2]) -/// SQLExpressionLiteral(sql: ":one + :two", arguments: ["one": 1, "two": 2]) -public struct SQLExpressionLiteral : SQLExpression { - private let sqlLiteral: SQLLiteral - - public var sql: String { return sqlLiteral.sql } - public var arguments: StatementArguments { return sqlLiteral.arguments } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates an SQL literal expression. - /// - /// SQLExpressionLiteral(sql: "1 + 2") - /// SQLExpressionLiteral(sql: "? + ?", arguments: [1, 2]) - /// SQLExpressionLiteral(sql: ":one + :two", arguments: ["one": 1, "two": 2]) - public init(sql: String, arguments: StatementArguments = StatementArguments()) { - self.init(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates an SQL literal expression. - /// - /// SQLExpressionLiteral(literal: SQLLiteral(sql: "1 + 2") - /// SQLExpressionLiteral(literal: SQLLiteral(sql: "? + ?", arguments: [1, 2])) - /// SQLExpressionLiteral(literal: SQLLiteral(sql: ":one + :two", arguments: ["one": 1, "two": 2])) - /// - /// With Swift 5, you can safely embed raw values in your SQL queries, - /// without any risk of syntax errors or SQL injection: - /// - /// SQLExpressionLiteral(literal: "\(1) + \(2)") - public init(literal sqlLiteral: SQLLiteral) { - self.init(unsafeLiteral: sqlLiteral.mapSQL { "(\($0))" }) - } - - /// Creates an SQL literal expression without wrapping the SQL literal - /// inside parentheses. It is unsafe because the result expression can not - /// be safely composed with other expressions. - init(unsafeLiteral sqlLiteral: SQLLiteral) { - self.sqlLiteral = sqlLiteral - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func expressionSQL(_ context: inout SQLGenerationContext) -> String { - if context.append(arguments: sqlLiteral.arguments) == false { - // GRDB limitation: we don't know how to look for `?` in sql and - // replace them with with literals. - fatalError("Not implemented") - } - return sqlLiteral.sql - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return self - } -} - -// MARK: - SQLExpressionUnary - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLUnaryOperator is a SQLite unary operator. -/// -/// :nodoc: -public struct SQLUnaryOperator : Hashable { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The SQL operator - public let sql: String - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// If true GRDB puts a white space between the operator and the operand. - public let needsRightSpace: Bool - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates an unary operator - /// - /// SQLUnaryOperator("~", needsRightSpace: false) - public init(_ sql: String, needsRightSpace: Bool) { - self.sql = sql - self.needsRightSpace = needsRightSpace - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLExpressionUnary is an expression made of an unary operator and -/// an operand expression. -/// -/// :nodoc: -public struct SQLExpressionUnary : SQLExpression { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The unary operator - public let op: SQLUnaryOperator - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The operand - public let expression: SQLExpression - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates an expression made of an unary operator and - /// an operand expression. - /// - /// // NOT favorite - /// SQLExpressionUnary(.not, Column("favorite")) - public init(_ op: SQLUnaryOperator, _ value: SQLExpressible) { - self.op = op - self.expression = value.sqlExpression - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return op.sql + (op.needsRightSpace ? " " : "") + expression.expressionSQL(&context) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionUnary(op, expression.qualifiedExpression(with: alias)) - } -} - -// MARK: - SQLExpressionBinary - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLBinaryOperator is a SQLite binary operator. -/// -/// :nodoc: -public struct SQLBinaryOperator : Hashable { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The SQL operator - public let sql: String - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The SQL for the negated operator, if any - public let negatedSQL: String? - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates a binary operator - /// - /// SQLBinaryOperator("+") - /// SQLBinaryOperator("IS", negated: "IS NOT") - public init(_ sql: String, negated: String? = nil) { - self.sql = sql - self.negatedSQL = negated - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns the negated binary operator, if any - /// - /// let operator = SQLBinaryOperator("IS", negated: "IS NOT") - /// operator.negated!.sql // IS NOT - public var negated: SQLBinaryOperator? { - guard let negatedSQL = negatedSQL else { - return nil - } - return SQLBinaryOperator(negatedSQL, negated: sql) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLExpressionBinary is an expression made of two expressions joined with a -/// binary operator. -/// -/// SQLExpressionBinary(.multiply, Column("length"), Column("width")) -/// -/// :nodoc: -public struct SQLExpressionBinary : SQLExpression { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The left operand - public let lhs: SQLExpression - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The operator - public let op: SQLBinaryOperator - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The right operand - public let rhs: SQLExpression - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates an expression made of two expressions joined with a - /// binary operator. - /// - /// // length * width - /// SQLExpressionBinary(.multiply, Column("length"), Column("width")) - public init(_ op: SQLBinaryOperator, _ lhs: SQLExpressible, _ rhs: SQLExpressible) { - self.lhs = lhs.sqlExpression - self.op = op - self.rhs = rhs.sqlExpression - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return "(" + lhs.expressionSQL(&context) + " " + op.sql + " " + rhs.expressionSQL(&context) + ")" - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public var negated: SQLExpression { - if let negatedOp = op.negated { - return SQLExpressionBinary(negatedOp, lhs, rhs) - } else { - return SQLExpressionNot(self) - } - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionBinary(op, lhs.qualifiedExpression(with: alias), rhs.qualifiedExpression(with: alias)) - } -} - -// MARK: - SQLExpressionAnd - -struct SQLExpressionAnd : SQLExpression { - let expressions: [SQLExpression] - - init(_ expressions: [SQLExpression]) { - self.expressions = expressions - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - guard let first = expressions.first else { - // Ruby [].all? # => true - return true.sqlExpression.expressionSQL(&context) - } - if expressions.count == 1 { - return first.expressionSQL(&context) - } - let expressionSQLs = expressions.map { $0.expressionSQL(&context) } - return "(" + expressionSQLs.joined(separator: " AND ") + ")" - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionAnd(expressions.map { $0.qualifiedExpression(with: alias) }) - } - - func matchedRowIds(rowIdName: String?) -> Set? { - let matchedRowIds = expressions.compactMap { - $0.matchedRowIds(rowIdName: rowIdName) - } - guard let first = matchedRowIds.first else { - return nil - } - return matchedRowIds.suffix(from: 1).reduce(into: first) { $0.formIntersection($1) } - } -} - -// MARK: - SQLExpressionOr - -struct SQLExpressionOr : SQLExpression { - let expressions: [SQLExpression] - - init(_ expressions: [SQLExpression]) { - self.expressions = expressions - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - guard let first = expressions.first else { - // Ruby [].any? # => false - return false.sqlExpression.expressionSQL(&context) - } - if expressions.count == 1 { - return first.expressionSQL(&context) - } - let expressionSQLs = expressions.map { $0.expressionSQL(&context) } - return "(" + expressionSQLs.joined(separator: " OR ") + ")" - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionOr(expressions.map { $0.qualifiedExpression(with: alias) }) - } - - func matchedRowIds(rowIdName: String?) -> Set? { - if expressions.isEmpty { - return [] - } - var result: Set = [] - for expr in expressions { - guard let matchedRowIds = expr.matchedRowIds(rowIdName: rowIdName) else { - return nil - } - result.formUnion(matchedRowIds) - } - return result - } -} - -// MARK: - SQLExpressionEqual - -struct SQLExpressionEqual: SQLExpression { - var lhs: SQLExpression - var rhs: SQLExpression - var op: Operator - - init(_ op: Operator, _ lhs: SQLExpression, _ rhs: SQLExpression) { - self.lhs = lhs - self.rhs = rhs - self.op = op - } - - enum Operator: String { - case equal = "=" - case notEqual = "<>" - case `is` = "IS" - case isNot = "IS NOT" - - var negated: Operator { - switch self { - case .equal: return .notEqual - case .notEqual: return .equal - case .is: return .isNot - case .isNot: return .is - } - } - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return "(" + - lhs.expressionSQL(&context) + - " " + - op.rawValue + - " " + - rhs.expressionSQL(&context) + - ")" - } - - var negated: SQLExpression { - return SQLExpressionEqual(op.negated, lhs, rhs) - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionEqual(op, lhs.qualifiedExpression(with: alias), rhs.qualifiedExpression(with: alias)) - } - - func matchedRowIds(rowIdName: String?) -> Set? { - // FIXME: this implementation ignores column aliases - switch op { - case .equal, .is: - // Look for `id ==/IS 1`, `rowid ==/IS 1`, `1 ==/IS id`, `1 ==/IS rowid` - func matchedRowIds(column: ColumnExpression, dbValue: DatabaseValue) -> Set? { - var rowIdNames = [Column.rowID.name.lowercased()] - if let rowIdName = rowIdName { - rowIdNames.append(rowIdName.lowercased()) - } - guard rowIdNames.contains(column.name.lowercased()) else { - return nil - } - if let rowId = Int64.fromDatabaseValue(dbValue) { - return [rowId] - } else { - return [] - } - } - switch (lhs, rhs) { - case (let column as ColumnExpression, let dbValue as DatabaseValue): - return matchedRowIds(column: column, dbValue: dbValue) - case (let dbValue as DatabaseValue, let column as ColumnExpression): - return matchedRowIds(column: column, dbValue: dbValue) - default: - return nil - } - - case .notEqual, .isNot: - return nil - } - } -} - -// MARK: - SQLExpressionContains - -/// SQLExpressionContains is an expression that checks the inclusion of a -/// value in a collection with the `IN` operator. -/// -/// // id IN (1,2,3) -/// SQLExpressionContains(Column("id"), SQLExpressionsArray([1,2,3])) -struct SQLExpressionContains : SQLExpression { - let expression: SQLExpression - let collection: SQLCollection - let isNegated: Bool - - init(_ value: SQLExpressible, _ collection: SQLCollection, negated: Bool = false) { - self.expression = value.sqlExpression - self.collection = collection - self.isNegated = negated - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return "(" + - expression.expressionSQL(&context) + - (isNegated ? " NOT IN (" : " IN (") + - collection.collectionSQL(&context) + - "))" - } - - var negated: SQLExpression { - return SQLExpressionContains(expression, collection, negated: !isNegated) - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionContains(expression.qualifiedExpression(with: alias), collection, negated: isNegated) - } - - func matchedRowIds(rowIdName: String?) -> Set? { - // FIXME: this implementation ignores column aliases - // Look for `id IN (1, 2, 3)` - guard let column = expression as? ColumnExpression, - let array = collection as? SQLExpressionsArray else - { - return nil - } - - var rowIdNames = [Column.rowID.name.lowercased()] - if let rowIdName = rowIdName { - rowIdNames.append(rowIdName.lowercased()) - } - - guard rowIdNames.contains(column.name.lowercased()) else { - return nil - } - - var rowIDs: Set = [] - for expression in array.expressions { - guard let dbValue = expression as? DatabaseValue else { return nil } - if let rowId = Int64.fromDatabaseValue(dbValue) { - rowIDs.insert(rowId) - } - } - return rowIDs - } -} - -// MARK: - SQLExpressionBetween - -/// SQLExpressionBetween is an expression that checks if a values is included -/// in a range with the `BETWEEN` operator. -/// -/// // id BETWEEN 1 AND 3 -/// SQLExpressionBetween(Column("id"), 1.databaseValue, 3.databaseValue) -struct SQLExpressionBetween : SQLExpression { - let expression: SQLExpression - let lowerBound: SQLExpression - let upperBound: SQLExpression - let isNegated: Bool - - init(_ expression: SQLExpression, _ lowerBound: SQLExpression, _ upperBound: SQLExpression, negated: Bool = false) { - self.expression = expression - self.lowerBound = lowerBound - self.upperBound = upperBound - self.isNegated = negated - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return "(" + - expression.expressionSQL(&context) + - (isNegated ? " NOT BETWEEN " : " BETWEEN ") + - lowerBound.expressionSQL(&context) + - " AND " + - upperBound.expressionSQL(&context) + - ")" - } - - var negated: SQLExpression { - return SQLExpressionBetween(expression, lowerBound, upperBound, negated: !isNegated) - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionBetween( - expression.qualifiedExpression(with: alias), - lowerBound.qualifiedExpression(with: alias), - upperBound.qualifiedExpression(with: alias), - negated: isNegated) - } -} - -// MARK: - SQLExpressionFunction - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLFunctionName is an SQL function name. -public struct SQLFunctionName : Hashable { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The SQL function name - /// - /// :nodoc: - public var sql: String - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates a function name - /// - /// SQLFunctionName("ABS") - /// - /// :nodoc: - public init(_ sql: String) { - self.sql = sql - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLExpressionFunction is an SQL function call. -/// -/// // ABS(-1) -/// SQLExpressionFunction(.abs, [-1.databaseValue]) -/// -/// :nodoc: -public struct SQLExpressionFunction : SQLExpression { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The function name - public let functionName: SQLFunctionName - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The function arguments - public let arguments: [SQLExpression] - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates an SQL function call - /// - /// // ABS(-1) - /// SQLExpressionFunction(.abs, arguments: [-1.databaseValue]) - public init(_ functionName: SQLFunctionName, arguments: [SQLExpression]) { - self.functionName = functionName - self.arguments = arguments - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Creates an SQL function call - /// - /// // ABS(-1) - /// SQLExpressionFunction(.abs, arguments: -1) - public init(_ functionName: SQLFunctionName, arguments: SQLExpressible...) { - self.init(functionName, arguments: arguments.map { $0.sqlExpression }) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return functionName.sql + "(" + (self.arguments.map { $0.expressionSQL(&context) } as [String]).joined(separator: ", ") + ")" - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionFunction(functionName, arguments: arguments.map { $0.qualifiedExpression(with: alias) }) - } -} - -// MARK: - SQLExpressionCount - -/// SQLExpressionCount is a call to the SQL `COUNT` function. -/// -/// // COUNT(name) -/// SQLExpressionCount(Column("name")) -struct SQLExpressionCount : SQLExpression { - /// The counted value - let counted: SQLSelectable - - init(_ counted: SQLSelectable) { - self.counted = counted - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return "COUNT(" + counted.countedSQL(&context) + ")" - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionCount(counted.qualifiedSelectable(with: alias)) - } -} - -// MARK: - SQLExpressionCountDistinct - -/// SQLExpressionCountDistinct is a call to the SQL `COUNT(DISTINCT ...)` function. -/// -/// // COUNT(DISTINCT name) -/// SQLExpressionCountDistinct(Column("name")) -struct SQLExpressionCountDistinct : SQLExpression { - let counted: SQLExpression - - init(_ counted: SQLExpression) { - self.counted = counted - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return "COUNT(DISTINCT " + counted.expressionSQL(&context) + ")" - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionCountDistinct(counted.qualifiedExpression(with: alias)) - } -} - -// MARK: - SQLExpressionIsEmpty - -/// This one helps generating `COUNT(...) = 0` or `COUNT(...) > 0` while letting -/// the user using the not `!` logical operator, or comparisons with booleans -/// such as `== true` or `== false`. -struct SQLExpressionIsEmpty : SQLExpression { - var countExpression: SQLExpression - var isEmpty: Bool - - // countExpression should be a counting expression - init(_ countExpression: SQLExpression, isEmpty: Bool = true) { - self.countExpression = countExpression - self.isEmpty = isEmpty - } - - var negated: SQLExpression { - return SQLExpressionIsEmpty(countExpression, isEmpty: !isEmpty) - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - if isEmpty { - return "(" + countExpression.expressionSQL(&context) + " = 0)" - } else { - return "(" + countExpression.expressionSQL(&context) + " > 0)" - } - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionIsEmpty(countExpression.qualifiedExpression(with: alias), isEmpty: isEmpty) - } -} - -// MARK: - TableMatchExpression - -struct TableMatchExpression: SQLExpression { - var alias: TableAlias - var pattern: SQLExpression - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return "(" + context.resolvedName(for: alias).quotedDatabaseIdentifier + " MATCH " + pattern.expressionSQL(&context) + ")" - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return TableMatchExpression( - alias: self.alias, - pattern: pattern.qualifiedExpression(with: alias)) - } -} - -// MARK: - SQLExpressionCollate - -/// SQLExpressionCollate is an expression tainted by an SQLite collation. -/// -/// // email = 'arthur@example.com' COLLATE NOCASE -/// SQLExpressionCollate(Column("email") == "arthur@example.com", "NOCASE") -struct SQLExpressionCollate : SQLExpression { - let expression: SQLExpression - let collationName: Database.CollationName - - init(_ expression: SQLExpression, collationName: Database.CollationName) { - self.expression = expression - self.collationName = collationName - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - let sql = expression.expressionSQL(&context) - if sql.last! == ")" { - return String(sql.prefix(upTo: sql.index(sql.endIndex, offsetBy: -1))) + " COLLATE " + collationName.rawValue + ")" - } else { - return sql + " COLLATE " + collationName.rawValue - } - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionCollate(expression.qualifiedExpression(with: alias), collationName: collationName) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpression.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpression.swift deleted file mode 100755 index ff235ed..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLExpression.swift +++ /dev/null @@ -1,147 +0,0 @@ -// MARK: - SQLExpression - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLExpression is the protocol for types that represent an SQL expression, as -/// described at https://www.sqlite.org/lang_expr.html -/// -/// GRDB ships with a variety of types that already adopt this protocol, and -/// allow to represent many SQLite expressions: -/// -/// - Column -/// - DatabaseValue -/// - SQLExpressionLiteral -/// - SQLExpressionUnary -/// - SQLExpressionBinary -/// - SQLExpressionExists -/// - SQLExpressionFunction -/// - SQLExpressionCollate -/// -/// :nodoc: -public protocol SQLExpression : SQLSpecificExpressible, SQLSelectable, SQLOrderingTerm { - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns an SQL string that represents the expression. - func expressionSQL(_ context: inout SQLGenerationContext) -> String - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns the expression, negated. This property fuels the `!` operator. - /// - /// The default implementation returns the expression prefixed by `NOT`. - /// - /// let column = Column("favorite") - /// column.negated // NOT favorite - /// - /// Some expressions may provide a custom implementation that returns a - /// more natural SQL expression. - /// - /// let expression = [1,2,3].contains(Column("id")) // id IN (1,2,3) - /// expression.negated // id NOT IN (1,2,3) - var negated: SQLExpression { get } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns the rowIds matched by the expression. - func matchedRowIds(rowIdName: String?) -> Set? // FIXME: this method should take TableAlias in account - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - func qualifiedExpression(with alias: TableAlias) -> SQLExpression -} - -extension SQLExpression { - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The default implementation returns the expression prefixed by `NOT`. - /// - /// let column = Column("favorite") - /// column.negated // NOT favorite - /// - /// :nodoc: - public var negated: SQLExpression { - return SQLExpressionNot(self) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The default implementation returns nil - /// - /// :nodoc: - public func matchedRowIds(rowIdName: String?) -> Set? { - return nil - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The default implementation returns qualifiedExpression(with:) - /// - /// :nodoc: - public func qualifiedSelectable(with alias: TableAlias) -> SQLSelectable { - return qualifiedExpression(with: alias) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The default implementation returns qualifiedExpression(with:) - /// - /// :nodoc: - public func qualifiedOrdering(with alias: TableAlias) -> SQLOrderingTerm { - return qualifiedExpression(with: alias) - } -} - -// SQLExpression: SQLExpressible - -extension SQLExpression { - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public var sqlExpression: SQLExpression { - return self - } -} - -// SQLExpression: SQLSelectable - -extension SQLExpression { - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func count(distinct: Bool) -> SQLCount? { - if distinct { - // SELECT DISTINCT expr FROM tableName ... - // -> - // SELECT COUNT(DISTINCT expr) FROM tableName ... - return .distinct(self) - } else { - // SELECT expr FROM tableName ... - // -> - // SELECT COUNT(*) FROM tableName ... - return .all - } - } -} - -// MARK: - SQLExpressionNot - -struct SQLExpressionNot : SQLExpression { - let expression: SQLExpression - - init(_ expression: SQLExpression) { - self.expression = expression - } - - func expressionSQL(_ context: inout SQLGenerationContext) -> String { - return "NOT \(expression.expressionSQL(&context))" - } - - var negated: SQLExpression { - return expression - } - - func qualifiedExpression(with alias: TableAlias) -> SQLExpression { - return SQLExpressionNot(expression.qualifiedExpression(with: alias)) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLForeignKeyRequest.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLForeignKeyRequest.swift deleted file mode 100755 index 8514256..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLForeignKeyRequest.swift +++ /dev/null @@ -1,80 +0,0 @@ -/// SQLForeignKeyRequest looks for the foreign keys associations need to -/// join tables. -/// -/// Mappings come from foreign keys, when they exist in the database schema. -/// -/// When the schema does not define any foreign key, we can still infer complete -/// mappings from partial information and primary keys. -struct SQLForeignKeyRequest: Equatable { - let originTable: String - let destinationTable: String - let originColumns: [String]? - let destinationColumns: [String]? - - init(originTable: String, destinationTable: String, foreignKey: ForeignKey?) { - self.originTable = originTable - self.destinationTable = destinationTable - - self.originColumns = foreignKey?.originColumns - self.destinationColumns = foreignKey?.destinationColumns - } - - /// The (origin, destination) column pairs that join a left table to a right table. - func fetchMapping(_ db: Database) throws -> [(origin: String, destination: String)] { - if let originColumns = originColumns, let destinationColumns = destinationColumns { - // Total information: no need to query the database schema. - GRDBPrecondition(originColumns.count == destinationColumns.count, "Number of columns don't match") - let mapping = zip(originColumns, destinationColumns).map { - (origin: $0, destination: $1) - } - return mapping - } - - // Incomplete information: let's look for schema foreign keys - let foreignKeys = try db.foreignKeys(on: originTable).filter { foreignKey in - if destinationTable.lowercased() != foreignKey.destinationTable.lowercased() { - return false - } - if let originColumns = originColumns { - let originColumns = Set(originColumns.lazy.map { $0.lowercased() }) - let foreignKeyColumns = Set(foreignKey.mapping.lazy.map { $0.origin.lowercased() }) - if originColumns != foreignKeyColumns { - return false - } - } - if let destinationColumns = destinationColumns { - // TODO: test - let destinationColumns = Set(destinationColumns.lazy.map { $0.lowercased() }) - let foreignKeyColumns = Set(foreignKey.mapping.lazy.map { $0.destination.lowercased() }) - if destinationColumns != foreignKeyColumns { - return false - } - } - return true - } - - // Matching foreign key(s) found - if let foreignKey = foreignKeys.first { - if foreignKeys.count == 1 { - // Non-ambiguous - return foreignKey.mapping - } else { - // Ambiguous: can't choose - fatalError("Ambiguous foreign key from \(originTable) to \(destinationTable)") - } - } - - // No matching foreign key found: use the destination primary key - if let originColumns = originColumns { - let destinationColumns = try db.primaryKey(destinationTable).columns - if (originColumns.count == destinationColumns.count) { - let mapping = zip(originColumns, destinationColumns).map { - (origin: $0, destination: $1) - } - return mapping - } - } - - fatalError("Could not infer foreign key from \(originTable) to \(destinationTable)") - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLFunctions.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLFunctions.swift deleted file mode 100755 index e61af72..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLFunctions.swift +++ /dev/null @@ -1,217 +0,0 @@ -// MARK: - Custom Functions - -extension DatabaseFunction { - // TODO: rename call (https://forums.swift.org/t/se-0253-callable-values-of-user-defined-nominal-types/24177) - /// Returns an SQL expression that applies the function. - /// - /// See https://github.com/groue/GRDB.swift/#sql-functions - public func apply(_ arguments: SQLExpressible...) -> SQLExpression { - return SQLExpressionFunction(SQLFunctionName(name), arguments: arguments.map { $0.sqlExpression }) - } -} - - -// MARK: - ABS(...) - -extension SQLFunctionName { - /// The `ABS` function name - public static let abs = SQLFunctionName("ABS") -} - -/// Returns an expression that evaluates the `ABS` SQL function. -/// -/// // ABS(amount) -/// abs(Column("amount")) -public func abs(_ value: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionFunction(.abs, arguments: value) -} - - -// MARK: - AVG(...) - -extension SQLFunctionName { - /// The `AVG` function name - public static let avg = SQLFunctionName("AVG") -} - -/// Returns an expression that evaluates the `AVG` SQL function. -/// -/// // AVG(length) -/// average(Column("length")) -public func average(_ value: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionFunction(.avg, arguments: value) -} - - -// MARK: - COUNT(...) - -/// Returns an expression that evaluates the `COUNT` SQL function. -/// -/// // COUNT(email) -/// count(Column("email")) -public func count(_ counted: SQLSelectable) -> SQLExpression { - return SQLExpressionCount(counted) -} - - -// MARK: - COUNT(DISTINCT ...) - -/// Returns an expression that evaluates the `COUNT(DISTINCT)` SQL function. -/// -/// // COUNT(DISTINCT email) -/// count(distinct: Column("email")) -public func count(distinct value: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionCountDistinct(value.sqlExpression) -} - - -// MARK: - IFNULL(...) - -extension SQLFunctionName { - /// The `IFNULL` function name - public static let ifNull = SQLFunctionName("IFNULL") -} - -/// Returns an expression that evaluates the `IFNULL` SQL function. -/// -/// // IFNULL(name, 'Anonymous') -/// Column("name") ?? "Anonymous" -public func ?? (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionFunction(.ifNull, arguments: lhs, rhs) -} - - -// MARK: - LENGTH(...) - -extension SQLFunctionName { - /// The `LENGTH` function name - public static let length = SQLFunctionName("LENGTH") -} - -/// Returns an expression that evaluates the `LENGTH` SQL function. -/// -/// // LENGTH(name) -/// length(Column("name")) -public func length(_ value: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionFunction(.length, arguments: value) -} - - -// MARK: - MAX(...) - -extension SQLFunctionName { - /// The `MAX` function name - public static let max = SQLFunctionName("MAX") -} - -/// Returns an expression that evaluates the `MAX` SQL function. -/// -/// // MAX(score) -/// max(Column("score")) -public func max(_ value: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionFunction(.max, arguments: value) -} - - -// MARK: - MIN(...) - -extension SQLFunctionName { - /// The `MIN` function name - public static let min = SQLFunctionName("MIN") -} - -/// Returns an expression that evaluates the `MIN` SQL function. -/// -/// // MIN(score) -/// min(Column("score")) -public func min(_ value: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionFunction(.min, arguments: value) -} - - -// MARK: - SUM(...) - -extension SQLFunctionName { - /// The `SUM` function name - public static let sum = SQLFunctionName("SUM") -} - -/// Returns an expression that evaluates the `SUM` SQL function. -/// -/// // SUM(amount) -/// sum(Column("amount")) -public func sum(_ value: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionFunction(.sum, arguments: value) -} - - -// MARK: - Swift String functions - -/// :nodoc: -extension SQLSpecificExpressible { - /// Returns an SQL expression that applies the Swift's built-in - /// capitalized String property. It is NULL for non-String arguments. - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.capitalized) - /// let names = try String.fetchAll(dbQueue, request) // [String] - public var capitalized: SQLExpression { - return DatabaseFunction.capitalize.apply(sqlExpression) - } - - /// Returns an SQL expression that applies the Swift's built-in - /// lowercased String property. It is NULL for non-String arguments. - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.lowercased()) - /// let names = try String.fetchAll(dbQueue, request) // [String] - public var lowercased: SQLExpression { - return DatabaseFunction.lowercase.apply(sqlExpression) - } - - /// Returns an SQL expression that applies the Swift's built-in - /// uppercased String property. It is NULL for non-String arguments. - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.uppercased()) - /// let names = try String.fetchAll(dbQueue, request) // [String] - public var uppercased: SQLExpression { - return DatabaseFunction.uppercase.apply(sqlExpression) - } -} - -/// :nodoc: -extension SQLSpecificExpressible { - /// Returns an SQL expression that applies the Swift's built-in - /// localizedCapitalized String property. It is NULL for non-String arguments. - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.localizedCapitalized) - /// let names = try String.fetchAll(dbQueue, request) // [String] - @available(OSX 10.11, watchOS 3.0, *) - public var localizedCapitalized: SQLExpression { - return DatabaseFunction.localizedCapitalize.apply(sqlExpression) - } - - /// Returns an SQL expression that applies the Swift's built-in - /// localizedLowercased String property. It is NULL for non-String arguments. - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.localizedLowercased) - /// let names = try String.fetchAll(dbQueue, request) // [String] - @available(OSX 10.11, watchOS 3.0, *) - public var localizedLowercased: SQLExpression { - return DatabaseFunction.localizedLowercase.apply(sqlExpression) - } - - /// Returns an SQL expression that applies the Swift's built-in - /// localizedUppercased String property. It is NULL for non-String arguments. - /// - /// let nameColumn = Column("name") - /// let request = Player.select(nameColumn.localizedUppercased) - /// let names = try String.fetchAll(dbQueue, request) // [String] - @available(OSX 10.11, watchOS 3.0, *) - public var localizedUppercased: SQLExpression { - return DatabaseFunction.localizedUppercase.apply(sqlExpression) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLOperators.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLOperators.swift deleted file mode 100755 index 8ff7c99..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLOperators.swift +++ /dev/null @@ -1,810 +0,0 @@ -// MARK: - Egality and Identity Operators (=, <>, IS, IS NOT) - -// Outputs "x = y" or "x IS NULL" -private func isEqual(_ lhs: SQLExpression, _ rhs: SQLExpression) -> SQLExpression { - switch (lhs, rhs) { - case (let lhs, let rhs as DatabaseValue): - switch rhs.storage { - case .null: - return SQLExpressionEqual(.is, lhs, rhs) - default: - return SQLExpressionEqual(.equal, lhs, rhs) - } - case (let lhs as DatabaseValue, let rhs): - switch lhs.storage { - case .null: - return SQLExpressionEqual(.is, rhs, lhs) - default: - return SQLExpressionEqual(.equal, lhs, rhs) - } - default: - return SQLExpressionEqual(.equal, lhs, rhs) - } -} - -/// An SQL expression that compares two expressions with the `=` SQL operator. -/// -/// // name = 'Arthur' -/// Column("name") == "Arthur" -/// -/// When the right operand is nil, `IS NULL` is used instead. -/// -/// // name IS NULL -/// Column("name") == nil -public func == (lhs: SQLSpecificExpressible, rhs: SQLExpressible?) -> SQLExpression { - return isEqual(lhs.sqlExpression, rhs?.sqlExpression ?? DatabaseValue.null) -} - -/// An SQL expression that compares two expressions with the `=` SQL operator. -/// -/// // name = 'Arthur' COLLATE NOCASE -/// Column("name").collating(.nocase) == "Arthur" -/// -/// When the right operand is nil, `IS NULL` is used instead. -/// -/// // name IS NULL -/// Column("name").collating(.nocase) == nil -public func == (lhs: SQLCollatedExpression, rhs: SQLExpressible?) -> SQLExpression { - return SQLExpressionCollate(lhs.expression == rhs, collationName: lhs.collationName) -} - -/// An SQL expression that checks the boolean value of an expression. -/// -/// The comparison is done with the built-in boolean evaluation of SQLite: -/// -/// // validated -/// Column("validated") == true -/// -/// // NOT validated -/// Column("validated") == false -public func == (lhs: SQLSpecificExpressible, rhs: Bool) -> SQLExpression { - if rhs { - return lhs.sqlExpression - } else { - return lhs.sqlExpression.negated - } -} - -/// An SQL expression that compares two expressions with the `=` SQL operator. -/// -/// // 'Arthur' = name -/// "Arthur" == Column("name") -/// -/// When the left operand is nil, `IS NULL` is used instead. -/// -/// // name IS NULL -/// nil == Column("name") -public func == (lhs: SQLExpressible?, rhs: SQLSpecificExpressible) -> SQLExpression { - return isEqual(lhs?.sqlExpression ?? DatabaseValue.null, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `=` SQL operator. -/// -/// // 'Arthur' = name COLLATE NOCASE -/// "Arthur" == Column("name").collating(.nocase) -/// -/// When the left operand is nil, `IS NULL` is used instead. -/// -/// // name IS NULL -/// nil == Column("name").collating(.nocase) -public func == (lhs: SQLExpressible?, rhs: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(lhs == rhs.expression, collationName: rhs.collationName) -} - -/// An SQL expression that checks the boolean value of an expression. -/// -/// The comparison is done with the built-in boolean evaluation of SQLite: -/// -/// // validated -/// true == Column("validated") -/// -/// // NOT validated -/// false == Column("validated") -public func == (lhs: Bool, rhs: SQLSpecificExpressible) -> SQLExpression { - if lhs { - return rhs.sqlExpression - } else { - return rhs.sqlExpression.negated - } -} - -/// An SQL expression that compares two expressions with the `=` SQL operator. -/// -/// // email = login -/// Column("email") == Column("login") -public func == (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return isEqual(lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `<>` SQL operator. -/// -/// // name <> 'Arthur' -/// Column("name") != "Arthur" -/// -/// When the right operand is nil, `IS NOT NULL` is used instead. -/// -/// // name IS NOT NULL -/// Column("name") != nil -public func != (lhs: SQLSpecificExpressible, rhs: SQLExpressible?) -> SQLExpression { - return isEqual(lhs.sqlExpression, rhs?.sqlExpression ?? DatabaseValue.null).negated -} - -/// An SQL expression that compares two expressions with the `<>` SQL operator. -/// -/// // name <> 'Arthur' COLLATE NOCASE -/// Column("name").collating(.nocase) != "Arthur" -/// -/// When the right operand is nil, `IS NOT NULL` is used instead. -/// -/// // name IS NOT NULL -/// Column("name").collating(.nocase) != nil -public func != (lhs: SQLCollatedExpression, rhs: SQLExpressible?) -> SQLExpression { - return SQLExpressionCollate(lhs.expression != rhs, collationName: lhs.collationName) -} - -/// An SQL expression that checks the boolean value of an expression. -/// -/// The comparison is done with the built-in boolean evaluation of SQLite: -/// -/// // NOT validated -/// Column("validated") != true -/// -/// // validated -/// Column("validated") != false -public func != (lhs: SQLSpecificExpressible, rhs: Bool) -> SQLExpression { - if rhs { - return lhs.sqlExpression.negated - } else { - return lhs.sqlExpression - } -} - -/// An SQL expression that compares two expressions with the `<>` SQL operator. -/// -/// // 'Arthur' <> name -/// "Arthur" != Column("name") -/// -/// When the left operand is nil, `IS NOT NULL` is used instead. -/// -/// // name IS NOT NULL -/// nil != Column("name") -public func != (lhs: SQLExpressible?, rhs: SQLSpecificExpressible) -> SQLExpression { - return isEqual(lhs?.sqlExpression ?? DatabaseValue.null, rhs.sqlExpression).negated -} - -/// An SQL expression that compares two expressions with the `<>` SQL operator. -/// -/// // 'Arthur' <> name COLLATE NOCASE -/// "Arthur" != Column("name").collating(.nocase) -/// -/// When the left operand is nil, `IS NOT NULL` is used instead. -/// -/// // name IS NOT NULL -/// nil != Column("name").collating(.nocase) -public func != (lhs: SQLExpressible?, rhs: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(lhs != rhs.expression, collationName: rhs.collationName) -} - -/// An SQL expression that checks the boolean value of an expression. -/// -/// The comparison is done with the built-in boolean evaluation of SQLite: -/// -/// // NOT validated -/// true != Column("validated") -/// -/// // validated -/// false != Column("validated") -public func != (lhs: Bool, rhs: SQLSpecificExpressible) -> SQLExpression { - if lhs { - return rhs.sqlExpression.negated - } else { - return rhs.sqlExpression - } -} - -/// An SQL expression that compares two expressions with the `<>` SQL operator. -/// -/// // email <> login -/// Column("email") != Column("login") -public func != (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return isEqual(lhs.sqlExpression, rhs.sqlExpression).negated -} - -/// An SQL expression that compares two expressions with the `IS` SQL operator. -/// -/// // name IS 'Arthur' -/// Column("name") === "Arthur" -public func === (lhs: SQLSpecificExpressible, rhs: SQLExpressible?) -> SQLExpression { - return SQLExpressionEqual(.is, lhs.sqlExpression, rhs?.sqlExpression ?? DatabaseValue.null) -} - -/// An SQL expression that compares two expressions with the `IS` SQL operator. -/// -/// // name IS 'Arthur' COLLATE NOCASE -/// Column("name").collating(.nocase) === "Arthur" -public func === (lhs: SQLCollatedExpression, rhs: SQLExpressible?) -> SQLExpression { - return SQLExpressionCollate(lhs.expression === rhs, collationName: lhs.collationName) -} - -/// An SQL expression that compares two expressions with the `IS` SQL operator. -/// -/// // name IS 'Arthur' -/// "Arthur" === Column("name") -public func === (lhs: SQLExpressible?, rhs: SQLSpecificExpressible) -> SQLExpression { - if let lhs = lhs { - return SQLExpressionEqual(.is, lhs.sqlExpression, rhs.sqlExpression) - } else { - return SQLExpressionEqual(.is, rhs.sqlExpression, DatabaseValue.null) - } -} - -/// An SQL expression that compares two expressions with the `IS` SQL operator. -/// -/// // name IS 'Arthur' COLLATE NOCASE -/// "Arthur" === Column("name").collating(.nocase) -public func === (lhs: SQLExpressible?, rhs: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(lhs === rhs.expression, collationName: rhs.collationName) -} - -/// An SQL expression that compares two expressions with the `IS` SQL operator. -/// -/// // email IS login -/// Column("email") === Column("login") -public func === (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionEqual(.is, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `IS NOT` SQL operator. -/// -/// // name IS NOT 'Arthur' -/// Column("name") !== "Arthur" -public func !== (lhs: SQLSpecificExpressible, rhs: SQLExpressible?) -> SQLExpression { - return SQLExpressionEqual(.isNot, lhs.sqlExpression, rhs?.sqlExpression ?? DatabaseValue.null) -} - -/// An SQL expression that compares two expressions with the `IS NOT` SQL operator. -/// -/// // name IS NOT 'Arthur' COLLATE NOCASE -/// Column("name").collating(.nocase) !== "Arthur" -public func !== (lhs: SQLCollatedExpression, rhs: SQLExpressible?) -> SQLExpression { - return SQLExpressionCollate(lhs.expression !== rhs, collationName: lhs.collationName) -} - -/// An SQL expression that compares two expressions with the `IS NOT` SQL operator. -/// -/// // name IS NOT 'Arthur' -/// "Arthur" !== Column("name") -public func !== (lhs: SQLExpressible?, rhs: SQLSpecificExpressible) -> SQLExpression { - if let lhs = lhs { - return SQLExpressionEqual(.isNot, lhs.sqlExpression, rhs.sqlExpression) - } else { - return SQLExpressionEqual(.isNot, rhs.sqlExpression, DatabaseValue.null) - } -} - -/// An SQL expression that compares two expressions with the `IS NOT` SQL operator. -/// -/// // name IS NOT 'Arthur' COLLATE NOCASE -/// "Arthur" !== Column("name").collating(.nocase) -public func !== (lhs: SQLExpressible?, rhs: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(lhs !== rhs.expression, collationName: rhs.collationName) -} - -/// An SQL expression that compares two expressions with the `IS NOT` SQL operator. -/// -/// // email IS NOT login -/// Column("email") !== Column("login") -public func !== (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionEqual(.isNot, lhs.sqlExpression, rhs.sqlExpression) -} - - -// MARK: - Comparison Operators (<, >, <=, >=) - -extension SQLBinaryOperator { - /// The `<` binary operator - static let lessThan = SQLBinaryOperator("<") - - /// The `<=` binary operator - static let lessThanOrEqual = SQLBinaryOperator("<=") - - /// The `>` binary operator - static let greaterThan = SQLBinaryOperator(">") - - /// The `>=` binary operator - static let greaterThanOrEqual = SQLBinaryOperator(">=") -} - -/// An SQL expression that compares two expressions with the `<` SQL operator. -/// -/// // score < 18 -/// Column("score") < 18 -public func < (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionBinary(.lessThan, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `<` SQL operator. -/// -/// // name < 'Arthur' COLLATE NOCASE -/// Column("name").collating(.nocase) < "Arthur" -public func < (lhs: SQLCollatedExpression, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionCollate(lhs.expression < rhs, collationName: lhs.collationName) -} - -/// An SQL expression that compares two expressions with the `<` SQL operator. -/// -/// // 18 < score -/// 18 < Column("score") -public func < (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.lessThan, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `<` SQL operator. -/// -/// // 'Arthur' < name COLLATE NOCASE -/// "Arthur" < Column("name").collating(.nocase) -public func < (lhs: SQLExpressible, rhs: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(lhs < rhs.expression, collationName: rhs.collationName) -} - -/// An SQL expression that compares two expressions with the `<` SQL operator. -/// -/// // width < height -/// Column("width") < Column("height") -public func < (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.lessThan, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `<=` SQL operator. -/// -/// // score <= 18 -/// Column("score") <= 18 -public func <= (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionBinary(.lessThanOrEqual, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `<=` SQL operator. -/// -/// // name <= 'Arthur' COLLATE NOCASE -/// Column("name").collating(.nocase) <= "Arthur" -public func <= (lhs: SQLCollatedExpression, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionCollate(lhs.expression <= rhs, collationName: lhs.collationName) -} - -/// An SQL expression that compares two expressions with the `<=` SQL operator. -/// -/// // 18 <= score -/// 18 <= Column("score") -public func <= (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.lessThanOrEqual, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `<=` SQL operator. -/// -/// // 'Arthur' <= name COLLATE NOCASE -/// "Arthur" <= Column("name").collating(.nocase) -public func <= (lhs: SQLExpressible, rhs: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(lhs <= rhs.expression, collationName: rhs.collationName) -} - -/// An SQL expression that compares two expressions with the `<=` SQL operator. -/// -/// // width <= height -/// Column("width") <= Column("height") -public func <= (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.lessThanOrEqual, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `>` SQL operator. -/// -/// // score > 18 -/// Column("score") > 18 -public func > (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionBinary(.greaterThan, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `>` SQL operator. -/// -/// // name > 'Arthur' COLLATE NOCASE -/// Column("name").collating(.nocase) > "Arthur" -public func > (lhs: SQLCollatedExpression, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionCollate(lhs.expression > rhs, collationName: lhs.collationName) -} - -/// An SQL expression that compares two expressions with the `>` SQL operator. -/// -/// // 18 > score -/// 18 > Column("score") -public func > (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.greaterThan, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `>` SQL operator. -/// -/// // 'Arthur' > name COLLATE NOCASE -/// "Arthur" > Column("name").collating(.nocase) -public func > (lhs: SQLExpressible, rhs: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(lhs > rhs.expression, collationName: rhs.collationName) -} - -/// An SQL expression that compares two expressions with the `>` SQL operator. -/// -/// // width > height -/// Column("width") > Column("height") -public func > (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.greaterThan, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `>=` SQL operator. -/// -/// // score >= 18 -/// Column("score") >= 18 -public func >= (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionBinary(.greaterThanOrEqual, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `>=` SQL operator. -/// -/// // name >= 'Arthur' COLLATE NOCASE -/// Column("name").collating(.nocase) >= "Arthur" -public func >= (lhs: SQLCollatedExpression, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionCollate(lhs.expression >= rhs, collationName: lhs.collationName) -} - -/// An SQL expression that compares two expressions with the `>=` SQL operator. -/// -/// // 18 >= score -/// 18 >= Column("score") -public func >= (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.greaterThanOrEqual, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL expression that compares two expressions with the `>=` SQL operator. -/// -/// // 'Arthur' >= name COLLATE NOCASE -/// "Arthur" >= Column("name").collating(.nocase) -public func >= (lhs: SQLExpressible, rhs: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(lhs >= rhs.expression, collationName: rhs.collationName) -} - -/// An SQL expression that compares two expressions with the `>=` SQL operator. -/// -/// // width >= height -/// Column("width") >= Column("height") -public func >= (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.greaterThanOrEqual, lhs.sqlExpression, rhs.sqlExpression) -} - - -// MARK: - Inclusion Operators (BETWEEN, IN) - -extension Range where Bound: SQLExpressible { - /// An SQL expression that checks the inclusion of an expression in a range. - /// - /// // email >= 'A' AND email < 'B' - /// ("A"..<"B").contains(Column("email")) - public func contains(_ element: SQLSpecificExpressible) -> SQLExpression { - return (element >= lowerBound) && (element < upperBound) - } - - /// An SQL expression that checks the inclusion of an expression in a range. - /// - /// // email >= 'A' COLLATE NOCASE AND email < 'B' COLLATE NOCASE - /// ("A"..<"B").contains(Column("email").collating(.nocase)) - public func contains(_ element: SQLCollatedExpression) -> SQLExpression { - return (element >= lowerBound) && (element < upperBound) - } -} - -extension ClosedRange where Bound: SQLExpressible { - /// An SQL expression that checks the inclusion of an expression in a range. - /// - /// // email BETWEEN 'A' AND 'B' - /// ("A"..."B").contains(Column("email")) - public func contains(_ element: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBetween(element.sqlExpression, lowerBound.sqlExpression, upperBound.sqlExpression) - } - - /// An SQL expression that checks the inclusion of an expression in a range. - /// - /// // email BETWEEN 'A' AND 'B' COLLATE NOCASE - /// ("A"..."B").contains(Column("email").collating(.nocase)) - public func contains(_ element: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(contains(element.expression), collationName: element.collationName) - } -} - -extension CountableRange where Bound: SQLExpressible { - /// An SQL expression that checks the inclusion of an expression in a range. - /// - /// // id BETWEEN 1 AND 9 - /// (1..<10).contains(Column("id")) - public func contains(_ element: SQLSpecificExpressible) -> SQLExpression { - return (element >= lowerBound) && (element < upperBound) - } -} - -extension CountableClosedRange where Bound: SQLExpressible { - /// An SQL expression that checks the inclusion of an expression in a range. - /// - /// // id BETWEEN 1 AND 10 - /// (1...10).contains(Column("id")) - public func contains(_ element: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBetween(element.sqlExpression, lowerBound.sqlExpression, upperBound.sqlExpression) - } -} - -extension Sequence where Self.Iterator.Element: SQLExpressible { - /// An SQL expression that checks the inclusion of an expression in - /// a sequence. - /// - /// // id IN (1,2,3) - /// [1, 2, 3].contains(Column("id")) - public func contains(_ element: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionsArray(self).contains(element.sqlExpression) - } - - /// An SQL expression that checks the inclusion of an expression in - /// a sequence. - /// - /// // name IN ('A', 'B') COLLATE NOCASE - /// ["A", "B"].contains(Column("name").collating(.nocase)) - public func contains(_ element: SQLCollatedExpression) -> SQLExpression { - return SQLExpressionCollate(contains(element.expression), collationName: element.collationName) - } -} - - -// MARK: - Arithmetic Operators (+, -, *, /) - -extension SQLBinaryOperator { - /// The `+` binary operator - static let plus = SQLBinaryOperator("+") - - /// The `-` binary operator - static let minus = SQLBinaryOperator("-") - - /// The `*` binary operator - static let multiply = SQLBinaryOperator("*") - - /// The `/` binary operator - static let divide = SQLBinaryOperator("/") -} - -extension SQLUnaryOperator { - /// The `-` unary operator - static let minus = SQLUnaryOperator("-", needsRightSpace: false) -} - -/// An SQL arithmetic multiplication. -/// -/// // width * 2 -/// Column("width") * 2 -public func * (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionBinary(.multiply, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic multiplication. -/// -/// // 2 * width -/// 2 * Column("width") -public func * (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.multiply, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic multiplication. -/// -/// // width * height -/// Column("width") * Column("height") -public func * (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.multiply, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic division. -/// -/// // width / 2 -/// Column("width") / 2 -public func / (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionBinary(.divide, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic division. -/// -/// // 2 / width -/// 2 / Column("width") -public func / (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.divide, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic division. -/// -/// // width / height -/// Column("width") / Column("height") -public func / (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.divide, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic addition. -/// -/// // width + 2 -/// Column("width") + 2 -public func + (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionBinary(.plus, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic addition. -/// -/// // 2 + width -/// 2 + Column("width") -public func + (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.plus, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic addition. -/// -/// // width + height -/// Column("width") + Column("height") -public func + (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.plus, lhs.sqlExpression, rhs.sqlExpression) -} - -/// A negated SQL arithmetic expression. -/// -/// // -width -/// -Column("width") -public prefix func - (value: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionUnary(.minus, value.sqlExpression) -} - -/// An SQL arithmetic substraction. -/// -/// // width - 2 -/// Column("width") - 2 -public func - (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionBinary(.minus, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic substraction. -/// -/// // 2 - width -/// 2 - Column("width") -public func - (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.minus, lhs.sqlExpression, rhs.sqlExpression) -} - -/// An SQL arithmetic substraction. -/// -/// // width - height -/// Column("width") - Column("height") -public func - (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionBinary(.minus, lhs.sqlExpression, rhs.sqlExpression) -} - - -// MARK: - Logical Operators (AND, OR, NOT) - -/// A logical SQL expression with the `AND` SQL operator. -/// -/// // favorite AND 0 -/// Column("favorite") && false -public func && (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionAnd([lhs.sqlExpression, rhs.sqlExpression]) -} - -/// A logical SQL expression with the `AND` SQL operator. -/// -/// // 0 AND favorite -/// false && Column("favorite") -public func && (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionAnd([lhs.sqlExpression, rhs.sqlExpression]) -} - -/// A logical SQL expression with the `AND` SQL operator. -/// -/// // email IS NOT NULL AND favorite -/// Column("email") != nil && Column("favorite") -public func && (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionAnd([lhs.sqlExpression, rhs.sqlExpression]) -} - -/// A logical SQL expression with the `OR` SQL operator. -/// -/// // favorite OR 1 -/// Column("favorite") || true -public func || (lhs: SQLSpecificExpressible, rhs: SQLExpressible) -> SQLExpression { - return SQLExpressionOr([lhs.sqlExpression, rhs.sqlExpression]) -} - -/// A logical SQL expression with the `OR` SQL operator. -/// -/// // 0 OR favorite -/// true || Column("favorite") -public func || (lhs: SQLExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionOr([lhs.sqlExpression, rhs.sqlExpression]) -} - -/// A logical SQL expression with the `OR` SQL operator. -/// -/// // email IS NULL OR hidden -/// Column("email") == nil || Column("hidden") -public func || (lhs: SQLSpecificExpressible, rhs: SQLSpecificExpressible) -> SQLExpression { - return SQLExpressionOr([lhs.sqlExpression, rhs.sqlExpression]) -} - -/// A negated logical SQL expression with the `NOT` SQL operator. -/// -/// // NOT hidden -/// !Column("hidden") -/// -/// Some expressions may be negated with specific SQL operators: -/// -/// // id NOT BETWEEN 1 AND 10 -/// !((1...10).contains(Column("id"))) -public prefix func ! (value: SQLSpecificExpressible) -> SQLExpression { - return value.sqlExpression.negated -} - -public enum SQLLogicalBinaryOperator { - case and, or -} - -extension Sequence where Element == SQLExpression { - /// Returns an expression by joining all elements with an SQL - /// logical operator. - /// - /// For example: - /// - /// // SELECT * FROM player - /// // WHERE (registered - /// // AND (score >= 1000) - /// // AND (name IS NOT NULL)) - /// let conditions = [ - /// Column("registered"), - /// Column("score") >= 1000, - /// Column("name") != nil] - /// Player.filter(conditions.joined(operator: .and)) - /// - /// When the sequence is empty, `joined(operator: .and)` returns true, - /// and `joined(operator: .or)` returns false: - /// - /// // SELECT * FROM player WHERE 1 - /// Player.filter([].joined(operator: .and)) - /// - /// // SELECT * FROM player WHERE 0 - /// Player.filter([].joined(operator: .or)) - public func joined(operator: SQLLogicalBinaryOperator) -> SQLExpression { - let expressions = Array(self) - switch `operator` { - case .and: return SQLExpressionAnd(expressions) - case .or: return SQLExpressionOr(expressions) - } - } -} - - -// MARK: - Like Operator - -extension SQLBinaryOperator { - /// The `LIKE` binary operator - static let like = SQLBinaryOperator("LIKE") -} - -/// :nodoc: -extension SQLSpecificExpressible { - - /// An SQL expression with the `LIKE` SQL operator. - /// - /// // email LIKE '%@example.com" - /// Column("email").like("%@example.com") - public func like(_ pattern: SQLExpressible) -> SQLExpression { - return SQLExpressionBinary(.like, self, pattern) - } -} - - -// MARK: - Match Operator - -extension SQLBinaryOperator { - /// The `MATCH` binary operator - static let match = SQLBinaryOperator("MATCH") -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLOrdering.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLOrdering.swift deleted file mode 100755 index 51e944b..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLOrdering.swift +++ /dev/null @@ -1,56 +0,0 @@ -// MARK: - SQLOrderingTerm - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The protocol for all types that can be used as an SQL ordering term, as -/// described at https://www.sqlite.org/syntax/ordering-term.html -/// -/// :nodoc: -public protocol SQLOrderingTerm { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// The ordering term, reversed - var reversed: SQLOrderingTerm { get } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns an SQL string that represents the ordering term. - func orderingTermSQL(_ context: inout SQLGenerationContext) -> String - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - func qualifiedOrdering(with alias: TableAlias) -> SQLOrderingTerm -} - -// MARK: - SQLOrdering - -enum SQLOrdering : SQLOrderingTerm { - case asc(SQLExpression) - case desc(SQLExpression) - - var reversed: SQLOrderingTerm { - switch self { - case .asc(let expression): - return SQLOrdering.desc(expression) - case .desc(let expression): - return SQLOrdering.asc(expression) - } - } - - func orderingTermSQL(_ context: inout SQLGenerationContext) -> String { - switch self { - case .asc(let expression): - return expression.expressionSQL(&context) + " ASC" - case .desc(let expression): - return expression.expressionSQL(&context) + " DESC" - } - } - - func qualifiedOrdering(with alias: TableAlias) -> SQLOrderingTerm { - switch self { - case .asc(let expression): - return SQLOrdering.asc(expression.qualifiedExpression(with: alias)) - case .desc(let expression): - return SQLOrdering.desc(expression.qualifiedExpression(with: alias)) - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLQuery.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLQuery.swift deleted file mode 100755 index 3d0ba88..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLQuery.swift +++ /dev/null @@ -1,171 +0,0 @@ -/// SQLQuery is a representation of an SQL query. -/// -/// See SQLQueryGenerator for actual SQL generation. -struct SQLQuery { - var relation: SQLRelation - var isDistinct: Bool - var expectsSingleResult: Bool - var groupPromise: DatabasePromise<[SQLExpression]>? - var havingExpression: SQLExpression? - var limit: SQLLimit? - - init( - relation: SQLRelation, - isDistinct: Bool = false, - expectsSingleResult: Bool = false, - groupPromise: DatabasePromise<[SQLExpression]>? = nil, - havingExpression: SQLExpression? = nil, - limit: SQLLimit? = nil) - { - self.relation = relation - self.isDistinct = isDistinct - self.expectsSingleResult = expectsSingleResult - self.groupPromise = groupPromise - self.havingExpression = havingExpression - self.limit = limit - } -} - -extension SQLQuery: SelectionRequest, FilteredRequest, OrderedRequest { - func select(_ selection: [SQLSelectable]) -> SQLQuery { - return mapRelation { $0.select(selection) } - } - - func annotated(with selection: [SQLSelectable]) -> SQLQuery { - return mapRelation { $0.annotated(with: selection) } - } - - func distinct() -> SQLQuery { - var query = self - query.isDistinct = true - return query - } - - func expectingSingleResult() -> SQLQuery { - var query = self - query.expectsSingleResult = true - return query - } - - func filter(_ predicate: @escaping (Database) throws -> SQLExpressible) -> SQLQuery { - return mapRelation { $0.filter(predicate) } - } - - func group(_ expressions: @escaping (Database) throws -> [SQLExpressible]) -> SQLQuery { - var query = self - query.groupPromise = DatabasePromise { db in try expressions(db).map { $0.sqlExpression } } - return query - } - - func having(_ predicate: SQLExpressible) -> SQLQuery { - var query = self - if let havingExpression = query.havingExpression { - query.havingExpression = (havingExpression && predicate).sqlExpression - } else { - query.havingExpression = predicate.sqlExpression - } - return query - } - - func order(_ orderings: @escaping (Database) throws -> [SQLOrderingTerm]) -> SQLQuery { - return mapRelation { $0.order(orderings) } - } - - func reversed() -> SQLQuery { - return mapRelation { $0.reversed() } - } - - func unordered() -> SQLQuery { - return mapRelation { $0.unordered() } - } - - func limit(_ limit: Int, offset: Int? = nil) -> SQLQuery { - var query = self - query.limit = SQLLimit(limit: limit, offset: offset) - return query - } - - func qualified(with alias: TableAlias) -> SQLQuery { - return mapRelation { $0.qualified(with: alias) } - } - - /// Returns a query whose relation is transformed by the given closure. - func mapRelation(_ transform: (SQLRelation) -> SQLRelation) -> SQLQuery { - var query = self - query.relation = transform(relation) - return query - } -} - -extension SQLQuery { - func fetchCount(_ db: Database) throws -> Int { - let (statement, adapter) = try SQLQueryGenerator(countQuery).prepare(db) - return try Int.fetchOne(statement, adapter: adapter)! - } - - private var countQuery: SQLQuery { - guard groupPromise == nil && limit == nil else { - // SELECT ... GROUP BY ... - // SELECT ... LIMIT ... - return trivialCountQuery - } - - if relation.children.contains(where: { $0.value.impactsParentCount }) { // TODO: not tested - // SELECT ... FROM ... JOIN ... - return trivialCountQuery - } - - guard case .table = relation.source else { - // SELECT ... FROM (something which is not a plain table) - return trivialCountQuery - } - - GRDBPrecondition(!relation.selection.isEmpty, "Can't generate SQL with empty selection") - if relation.selection.count == 1 { - guard let count = relation.selection[0].count(distinct: isDistinct) else { - return trivialCountQuery - } - var countQuery = self.unordered() - countQuery.isDistinct = false - switch count { - case .all: - countQuery = countQuery.select(SQLExpressionCount(AllColumns())) - case .distinct(let expression): - countQuery = countQuery.select(SQLExpressionCountDistinct(expression)) - } - return countQuery - } else { - // SELECT [DISTINCT] expr1, expr2, ... FROM tableName ... - - guard !isDistinct else { - return trivialCountQuery - } - - // SELECT expr1, expr2, ... FROM tableName ... - // -> - // SELECT COUNT(*) FROM tableName ... - return self.unordered().select(SQLExpressionCount(AllColumns())) - } - } - - // SELECT COUNT(*) FROM (self) - private var trivialCountQuery: SQLQuery { - let relation = SQLRelation( - source: .query(unordered()), - selection: [SQLExpressionCount(AllColumns())]) - return SQLQuery(relation: relation) - } -} - -struct SQLLimit { - let limit: Int - let offset: Int? - - var sql: String { - if let offset = offset { - return "\(limit) OFFSET \(offset)" - } else { - return "\(limit)" - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLRelation.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLRelation.swift deleted file mode 100755 index 9320c50..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLRelation.swift +++ /dev/null @@ -1,814 +0,0 @@ -/// A "relation", as defined by the [relational terminology](https://en.wikipedia.org/wiki/Relational_database#Terminology), -/// is "a set of tuples sharing the same attributes; a set of columns and rows." -/// -/// SQLRelation is defined with a selection, a source table of query, and an -/// eventual filter and ordering. -/// -/// SELECT ... FROM ... WHERE ... ORDER BY ... -/// | | | | -/// | | | • ordering -/// | | • filter -/// | • source -/// • selection -/// -/// Other SQL clauses such as GROUP BY, LIMIT are defined one level up, in the -/// SQLQuery type. -/// -/// ## Promises -/// -/// Filter and ordering are actually "promises", which are only resolved -/// when a database connection is available. This is how we can implement -/// requests such as `Record.filter(key: 1)` or `Record.orderByPrimaryKey()`: -/// both need a database connection in order to introspect the primary key. -/// -/// // SELECT * FROM player -/// // WHERE continent = 'EU' -/// // ORDER BY code -- primary key infered from the database schema -/// Country -/// .filter(Column("continent") == "EU") -/// .orderByPrimaryKey() -/// -/// ## Children -/// -/// Relations may also have children. A child is a link to another relation, and -/// provide support for joins and prefetched relations. -/// -/// Relations and their children constitute a tree of relations, which the user -/// builds with associations: -/// -/// // Builds a relation with two children: -/// Author -/// .including(required: Author.country) -/// .including(all: Author.books) -/// -/// There are four kinds of children: -/// -/// - `.oneOptional`: -/// -/// Such children are left joined. They may, or not, be included in -/// the selection. -/// -/// // SELECT book.* -/// // FROM book -/// // LEFT JOIN author ON author.id = book.id -/// Book.joining(optional: Book.author) -/// -/// // SELECT book.*, author.* -/// // FROM book -/// // LEFT JOIN author ON author.id = book.id -/// Book.including(optional: Book.author) -/// -/// - `.oneRequired`: -/// -/// Such children are inner joined. They may, or not, be included in -/// the selection. -/// -/// // SELECT book.* -/// // FROM book -/// // JOIN author ON author.id = book.id AND author.country = 'FR' -/// Book.joining(required: Book.author.filter(Column("country") == "FR")) -/// -/// // SELECT book.*, author.* -/// // FROM book -/// // JOIN author ON author.id = book.id AND author.country = 'FR' -/// Book.including(required: Book.author.filter(Column("country") == "FR")) -/// -/// - `.allPrefetched`: -/// -/// Such children are prefetched using several SQL requests: -/// -/// // SELECT * FROM countries WHERE continent = 'EU' -/// // SELECT * FROM passport WHERE countryCode IN ('BE', 'DE', 'FR', ...) -/// Country -/// .filter(Column("continent") == "EU") -/// .including(all: Country.passports) -/// -/// - `.allNotPrefetched`: -/// -/// Such children are not joined, and not prefetched. They are used as -/// intermediate children towards a prefetched child. In the example -/// below, the country relation has a `.allNotPrefetched` child to -/// passports, and the passport relation has a `.allPrefetched` child -/// to citizens. -/// -/// // SELECT * FROM countries WHERE continent = 'EU' -/// // SELECT citizens.* FROM citizens -/// // JOIN passport ON passport.citizenId = citizens.id -/// // AND passport.countryCode IN ('BE', 'DE', 'FR', ...) -/// Country -/// .filter(Column("continent") == "EU") -/// .including(all: Country.citizens) -struct SQLRelation { - struct Child { - enum Kind { - // Record.including(optional: association) - case oneOptional - // Record.including(required: association) - case oneRequired - // Record.including(all: association) - case allPrefetched - // Record.including(all: associationThroughPivot) - case allNotPrefetched - - var cardinality: SQLAssociationCardinality { - switch self { - case .oneOptional, .oneRequired: - return .toOne - case .allPrefetched, .allNotPrefetched: - return .toMany - } - } - } - - var kind: Kind - var condition: SQLAssociationCondition - var relation: SQLRelation - - /// Returns true iff this child can change the parent count. - /// - /// Record.including(required: association) // true - /// Record.including(all: association) // false - var impactsParentCount: Bool { - switch kind { - case .oneOptional, .oneRequired: - return true - case .allPrefetched, .allNotPrefetched: - return false - } - } - - fileprivate func makeAssociationForKey(_ key: String) -> SQLAssociation { - let key = SQLAssociationKey.fixed(key) - return SQLAssociation( - key: key, - condition: condition, - relation: relation, - cardinality: kind.cardinality) - } - - func mapRelation(_ transform: (SQLRelation) -> SQLRelation) -> Child { - return Child(kind: kind, condition: condition, relation: transform(relation)) - } - } - - var source: SQLSource - var selection: [SQLSelectable] - var filterPromise: DatabasePromise - var ordering: SQLRelation.Ordering - var children: OrderedDictionary - - var prefetchedAssociations: [SQLAssociation] { - return children.flatMap { key, child -> [SQLAssociation] in - switch child.kind { - case .allPrefetched: - return [child.makeAssociationForKey(key)] - case .oneOptional, .oneRequired, .allNotPrefetched: - return child.relation.prefetchedAssociations.map { - $0.through(child.makeAssociationForKey(key)) - } - } - } - } - - init( - source: SQLSource, - selection: [SQLSelectable] = [], - filterPromise: DatabasePromise = DatabasePromise(value: nil), - ordering: SQLRelation.Ordering = SQLRelation.Ordering(), - children: OrderedDictionary = [:]) - { - self.source = source - self.selection = selection - self.filterPromise = filterPromise - self.ordering = ordering - self.children = children - } -} - -extension SQLRelation { - func select(_ selection: [SQLSelectable]) -> SQLRelation { - var relation = self - relation.selection = selection - return relation - } - - func annotated(with selection: [SQLSelectable]) -> SQLRelation { - var relation = self - relation.selection.append(contentsOf: selection) - return relation - } - - func filter(_ predicate: @escaping (Database) throws -> SQLExpressible) -> SQLRelation { - var relation = self - relation.filterPromise = relation.filterPromise.flatMap { filter in - if let filter = filter { - return DatabasePromise { try filter && predicate($0) } - } else { - return DatabasePromise { try predicate($0).sqlExpression } - } - } - return relation - } - - func order(_ orderings: @escaping (Database) throws -> [SQLOrderingTerm]) -> SQLRelation { - return order(SQLRelation.Ordering(orderings: orderings)) - } - - func reversed() -> SQLRelation { - return order(ordering.reversed) - } - - func unordered() -> SQLRelation { - var relation = self - relation.ordering = SQLRelation.Ordering() - relation.children = relation.children.mapValues { $0.mapRelation { $0.unordered() } } - return relation - } - - private func order(_ ordering: SQLRelation.Ordering) -> SQLRelation { - var relation = self - relation.ordering = ordering - return relation - } - - func qualified(with alias: TableAlias) -> SQLRelation { - var relation = self - relation.source = source.qualified(with: alias) - return relation - } -} - -extension SQLRelation { - func deletingChildren() -> SQLRelation { - var relation = self - relation.children = [:] - return relation - } - - /// Creates a relation that prefetches another one. - func including(all association: SQLAssociation) -> SQLRelation { - return appending(association, kind: .allPrefetched) - } - - /// Creates a relation that includes another one. The columns of the - /// associated record are selected. The returned relation does not - /// require that the associated database table contains a matching row. - func including(optional association: SQLAssociation) -> SQLRelation { - return appending(association, kind: .oneOptional) - } - - /// Creates a relation that includes another one. The columns of the - /// associated record are selected. The returned relation requires - /// that the associated database table contains a matching row. - func including(required association: SQLAssociation) -> SQLRelation { - return appending(association, kind: .oneRequired) - } - - /// Creates a relation that joins another one. The columns of the - /// associated record are not selected. The returned relation does not - /// require that the associated database table contains a matching row. - func joining(optional association: SQLAssociation) -> SQLRelation { - return appending(association.mapDestinationRelation { $0.select([]) }, kind: .oneOptional) - } - - /// Creates a relation that joins another one. The columns of the - /// associated record are not selected. The returned relation requires - /// that the associated database table contains a matching row. - func joining(required association: SQLAssociation) -> SQLRelation { - return appending(association.mapDestinationRelation { $0.select([]) }, kind: .oneRequired) - } - - /// Returns a relation extended with an association. - /// - /// This method provides support for public joining methods such - /// as `including(required:)`: - /// - /// struct Destination: TableRecord { } - /// struct Origin: TableRecord { - /// static let destination = belongsTo(Destination.self) - /// } - /// - /// // SELECT origin.*, destination.* - /// // FROM origin - /// // JOIN destination ON destination.id = origin.destinationId - /// let request = Origin.including(required: Origin.destination) - /// - /// At low-level, this gives: - /// - /// let sqlAssociation = Origin.destination.sqlAssociation - /// let origin = Origin.all().query.relation - /// let relation = origin.appending(sqlAssociation, kind: .oneRequired) - /// let query = SQLQuery(relation: relation) - /// let generator = SQLQueryGenerator(query) - /// let statement, _ = try generator.prepare(db) - /// print(statement.sql) - /// // SELECT origin.*, destination.* - /// // FROM origin - /// // JOIN destination ON destination.originId = origin.id - /// - /// This method works for simple direct associations such as BelongsTo or - /// HasMany in the above examples, but also for indirect associations such - /// as HasManyThrough, which have any number of pivot relations between the - /// origin and the destination. - func appending(_ association: SQLAssociation, kind: SQLRelation.Child.Kind) -> SQLRelation { - let childCardinality = (kind == .allNotPrefetched) - // preserve association cardinality in intermediate steps of including(all:) - ? association.destination.cardinality - // force desired cardinality otherwize - : kind.cardinality - let childKey = association.destination.key.name(for: childCardinality) - let child = SQLRelation.Child( - kind: kind, - condition: association.destination.condition, - relation: association.destination.relation) - - let initialSteps = association.steps.dropLast() - if initialSteps.isEmpty { - // This is a direct join from origin to destination, without - // intermediate step. - // - // SELECT origin.*, destination.* - // FROM origin - // JOIN destination ON destination.id = origin.destinationId - // - // let association = Origin.belongsTo(Destination.self) - // Origin.including(required: association) - return appendingChild(child, forKey: childKey) - } - - // This is an indirect join from origin to destination, through - // some pivot(s): - // - // SELECT origin.*, destination.* - // FROM origin - // JOIN pivot ON pivot.originId = origin.id - // JOIN destination ON destination.id = pivot.destinationId - // - // let association = Origin.hasMany( - // Destination.self, - // through: Origin.hasMany(Pivot.self), - // via: Pivot.belongsTo(Destination.self)) - // Origin.including(required: association) - // - // Let's recurse toward a direct join, by making a new association which - // ends on the last pivot, to which we join our destination: - var reducedAssociation = SQLAssociation(steps: Array(initialSteps)) - - reducedAssociation.destination.relation = reducedAssociation.destination.relation - .select([]) // Intermediate steps are not prefetched - .appendingChild(child, forKey: childKey) - - switch kind { - case .oneRequired, .oneOptional, .allNotPrefetched: - return appending(reducedAssociation, kind: kind) - case .allPrefetched: - // Intermediate steps of indirect associations are not prefetched. - // - // For example, the request below prefetches citizens, not - // intermediate passports: - // - // extension Country { - // static let passports = hasMany(Passport.self) - // static let citizens = hasMany(Citizens.self, through: passports, using: Passport.citizen) - // } - // let request = Country.including(all: Country.citizens) - return appending(reducedAssociation, kind: .allNotPrefetched) - } - } - - private func appendingChild(_ child: SQLRelation.Child, forKey key: String) -> SQLRelation { - var relation = self - if let existingChild = relation.children.removeValue(forKey: key) { - guard let mergedChild = existingChild.merged(with: child) else { - // can't merge - fatalError("The association key \"\(key)\" is ambiguous. Use the Association.forKey(_:) method is order to disambiguate.") - } - relation.children.appendValue(mergedChild, forKey: key) - } else { - relation.children.appendValue(child, forKey: key) - } - return relation - } -} - -// MARK: - SQLSource - -enum SQLSource { - case table(tableName: String, alias: TableAlias?) - indirect case query(SQLQuery) - - func qualified(with alias: TableAlias) -> SQLSource { - switch self { - case .table(let tableName, let sourceAlias): - if let sourceAlias = sourceAlias { - alias.becomeProxy(of: sourceAlias) - return self - } else { - alias.setTableName(tableName) - return .table(tableName: tableName, alias: alias) - } - case .query(let query): - return .query(query.qualified(with: alias)) - } - } -} - -// MARK: - SQLRelation.Ordering - -extension SQLRelation { - /// SQLRelation.Ordering provides the order clause to SQLRelation. - struct Ordering { - private enum Element { - case terms(DatabasePromise<[SQLOrderingTerm]>) - case ordering(SQLRelation.Ordering) - - var reversed: Element { - switch self { - case .terms(let terms): - return .terms(terms.map { $0.map { $0.reversed } }) - case .ordering(let ordering): - return .ordering(ordering.reversed) - } - } - - func qualified(with alias: TableAlias) -> Element { - switch self { - case .terms(let terms): - return .terms(terms.map { $0.map { $0.qualifiedOrdering(with: alias) } }) - case .ordering(let ordering): - return .ordering(ordering.qualified(with: alias)) - } - } - - func resolve(_ db: Database) throws -> [SQLOrderingTerm] { - switch self { - case .terms(let terms): - return try terms.resolve(db) - case .ordering(let ordering): - return try ordering.resolve(db) - } - } - } - - private var elements: [Element] = [] - var isReversed: Bool - - var isEmpty: Bool { - return elements.isEmpty - } - - private init(elements: [Element], isReversed: Bool) { - self.elements = elements - self.isReversed = isReversed - } - - init() { - self.init( - elements: [], - isReversed: false) - } - - init(orderings: @escaping (Database) throws -> [SQLOrderingTerm]) { - self.init( - elements: [.terms(DatabasePromise(orderings))], - isReversed: false) - } - - var reversed: Ordering { - return Ordering( - elements: elements, - isReversed: !isReversed) - } - - func qualified(with alias: TableAlias) -> Ordering { - return Ordering( - elements: elements.map { $0.qualified(with: alias) }, - isReversed: isReversed) - } - - func appending(_ ordering: Ordering) -> Ordering { - return Ordering( - elements: elements + [.ordering(ordering)], - isReversed: isReversed) - } - - func resolve(_ db: Database) throws -> [SQLOrderingTerm] { - if isReversed { - return try elements.flatMap { try $0.reversed.resolve(db) } - } else { - return try elements.flatMap { try $0.resolve(db) } - } - } - } -} - -// MARK: - SQLAssociationCondition - -/// The condition that links two tables. -/// -/// Currently, we only support one kind of condition: foreign keys. -/// -/// SELECT ... FROM book JOIN author ON author.id = book.authorId -/// <---- the condition ----> -/// -/// When we eventually add support for new ways to link tables, -/// SQLAssociationCondition is the type we'll need to update. -/// -/// SQLAssociationCondition adopts Equatable so that we can merge associations: -/// -/// // request1 and request2 are equivalent -/// let request1 = Book -/// .including(required: Book.author) -/// let request2 = Book -/// .including(required: Book.author) -/// .including(required: Book.author) -/// -/// // request3 and request4 are equivalent -/// let request3 = Book -/// .including(required: Book.author.filter(condition1 && condition2)) -/// let request4 = Book -/// .joining(required: Book.author.filter(condition1)) -/// .including(optional: Book.author.filter(condition2)) -struct SQLAssociationCondition: Equatable { - /// Definition of a foreign key - var foreignKeyRequest: SQLForeignKeyRequest - - /// True if the table at the origin of the foreign key is on the left of - /// the sql JOIN operator. - /// - /// Let's consider the `book.authorId -> author.id` foreign key. - /// Its origin table is `book`. - /// - /// The origin table `book` is on the left of the JOIN operator for - /// the BelongsTo association: - /// - /// -- Book.including(required: Book.author) - /// SELECT ... FROM book JOIN author ON author.id = book.authorId - /// - /// The origin table `book`is on the right of the JOIN operator for - /// the HasMany and HasOne associations: - /// - /// -- Author.including(required: Author.books) - /// SELECT ... FROM author JOIN book ON author.id = book.authorId - var originIsLeft: Bool - - var reversed: SQLAssociationCondition { - return SQLAssociationCondition( - foreignKeyRequest: foreignKeyRequest, - originIsLeft: !originIsLeft) - } - - /// Orient foreignKey according to the originIsLeft flag - func columnMappings(_ db: Database) throws -> [(left: String, right: String)] { - let foreignKeyMapping = try foreignKeyRequest.fetchMapping(db) - if originIsLeft { - return foreignKeyMapping.map { (left: $0.origin, right: $0.destination) } - } else { - return foreignKeyMapping.map { (left: $0.destination, right: $0.origin) } - } - } - - /// Resolves the condition into an SQL expression which involves both left - /// and right tables. - /// - /// SELECT * FROM left JOIN right ON (right.a = left.b) - /// <----------------> - /// - /// - parameter db: A database connection. - /// - parameter leftAlias: A TableAlias for the table on the left of the - /// JOIN operator. - /// - parameter rightAlias: A TableAlias for the table on the right of the - /// JOIN operator. - /// - Returns: An SQL expression. - func joinExpression(_ db: Database, leftAlias: TableAlias, rightAlias: TableAlias) throws -> SQLExpression { - return try columnMappings(db) - .map { QualifiedColumn($0.right, alias: rightAlias) == QualifiedColumn($0.left, alias: leftAlias) } - .joined(operator: .and) - } - - /// Resolves the condition into an SQL expression which involves only the - /// right table. - /// - /// Given `right.a = left.b`, returns `right.a = 1` or - /// `right.a IN (1, 2, 3)`. - func filteringExpression(_ db: Database, leftRows: [Row], rightAlias: TableAlias) throws -> SQLExpression { - if leftRows.isEmpty { - // Degenerate case: there is no row to attach - return false.sqlExpression - } - - let columnMappings = try self.columnMappings(db) - guard let columnMapping = columnMappings.first else { - // Degenerate case: no joining column - return true.sqlExpression - } - - if columnMappings.count == 1 { - // Join on a single right column. - let rightColumn = QualifiedColumn(columnMapping.right, alias: rightAlias) - - // Unique database values and filter out NULL: - var dbValues = Set(leftRows.map { $0[columnMapping.left] as DatabaseValue }) - dbValues.remove(.null) - - if dbValues.isEmpty { - // Can't join - return false.sqlExpression - } else { - // table.a IN (1, 2, 3, ...) - // Sort database values for nicer output. - return dbValues.sorted(by: <).contains(rightColumn) - } - } else { - // Join on a multiple columns. - // ((table.a = 1) AND (table.b = 2)) OR ((table.a = 3) AND (table.b = 4)) ... - return leftRows - .map { leftRow in - // (table.a = 1) AND (table.b = 2) - columnMappings - .map { columns -> SQLExpression in - let rightColumn = QualifiedColumn(columns.right, alias: rightAlias) - let leftValue = leftRow[columns.left] as DatabaseValue - return rightColumn == leftValue - } - .joined(operator: .and) - } - .joined(operator: .or) - } - } -} - -// MARK: - Merging -// -// "Merging" is an operation that takes two relations and, if they are -// compatible, gathers them into a merged relation. -// -// It is an important feature that allows the user to define associated requests -// in several steps. For example, in the sample code below, both requests are -// equivalent and generate the same SQL query, thanks to merging: -// -// let request1 = Book.including(required: Book.author) -// -// let request2 = Book -// .including(required: Book.author) -// .including(required: Book.author) - -extension SQLRelation { - /// Returns nil if relations can't be merged (conflict in source, joins...) - func merged(with other: SQLRelation) -> SQLRelation? { - guard let mergedSource = source.merged(with: other.source) else { - // can't merge - return nil - } - - let mergedFilterPromise: DatabasePromise = filterPromise.flatMap { expression in - return DatabasePromise { db in - let otherExpression = try other.filterPromise.resolve(db) - let expressions = [expression, otherExpression].compactMap { $0 } - if expressions.isEmpty { - return nil - } else { - return expressions.joined(operator: .and) - } - } - } - - var mergedChildren: OrderedDictionary = [:] - for (key, child) in children { - if let otherChild = other.children[key] { - guard let mergedChild = child.merged(with: otherChild) else { - // can't merge - return nil - } - mergedChildren.appendValue(mergedChild, forKey: key) - } else { - mergedChildren.appendValue(child, forKey: key) - } - } - for (key, child) in other.children where mergedChildren[key] == nil { - mergedChildren.appendValue(child, forKey: key) - } - - // replace selection unless empty - let mergedSelection = other.selection.isEmpty ? selection : other.selection - - // replace ordering unless empty - let mergedOrdering = other.ordering.isEmpty ? ordering : other.ordering - - return SQLRelation( - source: mergedSource, - selection: mergedSelection, - filterPromise: mergedFilterPromise, - ordering: mergedOrdering, - children: mergedChildren) - } -} - -extension SQLSource { - /// Returns nil if sources can't be merged (conflict in tables, aliases...) - func merged(with other: SQLSource) -> SQLSource? { - switch (self, other) { - case let (.table(tableName: tableName, alias: alias), .table(tableName: otherTableName, alias: otherAlias)): - guard tableName == otherTableName else { - // can't merge - return nil - } - switch (alias, otherAlias) { - case (nil, nil): - return .table(tableName: tableName, alias: nil) - case let (alias?, nil), let (nil, alias?): - return .table(tableName: tableName, alias: alias) - case let (alias?, otherAlias?): - guard let mergedAlias = alias.merged(with: otherAlias) else { - // can't merge - return nil - } - return .table(tableName: tableName, alias: mergedAlias) - } - default: - // can't merge - return nil - } - } -} - -extension SQLRelation.Child { - /// Returns nil if joins can't be merged (conflict in condition, relation...) - func merged(with other: SQLRelation.Child) -> SQLRelation.Child? { - guard condition == other.condition else { - // can't merge - return nil - } - - guard let mergedRelation = relation.merged(with: other.relation) else { - // can't merge - return nil - } - - guard let mergedKind = kind.merged(with: other.kind) else { - // can't merge - return nil - } - - return SQLRelation.Child( - kind: mergedKind, - condition: condition, - relation: mergedRelation) - } -} - -extension SQLRelation.Child.Kind { - /// Returns nil if kinds can't be merged - func merged(with other: SQLRelation.Child.Kind) -> SQLRelation.Child.Kind? { - switch (self, other) { - case (.oneRequired, .oneRequired), - (.oneRequired, .oneOptional), - (.oneOptional, .oneRequired): - // Equivalent to Record.including(required: association): - // - // Record - // .including(required: association) - // .including(optional: association) - return .oneRequired - - case (.oneOptional, .oneOptional): - // Equivalent to Record.including(optional: association): - // - // Record - // .including(optional: association) - // .including(optional: association) - return .oneOptional - - case (.allPrefetched, .allPrefetched): - // Equivalent to Record.including(all: association): - // - // Record - // .including(all: association) - // .including(all: association) - return .allPrefetched - - case (.allPrefetched, .allNotPrefetched), - (.allNotPrefetched, .allPrefetched): - // Record - // .including(all: associationToDestinationThroughPivot) - // .including(all: associationToPivot) - fatalError("Not implemented: merging a direct association and an indirect one with including(all:)") - - case (.allNotPrefetched, .allNotPrefetched): - // Equivalent to Record.including(all: association) - // - // Record - // .including(all: association) - // .including(all: association) - return .allNotPrefetched - - default: - // Likely a programmer error: - // - // Record - // .including(all: Author.books.forKey("foo")) - // .including(optional: Author.books.forKey("foo")) - return nil - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSelectable+QueryInterface.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSelectable+QueryInterface.swift deleted file mode 100755 index 08fbe4c..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSelectable+QueryInterface.swift +++ /dev/null @@ -1,149 +0,0 @@ -// MARK: - AllColumns - -/// AllColumns is the `*` in `SELECT *`. -/// -/// You use AllColumns in your custom implementation of -/// TableRecord.databaseSelection. -/// -/// For example: -/// -/// struct Player : TableRecord { -/// static var databaseTableName = "player" -/// static let databaseSelection: [SQLSelectable] = [AllColumns(), Column.rowID] -/// } -/// -/// // SELECT *, rowid FROM player -/// let request = Player.all() -public struct AllColumns { - public init() { } -} - -extension AllColumns : SQLSelectable { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func resultColumnSQL(_ context: inout SQLGenerationContext) -> String { - return "*" - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func countedSQL(_ context: inout SQLGenerationContext) -> String { - return "*" - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func count(distinct: Bool) -> SQLCount? { - // SELECT DISTINCT * FROM tableName ... - if distinct { - return nil - } - - // SELECT * FROM tableName ... - // -> - // SELECT COUNT(*) FROM tableName ... - return .all - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func qualifiedSelectable(with alias: TableAlias) -> SQLSelectable { - return QualifiedAllColumns(alias: alias) - } - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public func columnCount(_ db: Database) throws -> Int { - fatalError("Can't compute number of columns without an alias") - } -} - -// MARK: - QualifiedAllColumns - -/// QualifiedAllColumns is the `t.*` in `SELECT t.*`. -struct QualifiedAllColumns { - private let alias: TableAlias - - init(alias: TableAlias) { - self.alias = alias - } -} - -extension QualifiedAllColumns : SQLSelectable { - func resultColumnSQL(_ context: inout SQLGenerationContext) -> String { - if let qualifier = context.qualifier(for: alias) { - return qualifier.quotedDatabaseIdentifier + ".*" - } - return "*" - } - - func countedSQL(_ context: inout SQLGenerationContext) -> String { - // TODO: restore the check below. - // - // It is currently disabled because of AssociationAggregateTests.testHasManyIsEmpty: - // - // let request = Team.having(Team.players.isEmpty) - // try XCTAssertEqual(request.fetchCount(db), 1) - // - // This should build the trivial count query `SELECT COUNT(*) FROM (SELECT ...)` - // - // Unfortunately, we don't support anonymous table aliases that would be - // required here. Because we don't support anonymous tables aliases, - // everything happens as if we wanted to generate - // `SELECT COUNT(team.*) FROM (SELECT ...)`, which is invalid SQL. - // - // So let's always return `*`, and fix this later. - -// if context.qualifier(for: alias) != nil { -// // SELECT COUNT(t.*) is invalid SQL -// fatalError("Not implemented, or invalid query") -// } - - return "*" - } - - func count(distinct: Bool) -> SQLCount? { - return nil - } - - func qualifiedSelectable(with alias: TableAlias) -> SQLSelectable { - // Never requalify - return self - } - - func columnCount(_ db: Database) throws -> Int { - return try db.columns(in: alias.tableName).count - } -} - -// MARK: - SQLAliasedExpression - -struct SQLAliasedExpression : SQLSelectable { - let expression: SQLExpression - let name: String - - init(_ expression: SQLExpression, name: String) { - self.expression = expression - self.name = name - } - - func resultColumnSQL(_ context: inout SQLGenerationContext) -> String { - return expression.resultColumnSQL(&context) + " AS " + name.quotedDatabaseIdentifier - } - - func countedSQL(_ context: inout SQLGenerationContext) -> String { - return expression.countedSQL(&context) - } - - func count(distinct: Bool) -> SQLCount? { - return expression.count(distinct: distinct) - } - - func qualifiedSelectable(with alias: TableAlias) -> SQLSelectable { - return SQLAliasedExpression(expression.qualifiedExpression(with: alias), name: name) - } - - func columnCount(_ db: Database) throws -> Int { - return 1 - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSelectable.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSelectable.swift deleted file mode 100755 index cc492f4..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSelectable.swift +++ /dev/null @@ -1,76 +0,0 @@ -// MARK: - SQLSelectable - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLSelectable is the protocol for types that can be selected, as -/// described at https://www.sqlite.org/syntax/result-column.html -/// -/// :nodoc: -public protocol SQLSelectable { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - func resultColumnSQL(_ context: inout SQLGenerationContext) -> String - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - func countedSQL(_ context: inout SQLGenerationContext) -> String - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - func count(distinct: Bool) -> SQLCount? - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - func columnCount(_ db: Database) throws -> Int - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - func qualifiedSelectable(with alias: TableAlias) -> SQLSelectable -} - -// MARK: - SQLSelectionLiteral - -struct SQLSelectionLiteral : SQLSelectable { - private let sqlLiteral: SQLLiteral - - init(literal sqlLiteral: SQLLiteral) { - self.sqlLiteral = sqlLiteral - } - - func resultColumnSQL(_ context: inout SQLGenerationContext) -> String { - if context.append(arguments: sqlLiteral.arguments) == false { - // GRDB limitation: we don't know how to look for `?` in sql and - // replace them with with literals. - fatalError("Not implemented") - } - return sqlLiteral.sql - } - - func countedSQL(_ context: inout SQLGenerationContext) -> String { - fatalError("Selection literals can't be counted. To resolve this error, select one or several SQLExpressionLiteral instead.") - } - - func count(distinct: Bool) -> SQLCount? { - fatalError("Selection literals can't be counted. To resolve this error, select one or several SQLExpressionLiteral instead.") - } - - func columnCount(_ db: Database) throws -> Int { - fatalError("Selection literals don't known how many columns they contain. To resolve this error, select one or several SQLExpressionLiteral instead.") - } - - func qualifiedSelectable(with alias: TableAlias) -> SQLSelectable { - return self - } -} - -// MARK: - Counting - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// :nodoc: -public enum SQLCount { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Represents COUNT(*) - case all - - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Represents COUNT(DISTINCT expression) - case distinct(SQLExpression) -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSpecificExpressible+QueryInterface.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSpecificExpressible+QueryInterface.swift deleted file mode 100755 index 329f3b3..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQL/SQLSpecificExpressible+QueryInterface.swift +++ /dev/null @@ -1,66 +0,0 @@ -// MARK: - SQL Ordering Support - -/// :nodoc: -extension SQLSpecificExpressible { - - /// Returns a value that can be used as an argument to QueryInterfaceRequest.order() - /// - /// See https://github.com/groue/GRDB.swift/#the-query-interface - public var asc: SQLOrderingTerm { - return SQLOrdering.asc(sqlExpression) - } - - /// Returns a value that can be used as an argument to QueryInterfaceRequest.order() - /// - /// See https://github.com/groue/GRDB.swift/#the-query-interface - public var desc: SQLOrderingTerm { - return SQLOrdering.desc(sqlExpression) - } -} - - -// MARK: - SQL Selection Support - -/// :nodoc: -extension SQLSpecificExpressible { - - /// Returns a value that can be used as an argument to QueryInterfaceRequest.select() - /// - /// See https://github.com/groue/GRDB.swift/#the-query-interface - public func aliased(_ name: String) -> SQLSelectable { - return SQLAliasedExpression(sqlExpression, name: name) - } - - /// Returns a value that can be used as an argument to QueryInterfaceRequest.select() - /// - /// See https://github.com/groue/GRDB.swift/#the-query-interface - public func aliased(_ key: CodingKey) -> SQLSelectable { - return aliased(key.stringValue) - } -} - - -// MARK: - SQL Collations Support - -/// :nodoc: -extension SQLSpecificExpressible { - - /// Returns a collated expression. - /// - /// For example: - /// - /// Player.filter(Column("email").collating(.nocase) == "contact@example.com") - public func collating(_ collation: Database.CollationName) -> SQLCollatedExpression { - return SQLCollatedExpression(sqlExpression, collationName: collation) - } - - /// Returns a collated expression. - /// - /// For example: - /// - /// Player.filter(Column("name").collating(.localizedStandardCompare) == "Hervé") - public func collating(_ collation: DatabaseCollation) -> SQLCollatedExpression { - return SQLCollatedExpression(sqlExpression, collationName: Database.CollationName(collation.name)) - } -} - diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLGeneration/SQLGenerationContext.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLGeneration/SQLGenerationContext.swift deleted file mode 100755 index 60d5f4a..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLGeneration/SQLGenerationContext.swift +++ /dev/null @@ -1,342 +0,0 @@ -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// SQLGenerationContext is responsible for preventing SQL injection and -/// disambiguating table names when GRDB generates SQL queries. -/// -/// :nodoc: -public struct SQLGenerationContext { - var arguments: StatementArguments? - private var resolvedNames: [TableAlias: String] - private var qualifierNeeded: Bool - - /// Used for SQLExpression -> SQLExpressionLiteral conversion - /// and SQLInterpolation - static func literalGenerationContext(withArguments: Bool) -> SQLGenerationContext { - return SQLGenerationContext( - arguments: withArguments ? [] : nil, - resolvedNames: [:], - qualifierNeeded: false) - } - - /// Used for SQLQuery.makeSelectStatement() and SQLQuery.makeDeleteStatement() - static func queryGenerationContext(aliases: [TableAlias]) -> SQLGenerationContext { - // TODO: since 5d9fa76, in the lines below, we started uniquing aliases. - // Something tells me this is a wrong fix. We should try to investigate - // and maybe revert this change. I don't see why we'd really need to - // unique aliases, and I'm afraid we're hiding some latent bug - // somewhere else. - - // Unique aliases, but with preserved ordering, so that we have stable SQL generation - let uniqueAliases = aliases.reduce(into: [TableAlias]()) { - if !$0.contains($1) { - $0.append($1) - } - } - return SQLGenerationContext( - arguments: [], - resolvedNames: uniqueAliases.resolvedNames, - qualifierNeeded: uniqueAliases.count > 1) - } - - /// Used for TableRecord.selectionSQL - static func recordSelectionGenerationContext() -> SQLGenerationContext { - return SQLGenerationContext( - arguments: nil, - resolvedNames: [:], - qualifierNeeded: true) - } - - /// Returns whether arguments could be appended - mutating func append(arguments newArguments: StatementArguments) -> Bool { - if newArguments.isEmpty { - return true - } - guard let arguments = arguments else { - return false - } - self.arguments = arguments + newArguments - return true - } - - /// May be nil, when a qualifier is not needed: - /// - /// WHERE .column == 1 - /// SELECT .* - /// - /// WHERE column == 1 - /// SELECT * - func qualifier(for alias: TableAlias) -> String? { - if alias.hasUserName { - return alias.identityName - } - if qualifierNeeded == false { - return nil - } - return resolvedName(for: alias) - } - - /// WHERE MATCH pattern - func resolvedName(for alias: TableAlias) -> String { - return resolvedNames[alias] ?? alias.identityName - } - - /// FROM tableName - func aliasName(for alias: TableAlias) -> String? { - let resolvedName = self.resolvedName(for: alias) - if resolvedName != alias.tableName { - return resolvedName - } - return nil - } -} - -// MARK: - TableAlias - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A TableAlias identifies a table in a request. -public class TableAlias: Hashable { - private var impl: Impl - private enum Impl { - /// A TableAlias is undefined when it is created by the GRDB user: - /// - /// let alias = TableAlias() - /// let alias = TableAlias(name: "custom") - case undefined(userName: String?) - - /// A TableAlias is a table when explicitly specified: - /// - /// let alias = TableAlias(tableName: "player") - /// - /// Or when it qualifies a request that wasn't qualified yet (in which - /// case it turns from undefined to a table): - /// - /// // SELECT custom.* FROM player custom - /// let alias = TableAlias(name: "custom") - /// let request = Player.all().aliased(alias) - case table(tableName: String, userName: String?) - - /// A TableAlias can be a proxy for another table alias. Two different - /// instances for the same table identifier: - /// - /// // Pointless example: make alias2 a proxy for alias1 - /// let alias1 = TableAlias() - /// let alias2 = TableAlias() - /// Player.all() - /// .aliased(alias1) - /// .aliased(alias2) - /// - /// Proxies are useful because queries get implicit aliases as soon - /// as they are joined with associations. In the example below, - /// customAlias becomes a proxy for the request's implicit alias, which - /// gets a custom name. This allows implicit and user aliases to merge - /// into a single "table identifier" that matches the user's expectations: - /// - /// // SELECT custom.*, team.* - /// // FROM player custom - /// // JOIN team ON taem.id = custom.teamId - /// // WHERE custom.name = 'Arthur' - /// let customAlias = TableAlias(name: "custom") - /// let request = Player - /// .including(required: Player.team) - /// .filter(sql: "custom.name = 'Arthur'") - /// .aliased(customAlias) - case proxy(TableAlias) - } - - /// Resolve all proxies - private var root: TableAlias { - if case .proxy(let base) = impl { - return base.root - } else { - return self - } - } - - // exposed to SQLGenerationContext - fileprivate var identityName: String { - return userName ?? tableName - } - - // exposed to SQLGenerationContext - fileprivate var hasUserName: Bool { - return userName != nil - } - - var tableName: String { - switch impl { - case .undefined: - // Likely a GRDB bug - fatalError("Undefined alias has no table name") - case .table(tableName: let tableName, userName: _): - return tableName - case .proxy(let base): - return base.tableName - } - } - - private var userName: String? { - switch impl { - case .undefined(let userName): - return userName - case .table(tableName: _, userName: let userName): - return userName - case .proxy(let base): - return base.userName - } - } - - public init(name: String? = nil) { - self.impl = .undefined(userName: name) - } - - init(tableName: String, userName: String? = nil) { - self.impl = .table(tableName: tableName, userName: userName) - } - - func becomeProxy(of base: TableAlias) { - switch impl { - case let .undefined(userName): - if let userName = userName { - // rename - assert(base.userName == nil || base.userName == userName) - base.setUserName(userName) - } - self.impl = .proxy(base) - case let .table(tableName: tableName, userName: userName): - assert(tableName == base.tableName) - if let userName = userName { - // rename - assert(base.userName == nil || base.userName == userName) - base.setUserName(userName) - } - self.impl = .proxy(base) - case let .proxy(selfBase): - selfBase.becomeProxy(of: base) - } - } - - /// Returns nil if aliases can't be merged (conflict in tables, aliases...) - func merged(with other: TableAlias) -> TableAlias? { - let root = self.root - let otherRoot = other.root - switch (root.impl, otherRoot.impl) { - case let (.table(tableName: tableName, userName: userName), .table(tableName: otherTableName, userName: otherUserName)): - guard tableName == otherTableName else { - // can't merge - return nil - } - if let userName = userName, let otherUserName = otherUserName, userName != otherUserName { - // can't merge - return nil - } - root.becomeProxy(of: otherRoot) - return otherRoot - default: - // can't merge - return nil - } - } - - private func setUserName(_ userName: String) { - switch impl { - case .undefined: - self.impl = .undefined(userName: userName) - case .table(tableName: let tableName, userName: _): - self.impl = .table(tableName: tableName, userName: userName) - case .proxy(let base): - base.setUserName(userName) - } - } - - func setTableName(_ tableName: String) { - switch impl { - case .undefined(let userName): - self.impl = .table(tableName: tableName, userName: userName) - case .table(tableName: let initialTableName, userName: _): - // It is a programmer error to reuse the same TableAlias for - // multiple tables. - // - // // Don't do that - // let alias = TableAlias() - // let books = Book.aliased(alias)... - // let authors = Author.aliased(alias)... - GRDBPrecondition( - tableName.lowercased() == initialTableName.lowercased(), - "A TableAlias most not be used to refer to multiple tables") - case .proxy(let base): - base.setTableName(tableName) - } - } - - /// Returns a qualified value that is able to resolve ambiguities in - /// joined queries. - public subscript(_ selectable: SQLSelectable) -> SQLSelectable { - return selectable.qualifiedSelectable(with: self) - } - - /// Returns a qualified expression that is able to resolve ambiguities in - /// joined queries. - public subscript(_ expression: SQLExpression) -> SQLExpression { - return expression.qualifiedExpression(with: self) - } - - /// :nodoc: - public func hash(into hasher: inout Hasher) { - hasher.combine(ObjectIdentifier(root)) - } - - /// :nodoc: - public static func == (lhs: TableAlias, rhs: TableAlias) -> Bool { - return ObjectIdentifier(lhs.root) == ObjectIdentifier(rhs.root) - } -} - -extension Array where Element == TableAlias { - /// Resolve ambiguities in aliases' names. - fileprivate var resolvedNames: [TableAlias: String] { - // It is a programmer error to reuse the same TableAlias for - // multiple tables. - // - // // Don't do that - // let alias = TableAlias() - // let request = Book - // .including(required: Book.author.aliased(alias)...) - // .including(required: Book.author.aliased(alias)...) - GRDBPrecondition(count == Set(self).count, "A TableAlias most not be used to refer to multiple tables") - - let groups = Dictionary(grouping: self) { - $0.identityName.lowercased() - } - - var uniqueLowercaseNames: Set = [] - var ambiguousGroups: [[TableAlias]] = [] - - for (lowercaseName, group) in groups { - if group.count > 1 { - // It is a programmer error to reuse the same alias for multiple tables - GRDBPrecondition(group.count { $0.hasUserName } < 2, "ambiguous alias: \(group[0].identityName)") - ambiguousGroups.append(group) - } else { - uniqueLowercaseNames.insert(lowercaseName) - } - } - - var resolvedNames: [TableAlias: String] = [:] - for group in ambiguousGroups { - var index = 1 - for alias in group { - if alias.hasUserName { continue } - let radical = alias.identityName.digitlessRadical - var resolvedName: String - repeat { - resolvedName = "\(radical)\(index)" - index += 1 - } while uniqueLowercaseNames.contains(resolvedName.lowercased()) - uniqueLowercaseNames.insert(resolvedName.lowercased()) - resolvedNames[alias] = resolvedName - } - } - return resolvedNames - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLGeneration/SQLQueryGenerator.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLGeneration/SQLQueryGenerator.swift deleted file mode 100755 index e40a985..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLGeneration/SQLQueryGenerator.swift +++ /dev/null @@ -1,481 +0,0 @@ -/// SQLQueryGenerator is able to generate an SQL SELECT query. -struct SQLQueryGenerator { - fileprivate let relation: SQLQualifiedRelation - private let isDistinct: Bool - private let groupPromise: DatabasePromise<[SQLExpression]>? - private let havingExpression: SQLExpression? - private let limit: SQLLimit? - - init(_ query: SQLQuery) { - // To generate SQL, we need a "qualified" relation, where all tables, - // expressions, etc, are identified with table aliases. - // - // All those aliases let us disambiguate tables at the SQL level, and - // prefix columns names. For example, the following request... - // - // Book.filter(Column("kind") == Book.Kind.novel) - // .including(optional: Book.author) - // .including(optional: Book.translator) - // .annotated(with: Book.awards.count) - // - // ... generates the following SQL, where all identifiers are correctly - // disambiguated and qualified: - // - // SELECT book.*, person1.*, person2.*, COUNT(DISTINCT award.id) - // FROM book - // LEFT JOIN person person1 ON person1.id = book.authorId - // LEFT JOIN person person2 ON person2.id = book.translatorId - // LEFT JOIN award ON award.bookId = book.id - // GROUP BY book.id - // WHERE book.kind = 'novel' - relation = SQLQualifiedRelation(query.relation) - - // Qualify group expressions and having clause with the relation alias. - // - // This turns `GROUP BY id` INTO `GROUP BY book.id`, and - // `HAVING MAX(year) < 2000` INTO `HAVING MAX(book.year) < 2000`. - let alias = relation.alias - groupPromise = query.groupPromise?.map { [alias] in $0.map { $0.qualifiedExpression(with: alias) } } - havingExpression = query.havingExpression?.qualifiedExpression(with: alias) - - // Preserve other flags - isDistinct = query.isDistinct - limit = query.limit - } - - func sql(_ db: Database, _ context: inout SQLGenerationContext) throws -> String { - var sql = "SELECT" - - if isDistinct { - sql += " DISTINCT" - } - - let selection = relation.selection - GRDBPrecondition(!selection.isEmpty, "Can't generate SQL with empty selection") - sql += " " + selection.map { $0.resultColumnSQL(&context) }.joined(separator: ", ") - - sql += try " FROM " + relation.source.sql(db, &context) - - for (_, join) in relation.joins { - sql += try " " + join.sql(db, &context, leftAlias: relation.alias) - } - - if let filter = try relation.filterPromise.resolve(db) { - sql += " WHERE " + filter.expressionSQL(&context) - } - - if let groupExpressions = try groupPromise?.resolve(db), !groupExpressions.isEmpty { - sql += " GROUP BY " + groupExpressions.map { $0.expressionSQL(&context) }.joined(separator: ", ") - } - - if let havingExpression = havingExpression { - sql += " HAVING " + havingExpression.expressionSQL(&context) - } - - let orderings = try relation.ordering.resolve(db) - if !orderings.isEmpty { - sql += " ORDER BY " + orderings.map { $0.orderingTermSQL(&context) }.joined(separator: ", ") - } - - if let limit = limit { - sql += " LIMIT " + limit.sql - } - - return sql - } - - func prepare(_ db: Database) throws -> (SelectStatement, RowAdapter?) { - return try (makeSelectStatement(db), rowAdapter(db)) - } - - func databaseRegion(_ db: Database) throws -> DatabaseRegion { - let statement = try makeSelectStatement(db) - let databaseRegion = statement.databaseRegion - - // Can we intersect the region with rowIds? - // - // Give up unless request feeds from a single database table - guard case .table(tableName: let tableName, alias: _) = relation.source else { - // TODO: try harder - return databaseRegion - } - - // Give up unless primary key is rowId - let primaryKeyInfo = try db.primaryKey(tableName) - guard primaryKeyInfo.isRowID else { - return databaseRegion - } - - // Give up unless there is a where clause - guard let filter = try relation.filterPromise.resolve(db) else { - return databaseRegion - } - - // The filter knows better - guard let rowIds = filter.matchedRowIds(rowIdName: primaryKeyInfo.rowIDColumn) else { - return databaseRegion - } - - // Database regions are case-insensitive: use the canonical table name - let canonicalTableName = try db.canonicalTableName(tableName) - return databaseRegion.tableIntersection(canonicalTableName, rowIds: rowIds) - } - - func makeDeleteStatement(_ db: Database) throws -> UpdateStatement { - if let groupExpressions = try groupPromise?.resolve(db), !groupExpressions.isEmpty { - // Programmer error - fatalError("Can't delete query with GROUP BY clause") - } - - guard havingExpression == nil else { - // Programmer error - fatalError("Can't delete query with HAVING clause") - } - - guard relation.joins.isEmpty else { - // Programmer error - fatalError("Can't delete query with JOIN clause") - } - - guard case .table = relation.source else { - // Programmer error - fatalError("Can't delete without any database table") - } - - var context = SQLGenerationContext.queryGenerationContext(aliases: relation.allAliases) - - var sql = try "DELETE FROM " + relation.source.sql(db, &context) - - if let filter = try relation.filterPromise.resolve(db) { - sql += " WHERE " + filter.expressionSQL(&context) - } - - if let limit = limit { - let orderings = try relation.ordering.resolve(db) - if !orderings.isEmpty { - sql += " ORDER BY " + orderings.map { $0.orderingTermSQL(&context) }.joined(separator: ", ") - } - - if Database.sqliteCompileOptions.contains("ENABLE_UPDATE_DELETE_LIMIT") { - sql += " LIMIT " + limit.sql - } else { - fatalError("Can't delete query with limit") - } - } - - let statement = try db.makeUpdateStatement(sql: sql) - statement.arguments = context.arguments! - return statement - } - - /// Returns a select statement - private func makeSelectStatement(_ db: Database) throws -> SelectStatement { - // Build an SQK generation context with all aliases found in the query, - // so that we can disambiguate tables that are used several times with - // SQL aliases. - var context = SQLGenerationContext.queryGenerationContext(aliases: relation.allAliases) - - // Generate SQL - let sql = try self.sql(db, &context) - - // Compile & set arguments - let statement = try db.makeSelectStatement(sql: sql) - statement.arguments = context.arguments! // not nil for this kind of context - return statement - } - - /// Returns the row adapter which presents the fetched rows according to the - /// tree of joined relations. - /// - /// The adapter is nil for queries without any included relation, - /// because the fetched rows don't need any processing: - /// - /// // SELECT * FROM book - /// let request = Book.all() - /// for row in try Row.fetchAll(db, request) { - /// row // [id:1, title:"Moby-Dick"] - /// let book = Book(row: row) - /// } - /// - /// But as soon as the selection includes columns of a included relation, - /// we need an adapter: - /// - /// // SELECT book.*, author.* FROM book JOIN author ON author.id = book.authorId - /// let request = Book.including(required: Book.author) - /// for row in try Row.fetchAll(db, request) { - /// row // [id:1, title:"Moby-Dick"] - /// let book = Book(row: row) - /// - /// row.scopes["author"] // [id:12, name:"Herman Melville"] - /// let author: Author = row["author"] - /// } - private func rowAdapter(_ db: Database) throws -> RowAdapter? { - return try relation.rowAdapter(db, fromIndex: 0)?.adapter - } -} - -/// A "qualified" relation, where all tables are identified with a table alias. -/// -/// SELECT ... FROM ... AS ... JOIN ... WHERE ... ORDER BY ... -/// | | | | | | -/// | | | | | • ordering -/// | | | | • filterPromise -/// | | | • joins -/// | | • alias -/// | • source -/// • fullSelection -private struct SQLQualifiedRelation { - /// The alias for the relation - /// - /// SELECT ... FROM ... AS ... JOIN ... WHERE ... ORDER BY ... - /// | - /// • alias - let alias: TableAlias - - /// All aliases, including aliases of joined relations - var allAliases: [TableAlias] { - var aliases = [alias] - for join in joins.values { - aliases.append(contentsOf: join.relation.allAliases) - } - aliases.append(contentsOf: source.allAliases) - return aliases - } - - /// The source - /// - /// SELECT ... FROM ... AS ... JOIN ... WHERE ... ORDER BY ... - /// | - /// • source - let source: SQLQualifiedSource - - /// The selection, not including selection of joined relations - private let ownSelection: [SQLSelectable] - - /// The full selection, including selection of joined relations - /// - /// SELECT ... FROM ... AS ... JOIN ... WHERE ... ORDER BY ... - /// | - /// • fullSelection - var selection: [SQLSelectable] { - return joins.reduce(into: ownSelection) { - $0.append(contentsOf: $1.value.relation.selection) - } - } - - /// The filtering clause - /// - /// SELECT ... FROM ... AS ... JOIN ... WHERE ... ORDER BY ... - /// | - /// • filterPromise - let filterPromise: DatabasePromise - - /// The ordering, not including ordering of joined relations - private let ownOrdering: SQLRelation.Ordering - - /// The full ordering, including orderings of joined relations - /// - /// SELECT ... FROM ... AS ... JOIN ... WHERE ... ORDER BY ... - /// | - /// • ordering - var ordering: SQLRelation.Ordering { - return joins.reduce(ownOrdering) { - $0.appending($1.value.relation.ordering) - } - } - - /// The joins - /// - /// SELECT ... FROM ... AS ... JOIN ... WHERE ... ORDER BY ... - /// | - /// • joins - let joins: OrderedDictionary - - init(_ relation: SQLRelation) { - // Qualify the source, so that it be disambiguated with an SQL alias - // if needed (when a select query uses the same table several times). - // This disambiguation job will be actually performed by - // SQLGenerationContext, when the SQLSelectQueryGenerator which owns - // this SQLQualifiedRelation generates SQL. - source = SQLQualifiedSource(relation.source) - let alias = source.alias - self.alias = alias - - // Qualify all joins, selection, filter, and ordering, so that all - // identifiers can be correctly disambiguated and qualified. - joins = relation.children.compactMapValues { child -> SQLQualifiedJoin? in - let kind: SQLQualifiedJoin.Kind - switch child.kind { - case .oneRequired: - kind = .innerJoin - case .oneOptional: - kind = .leftJoin - case .allPrefetched, .allNotPrefetched: - // This relation child is not fetched with an SQL join. - return nil - } - - return SQLQualifiedJoin( - kind: kind, - condition: child.condition, - relation: SQLQualifiedRelation(child.relation)) - } - ownSelection = relation.selection.map { $0.qualifiedSelectable(with: alias) } - filterPromise = relation.filterPromise.map { [alias] in $0?.qualifiedExpression(with: alias) } - ownOrdering = relation.ordering.qualified(with: alias) - } - - /// See SQLQueryGenerator.rowAdapter(_:) - /// - /// - parameter db: A database connection. - /// - parameter startIndex: The index of the leftmost selected column of - /// this relation in a full SQL query. `startIndex` is 0 for the relation - /// at the root of a SQLQueryGenerator (as opposed to the - /// joined relations). - /// - returns: An optional tuple made of a RowAdapter and the index past the - /// rightmost selected column of this relation. Nil is returned if this - /// relations does not need any row adapter. - func rowAdapter(_ db: Database, fromIndex startIndex: Int) throws -> (adapter: RowAdapter, endIndex: Int)? { - // Root relation && no join => no need for any adapter - if startIndex == 0 && joins.isEmpty { - return nil - } - - // The number of columns in own selection. Columns selected by joined - // relations are appended after. - let selectionWidth = try ownSelection - .map { try $0.columnCount(db) } - .reduce(0, +) - - // Recursively build adapters for each joined relation with a selection. - // Name them according to the join keys. - var endIndex = startIndex + selectionWidth - var scopes: [String: RowAdapter] = [:] - for (key, join) in joins { - if let (joinAdapter, joinEndIndex) = try join.relation.rowAdapter(db, fromIndex: endIndex) { - scopes[key] = joinAdapter - endIndex = joinEndIndex - } - } - - // (Root relation || empty selection) && no included relation => no need for any adapter - if (startIndex == 0 || selectionWidth == 0) && scopes.isEmpty { - return nil - } - - // Build a RangeRowAdapter extended with the adapters of joined relations. - // - // // SELECT book.*, author.* FROM book JOIN author ON author.id = book.authorId - // let request = Book.including(required: Book.author) - // for row in try Row.fetchAll(db, request) { - // - // The RangeRowAdapter hides the columns appended by joined relations: - // - // row // [id:1, title:"Moby-Dick"] - // let book = Book(row: row) - // - // Scopes give access to those joined relations: - // - // row.scopes["author"] // [id:12, name:"Herman Melville"] - // let author: Author = row["author"] - // } - let rangeAdapter = RangeRowAdapter(startIndex ..< (startIndex + selectionWidth)) - let adapter = rangeAdapter.addingScopes(scopes) - - return (adapter: adapter, endIndex: endIndex) - } -} - -/// A "qualified" source, where all tables are identified with a table alias. -private enum SQLQualifiedSource { - case table(tableName: String, alias: TableAlias) - indirect case query(SQLQueryGenerator) - - var alias: TableAlias { - switch self { - case .table(_, let alias): - return alias - case .query(let query): - return query.relation.alias - } - } - - var allAliases: [TableAlias] { - switch self { - case .table(_, let alias): - return [alias] - case .query(let query): - return query.relation.allAliases - } - } - - init(_ source: SQLSource) { - switch source { - case .table(let tableName, let alias): - let alias = alias ?? TableAlias(tableName: tableName) - self = .table(tableName: tableName, alias: alias) - case .query(let query): - self = .query(SQLQueryGenerator(query)) - } - } - - func sql(_ db: Database, _ context: inout SQLGenerationContext) throws -> String { - switch self { - case .table(let tableName, let alias): - if let aliasName = context.aliasName(for: alias) { - return "\(tableName.quotedDatabaseIdentifier) \(aliasName.quotedDatabaseIdentifier)" - } else { - return "\(tableName.quotedDatabaseIdentifier)" - } - case .query(let query): - return try "(\(query.sql(db, &context)))" - } - } -} - -/// A "qualified" join, where all tables are identified with a table alias. -private struct SQLQualifiedJoin { - enum Kind: String { - case leftJoin = "LEFT JOIN" - case innerJoin = "JOIN" - } - let kind: Kind - let condition: SQLAssociationCondition - let relation: SQLQualifiedRelation - - func sql(_ db: Database,_ context: inout SQLGenerationContext, leftAlias: TableAlias) throws -> String { - return try sql(db, &context, leftAlias: leftAlias, allowingInnerJoin: true) - } - - private func sql(_ db: Database,_ context: inout SQLGenerationContext, leftAlias: TableAlias, allowingInnerJoin allowsInnerJoin: Bool) throws -> String { - var allowsInnerJoin = allowsInnerJoin - var sql = "" - - switch self.kind { - case .innerJoin: - guard allowsInnerJoin else { - // TODO: chainOptionalRequired - fatalError("Not implemented: chaining a required association behind an optional association") - } - case .leftJoin: - allowsInnerJoin = false - } - sql += kind.rawValue - sql += try " " + relation.source.sql(db, &context) - - let rightAlias = relation.alias - let filters = try [ - condition.joinExpression(db, leftAlias: leftAlias, rightAlias: rightAlias), - relation.filterPromise.resolve(db) - ].compactMap { $0 } - if !filters.isEmpty { - sql += " ON " + filters.joined(operator: .and).expressionSQL(&context) - } - - for (_, join) in relation.joins { - sql += try " " + join.sql(db, &context, leftAlias: rightAlias, allowingInnerJoin: allowsInnerJoin) - } - - return sql - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLInterpolation+QueryInterface.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLInterpolation+QueryInterface.swift deleted file mode 100755 index 1b16bed..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/SQLInterpolation+QueryInterface.swift +++ /dev/null @@ -1,149 +0,0 @@ -#if swift(>=5.0) -/// :nodoc: -extension SQLInterpolation { - /// Appends the table name of the record type. - /// - /// // SELECT * FROM player - /// let request: SQLRequest = "SELECT * FROM \(Player.self)" - public mutating func appendInterpolation(_ table: T.Type) { - sql += table.databaseTableName.quotedDatabaseIdentifier - } - - /// Appends the table name of the record. - /// - /// // INSERT INTO player ... - /// let player: Player = ... - /// let request: SQLRequest = "INSERT INTO \(tableOf: player) ..." - public mutating func appendInterpolation(tableOf record: T) { - sql += type(of: record).databaseTableName.quotedDatabaseIdentifier - } - - /// Appends the selectable SQL. - /// - /// // SELECT * FROM player - /// let request: SQLRequest = """ - /// SELECT \(AllColumns()) FROM player - /// """ - public mutating func appendInterpolation(_ selection: SQLSelectable) { - sql += selection.resultColumnSQL(&context) - } - - /// Appends the expression SQL. - /// - /// // SELECT name FROM player - /// let request: SQLRequest = """ - /// SELECT \(Column("name")) FROM player - /// """ - public mutating func appendInterpolation(_ expressible: SQLExpressible & SQLSelectable & SQLOrderingTerm) { - sql += expressible.sqlExpression.expressionSQL(&context) - } - - /// Appends the name of the coding key. - /// - /// // SELECT name FROM player - /// let request: SQLRequest = " - /// SELECT \(CodingKey.name) FROM player - /// """ - public mutating func appendInterpolation(_ codingKey: SQLExpressible & SQLSelectable & SQLOrderingTerm & CodingKey) { - sql += codingKey.sqlExpression.expressionSQL(&context) - } - - /// Appends the expression SQL, or NULL if it is nil. - /// - /// // SELECT score + ? FROM player - /// let bonus = 1000 - /// let request: SQLRequest = """ - /// SELECT score + \(bonus) FROM player - /// """ - public mutating func appendInterpolation(_ expressible: T?) { - if let expressible = expressible { - sql += expressible.sqlExpression.expressionSQL(&context) - } else { - sql += "NULL" - } - } - - /// Appends the name of the coding key. - /// - /// // SELECT name FROM player - /// let request: SQLRequest = """ - /// SELECT \(CodingKey.name) FROM player - /// """ - public mutating func appendInterpolation(_ codingKey: CodingKey) { - appendInterpolation(Column(codingKey.stringValue)) - } - - /// Appends a sequence of expressions, wrapped in parentheses. - /// - /// // SELECT * FROM player WHERE id IN (?,?,?) - /// let ids = [1, 2, 3] - /// let request: SQLRequest = """ - /// SELECT * FROM player WHERE id IN \(ids) - /// """ - /// - /// If the sequence is empty, an empty subquery is appended: - /// - /// // SELECT * FROM player WHERE id IN (SELECT NULL WHERE NULL) - /// let ids: [Int] = [] - /// let request: SQLRequest = """ - /// SELECT * FROM player WHERE id IN \(ids) - /// """ - public mutating func appendInterpolation(_ sequence: S) where S: Sequence, S.Element: SQLExpressible { - appendInterpolation(sequence.lazy.map { $0.sqlExpression }) - } - - /// Appends a sequence of expressions, wrapped in parentheses. - /// - /// // SELECT * FROM player WHERE a IN (b, c + 2) - /// let expressions = [Column("b"), Column("c") + 2] - /// let request: SQLRequest = """ - /// SELECT * FROM player WHERE a IN \(expressions) - /// """ - /// - /// If the sequence is empty, an empty subquery is appended: - /// - /// // SELECT * FROM player WHERE a IN (SELECT NULL WHERE NULL) - /// let expressions: [SQLExpression] = [] - /// let request: SQLRequest = """ - /// SELECT * FROM player WHERE a IN \(expressions) - /// """ - public mutating func appendInterpolation(_ sequence: S) where S: Sequence, S.Element == SQLExpression { - sql += "(" - var first = true - for element in sequence { - if first { - first = false - } else { - sql += "," - } - appendInterpolation(element) - } - if first { - sql += "SELECT NULL WHERE NULL" - } - sql += ")" - } - - /// Appends the ordering SQL. - /// - /// // SELECT name FROM player ORDER BY name DESC - /// let request: SQLRequest = """ - /// SELECT * FROM player ORDER BY \(Column("name").desc) - /// """ - public mutating func appendInterpolation(_ ordering: SQLOrderingTerm) { - sql += ordering.orderingTermSQL(&context) - } - - /// Appends the request SQL, wrapped in parentheses - /// - /// // SELECT name FROM player WHERE score = (SELECT MAX(score) FROM player) - /// let subQuery: SQLRequest = "SELECT MAX(score) FROM player" - /// let request: SQLRequest = """ - /// SELECT * FROM player WHERE score = \(subQuery) - /// """ - public mutating func appendInterpolation(_ request: SQLRequest) { - sql += "(" + request.sql + ")" - arguments += request.arguments - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Schema/TableDefinition.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Schema/TableDefinition.swift deleted file mode 100755 index d6203ca..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Schema/TableDefinition.swift +++ /dev/null @@ -1,950 +0,0 @@ -extension Database { - - // MARK: - Database Schema - - #if GRDBCUSTOMSQLITE || GRDBCIPHER - /// Creates a database table. - /// - /// try db.create(table: "place") { t in - /// t.autoIncrementedPrimaryKey("id") - /// t.column("title", .text) - /// t.column("favorite", .boolean).notNull().default(false) - /// t.column("longitude", .double).notNull() - /// t.column("latitude", .double).notNull() - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html and - /// https://www.sqlite.org/withoutrowid.html - /// - /// - parameters: - /// - name: The table name. - /// - temporary: If true, creates a temporary table. - /// - ifNotExists: If false (the default), an error is thrown if the - /// table already exists. Otherwise, the table is created unless it - /// already exists. - /// - withoutRowID: If true, uses WITHOUT ROWID optimization. - /// - body: A closure that defines table columns and constraints. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func create(table name: String, temporary: Bool = false, ifNotExists: Bool = false, withoutRowID: Bool = false, body: (TableDefinition) -> Void) throws { - let definition = TableDefinition(name: name, temporary: temporary, ifNotExists: ifNotExists, withoutRowID: withoutRowID) - body(definition) - let sql = try definition.sql(self) - try execute(sql: sql) - } - #else - /// Creates a database table. - /// - /// try db.create(table: "place") { t in - /// t.autoIncrementedPrimaryKey("id") - /// t.column("title", .text) - /// t.column("favorite", .boolean).notNull().default(false) - /// t.column("longitude", .double).notNull() - /// t.column("latitude", .double).notNull() - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html and - /// https://www.sqlite.org/withoutrowid.html - /// - /// - parameters: - /// - name: The table name. - /// - temporary: If true, creates a temporary table. - /// - ifNotExists: If false (the default), an error is thrown if the - /// table already exists. Otherwise, the table is created unless it - /// already exists. - /// - withoutRowID: If true, uses WITHOUT ROWID optimization. - /// - body: A closure that defines table columns and constraints. - /// - throws: A DatabaseError whenever an SQLite error occurs. - @available(OSX 10.10, *) - public func create(table name: String, temporary: Bool = false, ifNotExists: Bool = false, withoutRowID: Bool, body: (TableDefinition) -> Void) throws { - // WITHOUT ROWID was added in SQLite 3.8.2 http://www.sqlite.org/changes.html#version_3_8_2 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - let definition = TableDefinition(name: name, temporary: temporary, ifNotExists: ifNotExists, withoutRowID: withoutRowID) - body(definition) - let sql = try definition.sql(self) - try execute(sql: sql) - } - - /// Creates a database table. - /// - /// try db.create(table: "place") { t in - /// t.autoIncrementedPrimaryKey("id") - /// t.column("title", .text) - /// t.column("favorite", .boolean).notNull().default(false) - /// t.column("longitude", .double).notNull() - /// t.column("latitude", .double).notNull() - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html - /// - /// - parameters: - /// - name: The table name. - /// - temporary: If true, creates a temporary table. - /// - ifNotExists: If false (the default), an error is thrown if the - /// table already exists. Otherwise, the table is created unless it - /// already exists. - /// - body: A closure that defines table columns and constraints. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func create(table name: String, temporary: Bool = false, ifNotExists: Bool = false, body: (TableDefinition) -> Void) throws { - let definition = TableDefinition(name: name, temporary: temporary, ifNotExists: ifNotExists, withoutRowID: false) - body(definition) - let sql = try definition.sql(self) - try execute(sql: sql) - } - #endif - - /// Renames a database table. - /// - /// See https://www.sqlite.org/lang_altertable.html - /// - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func rename(table name: String, to newName: String) throws { - try execute(sql: "ALTER TABLE \(name.quotedDatabaseIdentifier) RENAME TO \(newName.quotedDatabaseIdentifier)") - } - - /// Modifies a database table. - /// - /// try db.alter(table: "player") { t in - /// t.add(column: "url", .text) - /// } - /// - /// See https://www.sqlite.org/lang_altertable.html - /// - /// - parameters: - /// - name: The table name. - /// - body: A closure that defines table alterations. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func alter(table name: String, body: (TableAlteration) -> Void) throws { - let alteration = TableAlteration(name: name) - body(alteration) - let sql = try alteration.sql(self) - try execute(sql: sql) - } - - /// Deletes a database table. - /// - /// See https://www.sqlite.org/lang_droptable.html - /// - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func drop(table name: String) throws { - try execute(sql: "DROP TABLE \(name.quotedDatabaseIdentifier)") - } - - #if GRDBCUSTOMSQLITE || GRDBCIPHER - /// Creates an index. - /// - /// try db.create(index: "playerByEmail", on: "player", columns: ["email"]) - /// - /// SQLite can also index expressions (https://www.sqlite.org/expridx.html) - /// and use specific collations. To create such an index, use a raw SQL - /// query. - /// - /// try db.execute(sql: "CREATE INDEX ...") - /// - /// See https://www.sqlite.org/lang_createindex.html - /// - /// - parameters: - /// - name: The index name. - /// - table: The name of the indexed table. - /// - columns: The indexed columns. - /// - unique: If true, creates a unique index. - /// - ifNotExists: If false, no error is thrown if index already exists. - /// - condition: If not nil, creates a partial index - /// (see https://www.sqlite.org/partialindex.html). - public func create(index name: String, on table: String, columns: [String], unique: Bool = false, ifNotExists: Bool = false, condition: SQLExpressible? = nil) throws { - // Partial indexes were introduced in SQLite 3.8.0 http://www.sqlite.org/changes.html#version_3_8_0 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - let definition = IndexDefinition(name: name, table: table, columns: columns, unique: unique, ifNotExists: ifNotExists, condition: condition?.sqlExpression) - let sql = definition.sql() - try execute(sql: sql) - } - #else - /// Creates an index. - /// - /// try db.create(index: "playerByEmail", on: "player", columns: ["email"]) - /// - /// SQLite can also index expressions (https://www.sqlite.org/expridx.html) - /// and use specific collations. To create such an index, use a raw SQL - /// query. - /// - /// try db.execute(sql: "CREATE INDEX ...") - /// - /// See https://www.sqlite.org/lang_createindex.html - /// - /// - parameters: - /// - name: The index name. - /// - table: The name of the indexed table. - /// - columns: The indexed columns. - /// - unique: If true, creates a unique index. - /// - ifNotExists: If false, no error is thrown if index already exists. - public func create(index name: String, on table: String, columns: [String], unique: Bool = false, ifNotExists: Bool = false) throws { - // Partial indexes were introduced in SQLite 3.8.0 http://www.sqlite.org/changes.html#version_3_8_0 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - let definition = IndexDefinition(name: name, table: table, columns: columns, unique: unique, ifNotExists: ifNotExists, condition: nil) - let sql = definition.sql() - try execute(sql: sql) - } - - /// Creates a partial index. - /// - /// try db.create(index: "playerByEmail", on: "player", columns: ["email"], condition: Column("email") != nil) - /// - /// See https://www.sqlite.org/lang_createindex.html, and - /// https://www.sqlite.org/partialindex.html - /// - /// - parameters: - /// - name: The index name. - /// - table: The name of the indexed table. - /// - columns: The indexed columns. - /// - unique: If true, creates a unique index. - /// - ifNotExists: If false, no error is thrown if index already exists. - /// - condition: The condition that indexed rows must verify. - @available(OSX 10.10, *) - public func create(index name: String, on table: String, columns: [String], unique: Bool = false, ifNotExists: Bool = false, condition: SQLExpressible) throws { - // Partial indexes were introduced in SQLite 3.8.0 http://www.sqlite.org/changes.html#version_3_8_0 - // It is available from iOS 8.2 and OS X 10.10 https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) - let definition = IndexDefinition(name: name, table: table, columns: columns, unique: unique, ifNotExists: ifNotExists, condition: condition.sqlExpression) - let sql = definition.sql() - try execute(sql: sql) - } - #endif - - /// Deletes a database index. - /// - /// See https://www.sqlite.org/lang_dropindex.html - /// - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func drop(index name: String) throws { - try execute(sql: "DROP INDEX \(name.quotedDatabaseIdentifier)") - } - - /// Delete and recreate from scratch all indices that use this collation. - /// - /// This method is useful when the definition of a collation sequence - /// has changed. - /// - /// See https://www.sqlite.org/lang_reindex.html - /// - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func reindex(collation: Database.CollationName) throws { - try execute(sql: "REINDEX \(collation.rawValue)") - } - - /// Delete and recreate from scratch all indices that use this collation. - /// - /// This method is useful when the definition of a collation sequence - /// has changed. - /// - /// See https://www.sqlite.org/lang_reindex.html - /// - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func reindex(collation: DatabaseCollation) throws { - try reindex(collation: Database.CollationName(collation.name)) - } -} - -/// The TableDefinition class lets you define table columns and constraints. -/// -/// You don't create instances of this class. Instead, you use the Database -/// `create(table:)` method: -/// -/// try db.create(table: "player") { t in // t is TableDefinition -/// t.column(...) -/// } -/// -/// See https://www.sqlite.org/lang_createtable.html -public final class TableDefinition { - private typealias KeyConstraint = (columns: [String], conflictResolution: Database.ConflictResolution?) - - private let name: String - private let temporary: Bool - private let ifNotExists: Bool - private let withoutRowID: Bool - private var columns: [ColumnDefinition] = [] - private var primaryKeyConstraint: KeyConstraint? - private var uniqueKeyConstraints: [KeyConstraint] = [] - private var foreignKeyConstraints: [(columns: [String], table: String, destinationColumns: [String]?, deleteAction: Database.ForeignKeyAction?, updateAction: Database.ForeignKeyAction?, deferred: Bool)] = [] - private var checkConstraints: [SQLExpression] = [] - - init(name: String, temporary: Bool, ifNotExists: Bool, withoutRowID: Bool) { - self.name = name - self.temporary = temporary - self.ifNotExists = ifNotExists - self.withoutRowID = withoutRowID - } - - /// Defines the auto-incremented primary key. - /// - /// try db.create(table: "player") { t in - /// t.autoIncrementedPrimaryKey("id") - /// } - /// - /// The auto-incremented primary key is an integer primary key that - /// automatically generates unused values when you do not explicitly - /// provide one, and prevents the reuse of ids over the lifetime of - /// the database. - /// - /// **It is the preferred way to define a numeric primary key**. - /// - /// The fact that an auto-incremented primary key prevents the reuse of - /// ids is an excellent guard against data races that could happen when your - /// application processes ids in an asynchronous way. The auto-incremented - /// primary key provides the guarantee that a given id can't reference a row - /// that is different from the one it used to be at the beginning of the - /// asynchronous process, even if this row gets deleted and a new one is - /// inserted in between. - /// - /// See https://www.sqlite.org/lang_createtable.html#primkeyconst and - /// https://www.sqlite.org/lang_createtable.html#rowid - /// - /// - parameter conflictResolution: An optional conflict resolution - /// (see https://www.sqlite.org/lang_conflict.html). - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func autoIncrementedPrimaryKey(_ name: String, onConflict conflictResolution: Database.ConflictResolution? = nil) -> ColumnDefinition { - return column(name, .integer).primaryKey(onConflict: conflictResolution, autoincrement: true) - } - - /// Appends a table column. - /// - /// try db.create(table: "player") { t in - /// t.column("name", .text) - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#tablecoldef - /// - /// - parameter name: the column name. - /// - parameter type: the eventual column type. - /// - returns: An ColumnDefinition that allows you to refine the - /// column definition. - @discardableResult - public func column(_ name: String, _ type: Database.ColumnType? = nil) -> ColumnDefinition { - let column = ColumnDefinition(name: name, type: type) - columns.append(column) - return column - } - - /// Defines the table primary key. - /// - /// try db.create(table: "citizenship") { t in - /// t.column("citizenID", .integer) - /// t.column("countryCode", .text) - /// t.primaryKey(["citizenID", "countryCode"]) - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#primkeyconst and - /// https://www.sqlite.org/lang_createtable.html#rowid - /// - /// - parameter columns: The primary key columns. - /// - parameter conflictResolution: An optional conflict resolution - /// (see https://www.sqlite.org/lang_conflict.html). - public func primaryKey(_ columns: [String], onConflict conflictResolution: Database.ConflictResolution? = nil) { - guard primaryKeyConstraint == nil else { - // Programmer error - fatalError("can't define several primary keys") - } - primaryKeyConstraint = (columns: columns, conflictResolution: conflictResolution) - } - - /// Adds a unique key. - /// - /// try db.create(table: "place") { t in - /// t.column("latitude", .double) - /// t.column("longitude", .double) - /// t.uniqueKey(["latitude", "longitude"]) - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#uniqueconst - /// - /// - parameter columns: The unique key columns. - /// - parameter conflictResolution: An optional conflict resolution - /// (see https://www.sqlite.org/lang_conflict.html). - public func uniqueKey(_ columns: [String], onConflict conflictResolution: Database.ConflictResolution? = nil) { - uniqueKeyConstraints.append((columns: columns, conflictResolution: conflictResolution)) - } - - /// Adds a foreign key. - /// - /// try db.create(table: "passport") { t in - /// t.column("issueDate", .date) - /// t.column("citizenID", .integer) - /// t.column("countryCode", .text) - /// t.foreignKey(["citizenID", "countryCode"], references: "citizenship", onDelete: .cascade) - /// } - /// - /// See https://www.sqlite.org/foreignkeys.html - /// - /// - parameters: - /// - columns: The foreign key columns. - /// - table: The referenced table. - /// - destinationColumns: The columns in the referenced table. If not - /// specified, the columns of the primary key of the referenced table - /// are used. - /// - deleteAction: Optional action when the referenced row is deleted. - /// - updateAction: Optional action when the referenced row is updated. - /// - deferred: If true, defines a deferred foreign key constraint. - /// See https://www.sqlite.org/foreignkeys.html#fk_deferred. - public func foreignKey(_ columns: [String], references table: String, columns destinationColumns: [String]? = nil, onDelete deleteAction: Database.ForeignKeyAction? = nil, onUpdate updateAction: Database.ForeignKeyAction? = nil, deferred: Bool = false) { - foreignKeyConstraints.append((columns: columns, table: table, destinationColumns: destinationColumns, deleteAction: deleteAction, updateAction: updateAction, deferred: deferred)) - } - - /// Adds a CHECK constraint. - /// - /// try db.create(table: "player") { t in - /// t.column("personalPhone", .text) - /// t.column("workPhone", .text) - /// let personalPhone = Column("personalPhone") - /// let workPhone = Column("workPhone") - /// t.check(personalPhone != nil || workPhone != nil) - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#ckconst - /// - /// - parameter condition: The checked condition - public func check(_ condition: SQLExpressible) { - checkConstraints.append(condition.sqlExpression) - } - - /// Adds a CHECK constraint. - /// - /// try db.create(table: "player") { t in - /// t.column("personalPhone", .text) - /// t.column("workPhone", .text) - /// t.check(sql: "personalPhone IS NOT NULL OR workPhone IS NOT NULL") - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#ckconst - /// - /// - parameter sql: An SQL snippet - public func check(sql: String) { - // We do not want to wrap the SQL snippet inside parentheses around the - // checked SQL. This is why we use the "unsafeLiteral" initializer. - checkConstraints.append(SQLExpressionLiteral(unsafeLiteral: SQLLiteral(sql: sql))) - } - - fileprivate func sql(_ db: Database) throws -> String { - var statements: [String] = [] - - do { - var chunks: [String] = [] - chunks.append("CREATE") - if temporary { - chunks.append("TEMPORARY") - } - chunks.append("TABLE") - if ifNotExists { - chunks.append("IF NOT EXISTS") - } - chunks.append(name.quotedDatabaseIdentifier) - - let primaryKeyColumns: [String] - if let (columns, _) = primaryKeyConstraint { - primaryKeyColumns = columns - } else if let index = columns.firstIndex(where: { $0.primaryKey != nil }) { - primaryKeyColumns = [columns[index].name] - } else { - // WITHOUT ROWID optimization requires a primary key. If the - // user sets withoutRowID, but does not define a primary key, - // this is undefined behavior. - // - // We thus can use the rowId column even when the withoutRowID - // flag is set ;-) - primaryKeyColumns = [Column.rowID.name] - } - - do { - var items: [String] = [] - try items.append(contentsOf: columns.map { try $0.sql(db, tableName: name, primaryKeyColumns: primaryKeyColumns) }) - - if let (columns, conflictResolution) = primaryKeyConstraint { - var chunks: [String] = [] - chunks.append("PRIMARY KEY") - chunks.append("(\((columns.map { $0.quotedDatabaseIdentifier } as [String]).joined(separator: ", ")))") - if let conflictResolution = conflictResolution { - chunks.append("ON CONFLICT") - chunks.append(conflictResolution.rawValue) - } - items.append(chunks.joined(separator: " ")) - } - - for (columns, conflictResolution) in uniqueKeyConstraints { - var chunks: [String] = [] - chunks.append("UNIQUE") - chunks.append("(\((columns.map { $0.quotedDatabaseIdentifier } as [String]).joined(separator: ", ")))") - if let conflictResolution = conflictResolution { - chunks.append("ON CONFLICT") - chunks.append(conflictResolution.rawValue) - } - items.append(chunks.joined(separator: " ")) - } - - for (columns, table, destinationColumns, deleteAction, updateAction, deferred) in foreignKeyConstraints { - var chunks: [String] = [] - chunks.append("FOREIGN KEY") - chunks.append("(\((columns.map { $0.quotedDatabaseIdentifier } as [String]).joined(separator: ", ")))") - chunks.append("REFERENCES") - if let destinationColumns = destinationColumns { - chunks.append("\(table.quotedDatabaseIdentifier)(\((destinationColumns.map { $0.quotedDatabaseIdentifier } as [String]).joined(separator: ", ")))") - } else if table == name { - chunks.append("\(table.quotedDatabaseIdentifier)(\((primaryKeyColumns.map { $0.quotedDatabaseIdentifier } as [String]).joined(separator: ", ")))") - } else { - let primaryKey = try db.primaryKey(table) - chunks.append("\(table.quotedDatabaseIdentifier)(\((primaryKey.columns.map { $0.quotedDatabaseIdentifier } as [String]).joined(separator: ", ")))") - } - if let deleteAction = deleteAction { - chunks.append("ON DELETE") - chunks.append(deleteAction.rawValue) - } - if let updateAction = updateAction { - chunks.append("ON UPDATE") - chunks.append(updateAction.rawValue) - } - if deferred { - chunks.append("DEFERRABLE INITIALLY DEFERRED") - } - items.append(chunks.joined(separator: " ")) - } - - for checkExpression in checkConstraints { - var chunks: [String] = [] - chunks.append("CHECK") - chunks.append("(" + checkExpression.quotedSQL() + ")") - items.append(chunks.joined(separator: " ")) - } - - chunks.append("(\(items.joined(separator: ", ")))") - } - - if withoutRowID { - chunks.append("WITHOUT ROWID") - } - statements.append(chunks.joined(separator: " ")) - } - - let indexStatements = columns - .compactMap { $0.indexDefinition(in: name) } - .map { $0.sql() } - statements.append(contentsOf: indexStatements) - return statements.joined(separator: "; ") - } -} - -/// The TableAlteration class lets you alter database tables. -/// -/// You don't create instances of this class. Instead, you use the Database -/// `alter(table:)` method: -/// -/// try db.alter(table: "player") { t in // t is TableAlteration -/// t.add(column: ...) -/// } -/// -/// See https://www.sqlite.org/lang_altertable.html -public final class TableAlteration { - private let name: String - private var addedColumns: [ColumnDefinition] = [] - - init(name: String) { - self.name = name - } - - /// Appends a column to the table. - /// - /// try db.alter(table: "player") { t in - /// t.add(column: "url", .text) - /// } - /// - /// See https://www.sqlite.org/lang_altertable.html - /// - /// - parameter name: the column name. - /// - parameter type: the column type. - /// - returns: An ColumnDefinition that allows you to refine the - /// column definition. - @discardableResult - public func add(column name: String, _ type: Database.ColumnType? = nil) -> ColumnDefinition { - let column = ColumnDefinition(name: name, type: type) - addedColumns.append(column) - return column - } - - fileprivate func sql(_ db: Database) throws -> String { - var statements: [String] = [] - - for column in addedColumns { - var chunks: [String] = [] - chunks.append("ALTER TABLE") - chunks.append(name.quotedDatabaseIdentifier) - chunks.append("ADD COLUMN") - try chunks.append(column.sql(db, tableName: name, primaryKeyColumns: nil)) - let statement = chunks.joined(separator: " ") - statements.append(statement) - - if let indexDefinition = column.indexDefinition(in: name) { - statements.append(indexDefinition.sql()) - } - } - - return statements.joined(separator: "; ") - } -} - -/// The ColumnDefinition class lets you refine a table column. -/// -/// You get instances of this class when you create or alter a database table: -/// -/// try db.create(table: "player") { t in -/// t.column(...) // ColumnDefinition -/// } -/// -/// try db.alter(table: "player") { t in -/// t.add(column: ...) // ColumnDefinition -/// } -/// -/// See https://www.sqlite.org/lang_createtable.html and -/// https://www.sqlite.org/lang_altertable.html -public final class ColumnDefinition { - enum Index { - case none - case index - case unique(Database.ConflictResolution) - } - fileprivate let name: String - private let type: Database.ColumnType? - fileprivate var primaryKey: (conflictResolution: Database.ConflictResolution?, autoincrement: Bool)? - private var index: Index = .none - private var notNullConflictResolution: Database.ConflictResolution? - private var checkConstraints: [SQLExpression] = [] - private var foreignKeyConstraints: [(table: String, column: String?, deleteAction: Database.ForeignKeyAction?, updateAction: Database.ForeignKeyAction?, deferred: Bool)] = [] - private var defaultExpression: SQLExpression? - private var collationName: String? - - init(name: String, type: Database.ColumnType?) { - self.name = name - self.type = type - } - - /// Adds a primary key constraint on the column. - /// - /// try db.create(table: "player") { t in - /// t.column("id", .integer).primaryKey() - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#primkeyconst and - /// https://www.sqlite.org/lang_createtable.html#rowid - /// - /// - parameters: - /// - conflictResolution: An optional conflict resolution - /// (see https://www.sqlite.org/lang_conflict.html). - /// - autoincrement: If true, the primary key is autoincremented. - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func primaryKey(onConflict conflictResolution: Database.ConflictResolution? = nil, autoincrement: Bool = false) -> Self { - primaryKey = (conflictResolution: conflictResolution, autoincrement: autoincrement) - return self - } - - /// Adds a NOT NULL constraint on the column. - /// - /// try db.create(table: "player") { t in - /// t.column("name", .text).notNull() - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#notnullconst - /// - /// - parameter conflictResolution: An optional conflict resolution - /// (see https://www.sqlite.org/lang_conflict.html). - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func notNull(onConflict conflictResolution: Database.ConflictResolution? = nil) -> Self { - notNullConflictResolution = conflictResolution ?? .abort - return self - } - - /// Adds a UNIQUE constraint on the column. - /// - /// try db.create(table: "player") { t in - /// t.column("email", .text).unique() - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#uniqueconst - /// - /// - parameter conflictResolution: An optional conflict resolution - /// (see https://www.sqlite.org/lang_conflict.html). - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func unique(onConflict conflictResolution: Database.ConflictResolution? = nil) -> Self { - index = .unique(conflictResolution ?? .abort) - return self - } - - /// Adds an index of the column. - /// - /// try db.create(table: "player") { t in - /// t.column("email", .text).indexed() - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#uniqueconst - /// - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func indexed() -> Self { - if case .none = index { - self.index = .index - } - return self - } - - /// Adds a CHECK constraint on the column. - /// - /// try db.create(table: "player") { t in - /// t.column("name", .text).check { length($0) > 0 } - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#ckconst - /// - /// - parameter condition: A closure whose argument is an Column that - /// represents the defined column, and returns the expression to check. - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func check(_ condition: (Column) -> SQLExpressible) -> Self { - checkConstraints.append(condition(Column(name)).sqlExpression) - return self - } - - /// Adds a CHECK constraint on the column. - /// - /// try db.create(table: "player") { t in - /// t.column("name", .text).check(sql: "LENGTH(name) > 0") - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#ckconst - /// - /// - parameter sql: An SQL snippet. - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func check(sql: String) -> Self { - // We do not want to wrap the SQL snippet inside parentheses around the - // checked SQL. This is why we use the "unsafeLiteral" initializer. - checkConstraints.append(SQLExpressionLiteral(unsafeLiteral: SQLLiteral(sql: sql))) - return self - } - - /// Defines the default column value. - /// - /// try db.create(table: "player") { t in - /// t.column("name", .text).defaults(to: "Anonymous") - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#dfltval - /// - /// - parameter value: A DatabaseValueConvertible value. - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func defaults(to value: DatabaseValueConvertible) -> Self { - defaultExpression = value.sqlExpression - return self - } - - /// Defines the default column value. - /// - /// try db.create(table: "player") { t in - /// t.column("creationDate", .DateTime).defaults(sql: "CURRENT_TIMESTAMP") - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html#dfltval - /// - /// - parameter sql: An SQL snippet. - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func defaults(sql: String) -> Self { - // We do not want to wrap the SQL snippet inside parentheses around the - // checked SQL. This is why we use the "unsafeLiteral" initializer. - defaultExpression = SQLExpressionLiteral(unsafeLiteral: SQLLiteral(sql: sql)) - return self - } - - // Defines the default column collation. - /// - /// try db.create(table: "player") { t in - /// t.column("email", .text).collate(.nocase) - /// } - /// - /// See https://www.sqlite.org/datatype3.html#collation - /// - /// - parameter collation: An Database.CollationName. - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func collate(_ collation: Database.CollationName) -> Self { - collationName = collation.rawValue - return self - } - - // Defines the default column collation. - /// - /// try db.create(table: "player") { t in - /// t.column("name", .text).collate(.localizedCaseInsensitiveCompare) - /// } - /// - /// See https://www.sqlite.org/datatype3.html#collation - /// - /// - parameter collation: A custom DatabaseCollation. - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func collate(_ collation: DatabaseCollation) -> Self { - collationName = collation.name - return self - } - - /// Defines a foreign key. - /// - /// try db.create(table: "book") { t in - /// t.column("authorId", .integer).references("author", onDelete: .cascade) - /// } - /// - /// See https://www.sqlite.org/foreignkeys.html - /// - /// - parameters - /// - table: The referenced table. - /// - column: The column in the referenced table. If not specified, the - /// column of the primary key of the referenced table is used. - /// - deleteAction: Optional action when the referenced row is deleted. - /// - updateAction: Optional action when the referenced row is updated. - /// - deferred: If true, defines a deferred foreign key constraint. - /// See https://www.sqlite.org/foreignkeys.html#fk_deferred. - /// - returns: Self so that you can further refine the column definition. - @discardableResult - public func references(_ table: String, column: String? = nil, onDelete deleteAction: Database.ForeignKeyAction? = nil, onUpdate updateAction: Database.ForeignKeyAction? = nil, deferred: Bool = false) -> Self { - foreignKeyConstraints.append((table: table, column: column, deleteAction: deleteAction, updateAction: updateAction, deferred: deferred)) - return self - } - - fileprivate func sql(_ db: Database, tableName: String, primaryKeyColumns: [String]?) throws -> String { - var chunks: [String] = [] - chunks.append(name.quotedDatabaseIdentifier) - if let type = type { - chunks.append(type.rawValue) - } - - if let (conflictResolution, autoincrement) = primaryKey { - chunks.append("PRIMARY KEY") - if let conflictResolution = conflictResolution { - chunks.append("ON CONFLICT") - chunks.append(conflictResolution.rawValue) - } - if autoincrement { - chunks.append("AUTOINCREMENT") - } - } - - switch notNullConflictResolution { - case .none: - break - case .abort?: - chunks.append("NOT NULL") - case let conflictResolution?: - chunks.append("NOT NULL ON CONFLICT") - chunks.append(conflictResolution.rawValue) - } - - switch index { - case .none: - break - case .unique(let conflictResolution): - switch conflictResolution { - case .abort: - chunks.append("UNIQUE") - default: - chunks.append("UNIQUE ON CONFLICT") - chunks.append(conflictResolution.rawValue) - } - case .index: - break - } - - for checkConstraint in checkConstraints { - chunks.append("CHECK") - chunks.append("(" + checkConstraint.quotedSQL() + ")") - } - - if let defaultExpression = defaultExpression { - chunks.append("DEFAULT") - chunks.append(defaultExpression.quotedSQL()) - } - - if let collationName = collationName { - chunks.append("COLLATE") - chunks.append(collationName) - } - - for (table, column, deleteAction, updateAction, deferred) in foreignKeyConstraints { - chunks.append("REFERENCES") - if let column = column { - // explicit reference - chunks.append("\(table.quotedDatabaseIdentifier)(\(column.quotedDatabaseIdentifier))") - } else if table.lowercased() == tableName.lowercased() { - // implicit autoreference - let primaryKeyColumns = try primaryKeyColumns ?? db.primaryKey(table).columns - chunks.append("\(table.quotedDatabaseIdentifier)(\((primaryKeyColumns.map { $0.quotedDatabaseIdentifier } as [String]).joined(separator: ", ")))") - } else { - // implicit external reference - let primaryKeyColumns = try db.primaryKey(table).columns - chunks.append("\(table.quotedDatabaseIdentifier)(\((primaryKeyColumns.map { $0.quotedDatabaseIdentifier } as [String]).joined(separator: ", ")))") - } - if let deleteAction = deleteAction { - chunks.append("ON DELETE") - chunks.append(deleteAction.rawValue) - } - if let updateAction = updateAction { - chunks.append("ON UPDATE") - chunks.append(updateAction.rawValue) - } - if deferred { - chunks.append("DEFERRABLE INITIALLY DEFERRED") - } - } - - return chunks.joined(separator: " ") - } - - fileprivate func indexDefinition(in table: String) -> IndexDefinition? { - switch index { - case .none: return nil - case .unique: return nil - case .index: - return IndexDefinition( - name: "\(table)_on_\(name)", - table: table, - columns: [name], - unique: false, - ifNotExists: false, - condition: nil) - } - } -} - -private struct IndexDefinition { - let name: String - let table: String - let columns: [String] - let unique: Bool - let ifNotExists: Bool - let condition: SQLExpression? - - func sql() -> String { - var chunks: [String] = [] - chunks.append("CREATE") - if unique { - chunks.append("UNIQUE") - } - chunks.append("INDEX") - if ifNotExists { - chunks.append("IF NOT EXISTS") - } - chunks.append(name.quotedDatabaseIdentifier) - chunks.append("ON") - chunks.append("\(table.quotedDatabaseIdentifier)(\((columns.map { $0.quotedDatabaseIdentifier } as [String]).joined(separator: ", ")))") - if let condition = condition { - chunks.append("WHERE") - chunks.append(condition.quotedSQL()) - } - return chunks.joined(separator: " ") - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Schema/VirtualTableModule.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/Schema/VirtualTableModule.swift deleted file mode 100755 index 06eaa3e..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/Schema/VirtualTableModule.swift +++ /dev/null @@ -1,128 +0,0 @@ -/// The protocol for SQLite virtual table modules. It lets you define a DSL for -/// the `Database.create(virtualTable:using:)` method: -/// -/// let module = ... -/// try db.create(virtualTable: "item", using: module) { t in -/// ... -/// } -/// -/// GRDB ships with three concrete classes that implement this protocol: FTS3, -/// FTS4 and FTS5. -public protocol VirtualTableModule { - - /// The type of the closure argument in the - /// `Database.create(virtualTable:using:)` method: - /// - /// try db.create(virtualTable: "item", using: module) { t in - /// // t is TableDefinition - /// } - associatedtype TableDefinition - - /// The name of the module. - var moduleName: String { get } - - /// Returns a table definition that is passed as the closure argument in the - /// `Database.create(virtualTable:using:)` method: - /// - /// try db.create(virtualTable: "item", using: module) { t in - /// // t is the result of makeTableDefinition() - /// } - func makeTableDefinition() -> TableDefinition - - /// Returns the module arguments for the `CREATE VIRTUAL TABLE` query. - func moduleArguments(for definition: TableDefinition, in db: Database) throws -> [String] - - /// Execute any relevant database statement after the virtual table has - /// been created. - func database(_ db: Database, didCreate tableName: String, using definition: TableDefinition) throws -} - -extension Database { - - // MARK: - Database Schema - - /// Creates a virtual database table. - /// - /// try db.create(virtualTable: "vocabulary", using: "spellfix1") - /// - /// See https://www.sqlite.org/lang_createtable.html - /// - /// - parameters: - /// - name: The table name. - /// - ifNotExists: If false (the default), an error is thrown if the - /// table already exists. Otherwise, the table is created unless it - /// already exists. - /// - module: The name of an SQLite virtual table module. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func create(virtualTable name: String, ifNotExists: Bool = false, using module: String) throws { - var chunks: [String] = [] - chunks.append("CREATE VIRTUAL TABLE") - if ifNotExists { - chunks.append("IF NOT EXISTS") - } - chunks.append(name.quotedDatabaseIdentifier) - chunks.append("USING") - chunks.append(module) - let sql = chunks.joined(separator: " ") - try execute(sql: sql) - } - - /// Creates a virtual database table. - /// - /// let module = ... - /// try db.create(virtualTable: "book", using: module) { t in - /// ... - /// } - /// - /// The type of the closure argument `t` depends on the type of the module - /// argument: refer to this module's documentation. - /// - /// Use this method to create full-text tables using the FTS3, FTS4, or - /// FTS5 modules: - /// - /// try db.create(virtualTable: "book", using: FTS4()) { t in - /// t.column("title") - /// t.column("author") - /// t.column("body") - /// } - /// - /// See https://www.sqlite.org/lang_createtable.html - /// - /// - parameters: - /// - name: The table name. - /// - ifNotExists: If false (the default), an error is thrown if the - /// table already exists. Otherwise, the table is created unless it - /// already exists. - /// - module: a VirtualTableModule - /// - body: An optional closure that defines the virtual table. - /// - throws: A DatabaseError whenever an SQLite error occurs. - public func create(virtualTable tableName: String, ifNotExists: Bool = false, using module: Module, _ body: ((Module.TableDefinition) -> Void)? = nil) throws { - // Define virtual table - let definition = module.makeTableDefinition() - if let body = body { - body(definition) - } - - // Create virtual table - var chunks: [String] = [] - chunks.append("CREATE VIRTUAL TABLE") - if ifNotExists { - chunks.append("IF NOT EXISTS") - } - chunks.append(tableName.quotedDatabaseIdentifier) - chunks.append("USING") - let arguments = try module.moduleArguments(for: definition, in: self) - if arguments.isEmpty { - chunks.append(module.moduleName) - } else { - chunks.append(module.moduleName + "(" + arguments.joined(separator: ", ") + ")") - } - let sql = chunks.joined(separator: " ") - - try inSavepoint { - try execute(sql: sql) - try module.database(self, didCreate: tableName, using: definition) - return .commit - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/TableRecord+Association.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/TableRecord+Association.swift deleted file mode 100755 index 5ea8bf5..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/TableRecord+Association.swift +++ /dev/null @@ -1,627 +0,0 @@ -extension TableRecord { - /// Creates a "Belongs To" association between Self and the - /// destination type. - /// - /// struct Author: TableRecord { ... } - /// struct Book: TableRecord { - /// static let author = belongsTo(Author.self) - /// } - /// - /// The association will let you define requests that load both the source - /// and the destination type: - /// - /// // A request for all books with their authors: - /// let request = Book.including(optional: Book.author) - /// - /// To consume those requests, define a type that adopts both the - /// FetchableRecord and Decodable protocols: - /// - /// struct BookInfo: FetchableRecord, Decodable { - /// var book: Book - /// var author: Author? - /// } - /// - /// let bookInfos = try dbQueue.read { db in - /// return try BookInfo.fetchAll(db, request) - /// } - /// for bookInfo in bookInfos { - /// print("\(bookInfo.book.title) by \(bookInfo.author.name)") - /// } - /// - /// It is recommended that you define, alongside the static association, a - /// property with the same name: - /// - /// struct Book: TableRecord, EncodableRecord { - /// static let author = belongsTo(Author.self) - /// var author: QueryInterfaceRequest { - /// return request(for: Book.author) - /// } - /// } - /// - /// This property will let you navigate from the source type to the - /// destination type: - /// - /// try dbQueue.read { db in - /// let book: Book = ... - /// let author = try book.author.fetchOne(db) // Author? - /// } - /// - /// - parameters: - /// - destination: The record type at the other side of the association. - /// - key: An eventual decoding key for the association. By default, it - /// is `destination.databaseTableName`. - /// - foreignKey: An eventual foreign key. You need to provide an - /// explicit foreign key when GRDB can't infer one from the database - /// schema. This happens when the schema does not define any foreign - /// key to the destination table, or when the schema defines several - /// foreign keys to the destination table. - public static func belongsTo( - _ destination: Destination.Type, - key: String? = nil, - using foreignKey: ForeignKey? = nil) - -> BelongsToAssociation - where Destination: TableRecord - { - let foreignKeyRequest = SQLForeignKeyRequest( - originTable: databaseTableName, - destinationTable: Destination.databaseTableName, - foreignKey: foreignKey) - - let condition = SQLAssociationCondition( - foreignKeyRequest: foreignKeyRequest, - originIsLeft: true) - - let associationKey: SQLAssociationKey - if let key = key { - associationKey = .fixedSingular(key) - } else { - associationKey = .inflected(Destination.databaseTableName) - } - - return BelongsToAssociation(sqlAssociation: SQLAssociation( - key: associationKey, - condition: condition, - relation: Destination.all().relation, - cardinality: .toOne)) - } - - /// Creates a "Has many" association between Self and the - /// destination type. - /// - /// struct Book: TableRecord { ... } - /// struct Author: TableRecord { - /// static let books = hasMany(Book.self) - /// } - /// - /// The association will let you define requests that load both the source - /// and the destination type: - /// - /// // A request for all (author, book) pairs: - /// let request = Author.including(required: Author.books) - /// - /// To consume those requests, define a type that adopts both the - /// FetchableRecord and Decodable protocols: - /// - /// struct Authorship: FetchableRecord, Decodable { - /// var author: Author - /// var book: Book - /// } - /// - /// let authorships = try dbQueue.read { db in - /// return try Authorship.fetchAll(db, request) - /// } - /// for authorship in authorships { - /// print("\(authorship.author.name) wrote \(authorship.book.title)") - /// } - /// - /// It is recommended that you define, alongside the static association, a - /// property with the same name: - /// - /// struct Author: TableRecord, EncodableRecord { - /// static let books = hasMany(Book.self) - /// var books: QueryInterfaceRequest { - /// return request(for: Author.books) - /// } - /// } - /// - /// This property will let you navigate from the source type to the - /// destination type: - /// - /// try dbQueue.read { db in - /// let author: Author = ... - /// let books = try author.books.fetchAll(db) // [Book] - /// } - /// - /// - parameters: - /// - destination: The record type at the other side of the association. - /// - key: An eventual decoding key for the association. By default, it - /// is `destination.databaseTableName`. - /// - foreignKey: An eventual foreign key. You need to provide an - /// explicit foreign key when GRDB can't infer one from the database - /// schema. This happens when the schema does not define any foreign - /// key from the destination table, or when the schema defines several - /// foreign keys from the destination table. - public static func hasMany( - _ destination: Destination.Type, - key: String? = nil, - using foreignKey: ForeignKey? = nil) - -> HasManyAssociation - where Destination: TableRecord - { - let foreignKeyRequest = SQLForeignKeyRequest( - originTable: Destination.databaseTableName, - destinationTable: databaseTableName, - foreignKey: foreignKey) - - let condition = SQLAssociationCondition( - foreignKeyRequest: foreignKeyRequest, - originIsLeft: false) - - let associationKey: SQLAssociationKey - if let key = key { - associationKey = .fixedPlural(key) - } else { - associationKey = .inflected(Destination.databaseTableName) - } - - return HasManyAssociation(sqlAssociation: SQLAssociation( - key: associationKey, - condition: condition, - relation: Destination.all().relation, - cardinality: .toMany)) - } - - /// Creates a "Has Many Through" association between Self and the - /// destination type. - /// - /// struct Country: TableRecord { - /// static let passports = hasMany(Passport.self) - /// static let citizens = hasMany(Citizen.self, through: passports, using: Passport.citizen) - /// } - /// - /// struct Passport: TableRecord { - /// static let citizen = belongsTo(Citizen.self) - /// } - /// - /// struct Citizen: TableRecord { } - /// - /// The association will let you define requests that load both the source - /// and the destination type: - /// - /// // A request for all (country, citizen) pairs: - /// let request = Country.including(required: Coutry.citizens) - /// - /// To consume those requests, define a type that adopts both the - /// FetchableRecord and Decodable protocols: - /// - /// struct Citizenship: FetchableRecord, Decodable { - /// var country: Country - /// var citizen: Citizen - /// } - /// - /// let citizenships = try dbQueue.read { db in - /// return try Citizenship.fetchAll(db, request) - /// } - /// for citizenship in citizenships { - /// print("\(citizenship.citizen.name) is a citizen of \(citizenship.country.name)") - /// } - /// - /// It is recommended that you define, alongside the static association, a - /// property with the same name: - /// - /// struct Country: TableRecord, EncodableRecord { - /// static let passports = hasMany(Passport.self) - /// static let citizens = hasMany(Citizen.self, through: passports, using: Passport.citizen) - /// var citizens: QueryInterfaceRequest { - /// return request(for: Country.citizens) - /// } - /// } - /// - /// This property will let you navigate from the source type to the - /// destination type: - /// - /// try dbQueue.read { db in - /// let country: Country = ... - /// let citizens = try country.citizens.fetchAll(db) // [Country] - /// } - /// - /// - parameters: - /// - destination: The record type at the other side of the association. - /// - pivot: An association from Self to the intermediate type. - /// - target: A target association from the intermediate type to the - /// destination type. - /// - key: An eventual decoding key for the association. By default, it - /// is the same key as the target. - public static func hasMany( - _ destination: Target.RowDecoder.Type, - through pivot: Pivot, - using target: Target, - key: String? = nil) - -> HasManyThroughAssociation - where Pivot: Association, - Target: Association, - Pivot.OriginRowDecoder == Self, - Pivot.RowDecoder == Target.OriginRowDecoder - { - let association = HasManyThroughAssociation( - sqlAssociation: target.sqlAssociation.through(pivot.sqlAssociation)) - - if let key = key { - return association.forKey(key) - } else { - return association - } - } - - /// Creates a "Has one" association between Self and the - /// destination type. - /// - /// struct Demographics: TableRecord { ... } - /// struct Country: TableRecord { - /// static let demographics = hasOne(Demographics.self) - /// } - /// - /// The association will let you define requests that load both the source - /// and the destination type: - /// - /// // A request for all countries with their demographic profile: - /// let request = Country.including(optional: Country.demographics) - /// - /// To consume those requests, define a type that adopts both the - /// FetchableRecord and Decodable protocols: - /// - /// struct CountryInfo: FetchableRecord, Decodable { - /// var country: Country - /// var demographics: Demographics? - /// } - /// - /// let countryInfos = try dbQueue.read { db in - /// return try CountryInfo.fetchAll(db, request) - /// } - /// for countryInfo in countryInfos { - /// print("\(countryInfo.country.name) has \(countryInfo.demographics.population) citizens") - /// } - /// - /// It is recommended that you define, alongside the static association, a - /// property with the same name: - /// - /// struct Country: TableRecord, EncodableRecord { - /// static let demographics = hasOne(Demographics.self) - /// var demographics: QueryInterfaceRequest { - /// return request(for: Country.demographics) - /// } - /// } - /// - /// This property will let you navigate from the source type to the - /// destination type: - /// - /// try dbQueue.read { db in - /// let country: Country = ... - /// let demographics = try country.demographics.fetchOne(db) // Demographics? - /// } - /// - /// - parameters: - /// - destination: The record type at the other side of the association. - /// - key: An eventual decoding key for the association. By default, it - /// is `destination.databaseTableName`. - /// - foreignKey: An eventual foreign key. You need to provide an - /// explicit foreign key when GRDB can't infer one from the database - /// schema. This happens when the schema does not define any foreign - /// key from the destination table, or when the schema defines several - /// foreign keys from the destination table. - public static func hasOne( - _ destination: Destination.Type, - key: String? = nil, - using foreignKey: ForeignKey? = nil) - -> HasOneAssociation - where Destination: TableRecord - { - let foreignKeyRequest = SQLForeignKeyRequest( - originTable: Destination.databaseTableName, - destinationTable: databaseTableName, - foreignKey: foreignKey) - - let condition = SQLAssociationCondition( - foreignKeyRequest: foreignKeyRequest, - originIsLeft: false) - - let associationKey: SQLAssociationKey - if let key = key { - associationKey = .fixedSingular(key) - } else { - associationKey = .inflected(Destination.databaseTableName) - } - - return HasOneAssociation(sqlAssociation: SQLAssociation( - key: associationKey, - condition: condition, - relation: Destination.all().relation, - cardinality: .toOne)) - } - - /// Creates a "Has One Through" association between Self and the - /// destination type. - /// - /// struct Book: TableRecord { - /// static let library = belongsTo(Library.self) - /// static let returnAddress = hasOne(Address.self, through: library, using: library.address) - /// } - /// - /// struct Library: TableRecord { - /// static let address = hasOne(Address.self) - /// } - /// - /// struct Address: TableRecord { ... } - /// - /// The association will let you define requests that load both the source - /// and the destination type: - /// - /// // A request for all (book, returnAddress) pairs: - /// let request = Book.including(required: Book.returnAddress) - /// - /// To consume those requests, define a type that adopts both the - /// FetchableRecord and Decodable protocols: - /// - /// struct Todo: FetchableRecord, Decodable { - /// var book: Book - /// var address: Address - /// } - /// - /// let todos = try dbQueue.read { db in - /// return try Todo.fetchAll(db, request) - /// } - /// for todo in todos { - /// print("Please return \(todo.book) to \(todo.address)") - /// } - /// - /// It is recommended that you define, alongside the static association, a - /// property with the same name: - /// - /// struct Book: TableRecord, EncodableRecord { - /// static let library = belongsTo(Library.self) - /// static let returnAddress = hasOne(Address.self, through: library, using: library.address) - /// var returnAddress: QueryInterfaceRequest
{ - /// return request(for: Book.returnAddress) - /// } - /// } - /// - /// This property will let you navigate from the source type to the - /// destination type: - /// - /// try dbQueue.read { db in - /// let book: Book = ... - /// let address = try book.returnAddress.fetchOne(db) // Address? - /// } - /// - /// - parameters: - /// - destination: The record type at the other side of the association. - /// - pivot: An association from Self to the intermediate type. - /// - target: A target association from the intermediate type to the - /// destination type. - /// - key: An eventual decoding key for the association. By default, it - /// is the same key as the target. - public static func hasOne( - _ destination: Target.RowDecoder.Type, - through pivot: Pivot, - using target: Target, - key: String? = nil) - -> HasOneThroughAssociation - where Pivot: AssociationToOne, - Target: AssociationToOne, - Pivot.OriginRowDecoder == Self, - Pivot.RowDecoder == Target.OriginRowDecoder - { - let association = HasOneThroughAssociation( - sqlAssociation: target.sqlAssociation.through(pivot.sqlAssociation)) - - if let key = key { - return association.forKey(key) - } else { - return association - } - } -} - -/// A ForeignKey helps building associations when GRDB can't infer a foreign -/// key from the database schema. -/// -/// Sometimes the database schema does not define any foreign key between two -/// tables. And sometimes, there are several foreign keys from a table -/// to another: -/// -/// | Table book | | Table person | -/// | ------------ | | ------------ | -/// | id | +-->• id | -/// | authorId •---+ | name | -/// | translatorId •---+ -/// | title | -/// -/// When this happens, associations can't be automatically inferred from the -/// database schema. GRDB will complain with a fatal error such as "Ambiguous -/// foreign key from book to person", or "Could not infer foreign key from book -/// to person". -/// -/// Your help is needed. You have to instruct GRDB which foreign key to use: -/// -/// struct Book: TableRecord { -/// // Define foreign keys -/// static let authorForeignKey = ForeignKey(["authorId"])) -/// static let translatorForeignKey = ForeignKey(["translatorId"])) -/// -/// // Use foreign keys to define associations: -/// static let author = belongsTo(Person.self, using: authorForeignKey) -/// static let translator = belongsTo(Person.self, using: translatorForeignKey) -/// } -/// -/// Foreign keys are always defined from the table that contains the columns at -/// the origin of the foreign key. Person's symmetric HasMany associations reuse -/// Book's foreign keys: -/// -/// struct Person: TableRecord { -/// static let writtenBooks = hasMany(Book.self, using: Book.authorForeignKey) -/// static let translatedBooks = hasMany(Book.self, using: Book.translatorForeignKey) -/// } -/// -/// Foreign keys can also be defined from query interface columns: -/// -/// struct Book: TableRecord { -/// enum Columns: String, ColumnExpression { -/// case id, title, authorId, translatorId -/// } -/// -/// static let authorForeignKey = ForeignKey([Columns.authorId])) -/// static let translatorForeignKey = ForeignKey([Columns.translatorId])) -/// } -/// -/// When the destination table of a foreign key does not define any primary key, -/// you need to provide the full definition of a foreign key: -/// -/// struct Book: TableRecord { -/// static let authorForeignKey = ForeignKey(["authorId"], to: ["id"])) -/// static let author = belongsTo(Person.self, using: authorForeignKey) -/// } -public struct ForeignKey { - var originColumns: [String] - var destinationColumns: [String]? - - /// Creates a ForeignKey intended to define a record association. - /// - /// struct Book: TableRecord { - /// // Define foreign keys - /// static let authorForeignKey = ForeignKey(["authorId"])) - /// static let translatorForeignKey = ForeignKey(["translatorId"])) - /// - /// // Use foreign keys to define associations: - /// static let author = belongsTo(Person.self, using: authorForeignKey) - /// static let translator = belongsTo(Person.self, using: translatorForeignKey) - /// } - /// - /// - parameter originColumns: The columns at the origin of the foreign key. - /// - parameter destinationColumns: The columns at the destination of the - /// foreign key. When nil (the default), GRDB automatically uses the - /// primary key. - public init(_ originColumns: [String], to destinationColumns: [String]? = nil) { - self.originColumns = originColumns - self.destinationColumns = destinationColumns - } - - /// Creates a ForeignKey intended to define a record association. - /// - /// struct Book: TableRecord { - /// // Define columns - /// enum Columns: String, ColumnExpression { - /// case id, title, authorId, translatorId - /// } - /// - /// // Define foreign keys - /// static let authorForeignKey = ForeignKey([Columns.authorId])) - /// static let translatorForeignKey = ForeignKey([Columns.translatorId])) - /// - /// // Use foreign keys to define associations: - /// static let author = belongsTo(Person.self, using: authorForeignKey) - /// static let translator = belongsTo(Person.self, using: translatorForeignKey) - /// } - /// - /// - parameter originColumns: The columns at the origin of the foreign key. - /// - parameter destinationColumns: The columns at the destination of the - /// foreign key. When nil (the default), GRDB automatically uses the - /// primary key. - public init(_ originColumns: [ColumnExpression], to destinationColumns: [ColumnExpression]? = nil) { - self.init(originColumns.map { $0.name }, to: destinationColumns?.map { $0.name }) - } -} - -extension TableRecord where Self: EncodableRecord { - /// Creates a request that fetches the associated record(s). - /// - /// For example: - /// - /// struct Team: TableRecord, EncodableRecord { - /// static let players = hasMany(Player.self) - /// var players: QueryInterfaceRequest { - /// return request(for: Team.players) - /// } - /// } - /// - /// let team: Team = ... - /// let players = try team.players.fetchAll(db) // [Player] - public func request(for association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == Self { - let destinationRelation = association.sqlAssociation.destinationRelation(fromOriginRows: { db in - try [Row(PersistenceContainer(db, self))] - }) - return QueryInterfaceRequest(relation: destinationRelation) - } -} - -extension TableRecord { - - // MARK: - Associations - - /// Creates a request that prefetches an association. - public static func including(all association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == Self { - return all().including(all: association) - } - - /// Creates a request that includes an association. The columns of the - /// associated record are selected. The returned association does not - /// require that the associated database table contains a matching row. - public static func including(optional association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == Self { - return all().including(optional: association) - } - - /// Creates a request that includes an association. The columns of the - /// associated record are selected. The returned association requires - /// that the associated database table contains a matching row. - public static func including(required association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == Self { - return all().including(required: association) - } - - /// Creates a request that includes an association. The columns of the - /// associated record are not selected. The returned association does not - /// require that the associated database table contains a matching row. - public static func joining(optional association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == Self { - return all().joining(optional: association) - } - - /// Creates a request that includes an association. The columns of the - /// associated record are not selected. The returned association requires - /// that the associated database table contains a matching row. - public static func joining(required association: A) -> QueryInterfaceRequest where A.OriginRowDecoder == Self { - return all().joining(required: association) - } - - // MARK: - Association Aggregates - - /// Creates a request with *aggregates* appended to the selection. - /// - /// // SELECT player.*, COUNT(DISTINCT book.rowid) AS bookCount - /// // FROM player LEFT JOIN book ... - /// var request = Player.annotated(with: Player.books.count) - public static func annotated(with aggregates: AssociationAggregate...) -> QueryInterfaceRequest { - return all().annotated(with: aggregates) - } - - /// Creates a request with *aggregates* appended to the selection. - /// - /// // SELECT player.*, COUNT(DISTINCT book.rowid) AS bookCount - /// // FROM player LEFT JOIN book ... - /// var request = Player.annotated(with: [Player.books.count]) - public static func annotated(with aggregates: [AssociationAggregate]) -> QueryInterfaceRequest { - return all().annotated(with: aggregates) - } - - /// Creates a request with the provided aggregate *predicate*. - /// - /// // SELECT player.* - /// // FROM player LEFT JOIN book ... - /// // HAVING COUNT(DISTINCT book.rowid) = 0 - /// var request = Player.all() - /// request = request.having(Player.books.isEmpty) - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func having(_ predicate: AssociationAggregate) -> QueryInterfaceRequest { - return all().having(predicate) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/QueryInterface/TableRecord+QueryInterfaceRequest.swift b/Example/Pods/GRDB.swift/GRDB/QueryInterface/TableRecord+QueryInterfaceRequest.swift deleted file mode 100755 index e759a39..0000000 --- a/Example/Pods/GRDB.swift/GRDB/QueryInterface/TableRecord+QueryInterfaceRequest.swift +++ /dev/null @@ -1,324 +0,0 @@ -extension TableRecord { - - // MARK: Request Derivation - - /// Creates a request which fetches all records. - /// - /// // SELECT * FROM player - /// let request = Player.all() - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func all() -> QueryInterfaceRequest { - let relation = SQLRelation( - source: .table(tableName: databaseTableName, alias: nil), - selection: databaseSelection) - return QueryInterfaceRequest(relation: relation) - } - - /// Creates a request which fetches no record. - public static func none() -> QueryInterfaceRequest { - return all().none() // don't laugh - } - - /// Creates a request which selects *selection*. - /// - /// // SELECT id, email FROM player - /// let request = Player.select(Column("id"), Column("email")) - public static func select(_ selection: SQLSelectable...) -> QueryInterfaceRequest { - return all().select(selection) - } - - /// Creates a request which selects *selection*. - /// - /// // SELECT id, email FROM player - /// let request = Player.select([Column("id"), Column("email")]) - public static func select(_ selection: [SQLSelectable]) -> QueryInterfaceRequest { - return all().select(selection) - } - - /// Creates a request which selects *sql*. - /// - /// // SELECT id, email FROM player - /// let request = Player.select(sql: "id, email") - public static func select(sql: String, arguments: StatementArguments = StatementArguments()) -> QueryInterfaceRequest { - return select(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// Creates a request which selects an SQL *literal*. - /// - /// // SELECT id, email FROM player - /// let request = Player.select(literal: SQLLiteral(sql: "id, email")) - public static func select(literal sqlLiteral: SQLLiteral) -> QueryInterfaceRequest { - return all().select(literal: sqlLiteral) - } - - /// Creates a request which selects *selection*, and fetches values of - /// type *type*. - /// - /// try dbQueue.read { db in - /// // SELECT max(score) FROM player - /// let request = Player.select([max(Column("score"))], as: Int.self) - /// let maxScore: Int? = try request.fetchOne(db) - /// } - public static func select(_ selection: [SQLSelectable], as type: RowDecoder.Type) -> QueryInterfaceRequest { - return all().select(selection, as: type) - } - - /// Creates a request which selects *selection*, and fetches values of - /// type *type*. - /// - /// try dbQueue.read { db in - /// // SELECT max(score) FROM player - /// let request = Player.select(max(Column("score")), as: Int.self) - /// let maxScore: Int? = try request.fetchOne(db) - /// } - public static func select(_ selection: SQLSelectable..., as type: RowDecoder.Type) -> QueryInterfaceRequest { - return all().select(selection, as: type) - } - - /// Creates a request which selects *sql*, and fetches values of - /// type *type*. - /// - /// try dbQueue.read { db in - /// // SELECT max(score) FROM player - /// let request = Player.select(sql: "max(score)", as: Int.self) - /// let maxScore: Int? = try request.fetchOne(db) - /// } - public static func select(sql: String, arguments: StatementArguments = StatementArguments(), as type: RowDecoder.Type) -> QueryInterfaceRequest { - return all().select(literal: SQLLiteral(sql: sql, arguments: arguments), as: type) - } - - /// Creates a request which selects an SQL *literal*, and fetches values of - /// type *type*. - /// - /// try dbQueue.read { db in - /// // SELECT max(score) FROM player - /// let request = Player.select(literal: SQLLiteral(sql: "max(score)"), as: Int.self) - /// let maxScore: Int? = try request.fetchOne(db) - /// } - public static func select(literal sqlLiteral: SQLLiteral, as type: RowDecoder.Type) -> QueryInterfaceRequest { - return all().select(literal: sqlLiteral, as: type) - } - - /// Creates a request which appends *selection*. - /// - /// // SELECT id, email, name FROM player - /// le request = Player - /// .select([Column("id"), Column("email")]) - /// .annotated(with: [Column("name")]) - public static func annotated(with selection: [SQLSelectable]) -> QueryInterfaceRequest { - return all().annotated(with: selection) - } - - /// Creates a request which appends *selection*. - /// - /// // SELECT id, email, name FROM player - /// le request = Player - /// .select([Column("id"), Column("email")]) - /// .annotated(with: Column("name")) - public static func annotated(with selection: SQLSelectable...) -> QueryInterfaceRequest { - return all().annotated(with: selection) - } - - /// Creates a request with the provided *predicate*. - /// - /// // SELECT * FROM player WHERE email = 'arthur@example.com' - /// let request = Player.filter(Column("email") == "arthur@example.com") - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func filter(_ predicate: SQLExpressible) -> QueryInterfaceRequest { - return all().filter(predicate) - } - - /// Creates a request with the provided primary key *predicate*. - /// - /// // SELECT * FROM player WHERE id = 1 - /// let request = Player.filter(key: 1) - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func filter(key: PrimaryKeyType?) -> QueryInterfaceRequest { - return all().filter(key: key) - } - - /// Creates a request with the provided primary key *predicate*. - /// - /// // SELECT * FROM player WHERE id IN (1, 2, 3) - /// let request = Player.filter(keys: [1, 2, 3]) - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func filter(keys: Sequence) -> QueryInterfaceRequest where Sequence.Element: DatabaseValueConvertible { - return all().filter(keys: keys) - } - - /// Creates a request with the provided primary key *predicate*. - /// - /// // SELECT * FROM passport WHERE personId = 1 AND countryCode = 'FR' - /// let request = Passport.filter(key: ["personId": 1, "countryCode": "FR"]) - /// - /// When executed, this request raises a fatal error if there is no unique - /// index on the key columns. - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func filter(key: [String: DatabaseValueConvertible?]?) -> QueryInterfaceRequest { - return all().filter(key: key) - } - - /// Creates a request with the provided primary key *predicate*. - /// - /// // SELECT * FROM passport WHERE (personId = 1 AND countryCode = 'FR') OR ... - /// let request = Passport.filter(keys: [["personId": 1, "countryCode": "FR"], ...]) - /// - /// When executed, this request raises a fatal error if there is no unique - /// index on the key columns. - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func filter(keys: [[String: DatabaseValueConvertible?]]) -> QueryInterfaceRequest { - return all().filter(keys: keys) - } - - /// Creates a request with the provided *predicate*. - /// - /// // SELECT * FROM player WHERE email = 'arthur@example.com' - /// let request = Player.filter(sql: "email = ?", arguments: ["arthur@example.com"]) - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func filter(sql: String, arguments: StatementArguments = StatementArguments()) -> QueryInterfaceRequest { - return filter(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// Creates a request with the provided *predicate*. - /// - /// // SELECT * FROM player WHERE email = 'arthur@example.com' - /// let request = Player.filter(literal: SQLLiteral(sql: "email = ?", arguments: ["arthur@example.com"])) - /// - /// With Swift 5, you can safely embed raw values in your SQL queries, - /// without any risk of syntax errors or SQL injection: - /// - /// let request = Player.filter(literal: "name = \("O'Brien")) - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func filter(literal sqlLiteral: SQLLiteral) -> QueryInterfaceRequest { - // NOT TESTED - return all().filter(literal: sqlLiteral) - } - - /// Creates a request sorted according to the - /// provided *orderings*. - /// - /// // SELECT * FROM player ORDER BY name - /// let request = Player.order(Column("name")) - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func order(_ orderings: SQLOrderingTerm...) -> QueryInterfaceRequest { - return all().order(orderings) - } - - /// Creates a request sorted according to the - /// provided *orderings*. - /// - /// // SELECT * FROM player ORDER BY name - /// let request = Player.order([Column("name")]) - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func order(_ orderings: [SQLOrderingTerm]) -> QueryInterfaceRequest { - return all().order(orderings) - } - - /// Creates a request sorted by primary key. - /// - /// // SELECT * FROM player ORDER BY id - /// let request = Player.orderByPrimaryKey() - /// - /// // SELECT * FROM country ORDER BY code - /// let request = Country.orderByPrimaryKey() - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func orderByPrimaryKey() -> QueryInterfaceRequest { - return all().orderByPrimaryKey() - } - - /// Creates a request sorted according to *sql*. - /// - /// // SELECT * FROM player ORDER BY name - /// let request = Player.order(sql: "name") - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func order(sql: String, arguments: StatementArguments = StatementArguments()) -> QueryInterfaceRequest { - return all().order(literal: SQLLiteral(sql: sql, arguments: arguments)) - } - - /// Creates a request sorted according to an SQL *literal*. - /// - /// // SELECT * FROM player ORDER BY name - /// let request = Player.order(literal: SQLLiteral(sql: "name")) - /// - /// With Swift 5, you can safely embed raw values in your SQL queries, - /// without any risk of syntax errors or SQL injection: - /// - /// // SELECT * FROM player ORDER BY name - /// let request = Player.order(literal: "name")) - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func order(literal sqlLiteral: SQLLiteral) -> QueryInterfaceRequest { - return all().order(literal: sqlLiteral) - } - - /// Creates a request which fetches *limit* rows, starting at - /// *offset*. - /// - /// // SELECT * FROM player LIMIT 1 - /// let request = Player.limit(1) - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - public static func limit(_ limit: Int, offset: Int? = nil) -> QueryInterfaceRequest { - return all().limit(limit, offset: offset) - } - - /// Creates a request that allows you to define expressions that target - /// a specific database table. - /// - /// In the example below, the "team.avgScore < player.score" condition in - /// the ON clause could be not achieved without table aliases. - /// - /// struct Player: TableRecord { - /// static let team = belongsTo(Team.self) - /// } - /// - /// // SELECT player.*, team.* - /// // JOIN team ON ... AND team.avgScore < player.score - /// let playerAlias = TableAlias() - /// let request = Player - /// .aliased(playerAlias) - /// .including(required: Player.team.filter(Column("avgScore") < playerAlias[Column("score")]) - public static func aliased(_ alias: TableAlias) -> QueryInterfaceRequest { - return all().aliased(alias) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Record/EncodableRecord+Encodable.swift b/Example/Pods/GRDB.swift/GRDB/Record/EncodableRecord+Encodable.swift deleted file mode 100755 index f38439a..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Record/EncodableRecord+Encodable.swift +++ /dev/null @@ -1,370 +0,0 @@ -import Foundation - -extension EncodableRecord where Self: Encodable { - public func encode(to container: inout PersistenceContainer) { - let encoder = RecordEncoder(persistenceContainer: container) - try! encode(to: encoder) - container = encoder.persistenceContainer - } -} - -// MARK: - RecordEncoder - -/// The encoder that encodes a record into GRDB's PersistenceContainer -private class RecordEncoder: Encoder { - var codingPath: [CodingKey] { return [] } - var userInfo: [CodingUserInfoKey: Any] { return Record.databaseEncodingUserInfo } - private var _persistenceContainer: PersistenceContainer - var persistenceContainer: PersistenceContainer { return _persistenceContainer } - - init(persistenceContainer: PersistenceContainer) { - _persistenceContainer = persistenceContainer - } - - func container(keyedBy type: Key.Type) -> KeyedEncodingContainer { - let container = KeyedContainer(recordEncoder: self) - return KeyedEncodingContainer(container) - } - - func unkeyedContainer() -> UnkeyedEncodingContainer { - fatalError("unkeyed encoding is not supported") - } - - func singleValueContainer() -> SingleValueEncodingContainer { - // @itaiferber on https://forums.swift.org/t/how-to-encode-objects-of-unknown-type/12253/11 - // - // > Encoding a value into a single-value container is equivalent to - // > encoding the value directly into the encoder, with the primary - // > difference being the above: encoding into the encoder writes the - // > contents of a type into the encoder, while encoding to a - // > single-value container gives the encoder a chance to intercept the - // > type as a whole. - // - // Wait for somebody hitting this fatal error so that we can write a - // meaningful regression test. - fatalError("single value encoding is not supported") - } - - private struct KeyedContainer : KeyedEncodingContainerProtocol { - var recordEncoder: RecordEncoder - var userInfo: [CodingUserInfoKey: Any] { return Record.databaseEncodingUserInfo } - - init(recordEncoder: RecordEncoder) { - self.recordEncoder = recordEncoder - } - - var codingPath: [CodingKey] { return [] } - - func encode(_ value: Bool, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int8, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int16, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int32, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int64, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt8, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt16, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt32, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt64, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Float, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Double, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: String, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - - func encode(_ value: T, forKey key: Key) throws where T : Encodable { - try recordEncoder.encode(value, forKey: key) - } - - func encodeNil(forKey key: Key) throws { recordEncoder.persist(nil, forKey: key) } - - func encodeIfPresent(_ value: Bool?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: Int?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: Int8?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: Int16?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: Int32?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: Int64?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: UInt?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: UInt8?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: UInt16?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: UInt32?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: UInt64?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: Float?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: Double?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - func encodeIfPresent(_ value: String?, forKey key: Key) throws { recordEncoder.persist(value, forKey: key) } - - func encodeIfPresent(_ value: T?, forKey key: Key) throws where T : Encodable { - if let value = value { - try recordEncoder.encode(value, forKey: key) - } else { - recordEncoder.persist(nil, forKey: key) - } - } - - func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer { - fatalError("Not implemented") - } - - func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { - fatalError("Not implemented") - } - - func superEncoder() -> Encoder { - fatalError("Not implemented") - } - - func superEncoder(forKey key: Key) -> Encoder { - fatalError("Not implemented") - } - } - - /// Helper methods - @inline(__always) - fileprivate func persist(_ value: DatabaseValueConvertible?, forKey key: CodingKey) { - _persistenceContainer[key.stringValue] = value - } - - @inline(__always) - fileprivate func encode(_ value: T, forKey key: CodingKey) throws where T : Encodable { - if let date = value as? Date { - persist(Record.databaseDateEncodingStrategy.encode(date), forKey: key) - } else if let uuid = value as? UUID { - persist(Record.databaseUUIDEncodingStrategy.encode(uuid), forKey: key) - } else if let value = value as? DatabaseValueConvertible { - // Prefer DatabaseValueConvertible encoding over Decodable. - persist(value.databaseValue, forKey: key) - } else { - do { - // This encoding will fail for types that encode into keyed - // or unkeyed containers, because we're encoding a single - // value here (string, int, double, data, null). If such an - // error happens, we'll switch to JSON encoding. - let encoder = ColumnEncoder(recordEncoder: self, key: key) - try value.encode(to: encoder) - if encoder.requiresJSON { - // Here we handle empty arrays and dictionaries. - throw JSONRequiredError() - } - } catch is JSONRequiredError { - // Encode to JSON - let jsonData = try Record.databaseJSONEncoder(for: key.stringValue).encode(value) - - // Store JSON String in the database for easier debugging and - // database inspection. Thanks to SQLite weak typing, we won't - // have any trouble decoding this string into data when we - // eventually perform JSON decoding. - // TODO: possible optimization: avoid this conversion to string, and store raw data bytes as an SQLite string - let jsonString = String(data: jsonData, encoding: .utf8)! // force unwrap because json data is guaranteed to convert to String - persist(jsonString, forKey: key) - } - } - } -} - -// MARK: - ColumnEncoder - -/// The encoder that encodes into a database column -private class ColumnEncoder: Encoder { - var recordEncoder: RecordEncoder - var key: CodingKey - var codingPath: [CodingKey] { return [key] } - var userInfo: [CodingUserInfoKey: Any] { return Record.databaseEncodingUserInfo } - var requiresJSON = false - - init(recordEncoder: RecordEncoder, key: CodingKey) { - self.recordEncoder = recordEncoder - self.key = key - } - - func container(keyedBy type: Key.Type) -> KeyedEncodingContainer where Key : CodingKey { - // Keyed values require JSON encoding: we need to throw - // JSONRequiredError. Since we can't throw right from here, let's - // delegate the job to a dedicated container. - requiresJSON = true - let container = JSONRequiredEncoder.KeyedContainer(codingPath: codingPath) - return KeyedEncodingContainer(container) - } - - func unkeyedContainer() -> UnkeyedEncodingContainer { - // Keyed values require JSON encoding: we need to throw - // JSONRequiredError. Since we can't throw right from here, let's - // delegate the job to a dedicated container. - requiresJSON = true - return JSONRequiredEncoder(codingPath: codingPath) - } - - func singleValueContainer() -> SingleValueEncodingContainer { - return self - } -} - -extension ColumnEncoder: SingleValueEncodingContainer { - func encodeNil() throws { recordEncoder.persist(nil, forKey: key) } - - func encode(_ value: Bool ) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int ) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int8 ) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int16 ) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int32 ) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Int64 ) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt ) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt8 ) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt16) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt32) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: UInt64) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Float ) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: Double) throws { recordEncoder.persist(value, forKey: key) } - func encode(_ value: String) throws { recordEncoder.persist(value, forKey: key) } - - func encode(_ value: T) throws where T : Encodable { - try recordEncoder.encode(value, forKey: key) - } -} - -// MARK: - JSONRequiredEncoder - -/// The error that triggers JSON encoding -private struct JSONRequiredError: Error { } - -/// The encoder that always ends up with a JSONRequiredError -private struct JSONRequiredEncoder: Encoder { - var codingPath: [CodingKey] - var userInfo: [CodingUserInfoKey: Any] { return Record.databaseEncodingUserInfo } - - init(codingPath: [CodingKey]) { - self.codingPath = codingPath - } - - func container(keyedBy type: Key.Type) -> KeyedEncodingContainer where Key : CodingKey { - let container = KeyedContainer(codingPath: codingPath) - return KeyedEncodingContainer(container) - } - - func unkeyedContainer() -> UnkeyedEncodingContainer { - return self - } - - func singleValueContainer() -> SingleValueEncodingContainer { - return self - } - - struct KeyedContainer: KeyedEncodingContainerProtocol { - var codingPath: [CodingKey] - var userInfo: [CodingUserInfoKey: Any] { return Record.databaseEncodingUserInfo } - - func encodeNil(forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: Bool, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: Int, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: Int8, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: Int16, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: Int32, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: Int64, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: UInt, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: UInt8, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: UInt16, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: UInt32, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: UInt64, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: Float, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: Double, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: String, forKey key: KeyType) throws { throw JSONRequiredError() } - func encode(_ value: T, forKey key: KeyType) throws where T : Encodable { throw JSONRequiredError() } - - func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: KeyType) -> KeyedEncodingContainer where NestedKey : CodingKey { - let container = KeyedContainer(codingPath: codingPath + [key]) - return KeyedEncodingContainer(container) - } - - func nestedUnkeyedContainer(forKey key: KeyType) -> UnkeyedEncodingContainer { - return JSONRequiredEncoder(codingPath: codingPath) - } - - func superEncoder() -> Encoder { - return JSONRequiredEncoder(codingPath: codingPath) - } - - func superEncoder(forKey key: KeyType) -> Encoder { - return JSONRequiredEncoder(codingPath: codingPath) - } - } -} - -extension JSONRequiredEncoder: SingleValueEncodingContainer { - func encodeNil() throws { throw JSONRequiredError() } - func encode(_ value: Bool ) throws { throw JSONRequiredError() } - func encode(_ value: Int ) throws { throw JSONRequiredError() } - func encode(_ value: Int8 ) throws { throw JSONRequiredError() } - func encode(_ value: Int16 ) throws { throw JSONRequiredError() } - func encode(_ value: Int32 ) throws { throw JSONRequiredError() } - func encode(_ value: Int64 ) throws { throw JSONRequiredError() } - func encode(_ value: UInt ) throws { throw JSONRequiredError() } - func encode(_ value: UInt8 ) throws { throw JSONRequiredError() } - func encode(_ value: UInt16) throws { throw JSONRequiredError() } - func encode(_ value: UInt32) throws { throw JSONRequiredError() } - func encode(_ value: UInt64) throws { throw JSONRequiredError() } - func encode(_ value: Float ) throws { throw JSONRequiredError() } - func encode(_ value: Double) throws { throw JSONRequiredError() } - func encode(_ value: String) throws { throw JSONRequiredError() } - func encode(_ value: T) throws where T : Encodable { throw JSONRequiredError() } -} - -extension JSONRequiredEncoder: UnkeyedEncodingContainer { - var count: Int { return 0 } - - mutating func nestedContainer(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer where NestedKey : CodingKey { - let container = KeyedContainer(codingPath: codingPath) - return KeyedEncodingContainer(container) - } - - mutating func nestedUnkeyedContainer() -> UnkeyedEncodingContainer { - return self - } - - mutating func superEncoder() -> Encoder { - return self - } -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -fileprivate var iso8601Formatter: ISO8601DateFormatter = { - let formatter = ISO8601DateFormatter() - formatter.formatOptions = .withInternetDateTime - return formatter -}() - -private extension DatabaseDateEncodingStrategy { - @inline(__always) - func encode(_ date: Date) -> DatabaseValueConvertible? { - switch self { - case .deferredToDate: - return date.databaseValue - case .timeIntervalSinceReferenceDate: - return date.timeIntervalSinceReferenceDate - case .timeIntervalSince1970: - return date.timeIntervalSince1970 - case .millisecondsSince1970: - return Int64(floor(1000.0 * date.timeIntervalSince1970)) - case .secondsSince1970: - return Int64(floor(date.timeIntervalSince1970)) - case .iso8601: - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return iso8601Formatter.string(from: date) - } else { - fatalError("ISO8601DateFormatter is unavailable on this platform.") - } - case .formatted(let formatter): - return formatter.string(from: date) - case .custom(let format): - return format(date) - } - } -} - -private extension DatabaseUUIDEncodingStrategy { - @inline(__always) - func encode(_ uuid: UUID) -> DatabaseValueConvertible? { - switch self { - case .deferredToUUID: - return uuid.databaseValue - case .string: - return uuid.uuidString - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Record/EncodableRecord.swift b/Example/Pods/GRDB.swift/GRDB/Record/EncodableRecord.swift deleted file mode 100755 index 378fe79..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Record/EncodableRecord.swift +++ /dev/null @@ -1,387 +0,0 @@ -import Foundation // For JSONEncoder - -/// Types that adopt EncodableRecord can be encoded into the database. -public protocol EncodableRecord { - /// Encodes the record into database values. - /// - /// Store in the *container* argument all values that should be stored in - /// the columns of the database table (see databaseTableName()). - /// - /// Primary key columns, if any, must be included. - /// - /// struct Player: EncodableRecord { - /// var id: Int64? - /// var name: String? - /// - /// func encode(to container: inout PersistenceContainer) { - /// container["id"] = id - /// container["name"] = name - /// } - /// } - /// - /// It is undefined behavior to set different values for the same column. - /// Column names are case insensitive, so defining both "name" and "NAME" - /// is considered undefined behavior. - func encode(to container: inout PersistenceContainer) - - // MARK: - Customizing the Format of Database Columns - - /// When the EncodableRecord type also adopts the standard Encodable - /// protocol, you can use this dictionary to customize the encoding process - /// into database rows. - /// - /// For example: - /// - /// // A key that holds a encoder's name - /// let encoderName = CodingUserInfoKey(rawValue: "encoderName")! - /// - /// struct Player: PersistableRecord, Encodable { - /// // Customize the encoder name when encoding a database row - /// static let databaseEncodingUserInfo: [CodingUserInfoKey: Any] = [encoderName: "Database"] - /// - /// func encode(to encoder: Encoder) throws { - /// // Print the encoder name - /// print(encoder.userInfo[encoderName]) - /// ... - /// } - /// } - /// - /// let player = Player(...) - /// - /// // prints "Database" - /// try player.insert(db) - /// - /// // prints "JSON" - /// let encoder = JSONEncoder() - /// encoder.userInfo = [encoderName: "JSON"] - /// let data = try encoder.encode(player) - static var databaseEncodingUserInfo: [CodingUserInfoKey: Any] { get } - - /// When the EncodableRecord type also adopts the standard Encodable - /// protocol, this method controls the encoding process of nested properties - /// into JSON database columns. - /// - /// The default implementation returns a JSONEncoder with the - /// following properties: - /// - /// - dataEncodingStrategy: .base64 - /// - dateEncodingStrategy: .millisecondsSince1970 - /// - nonConformingFloatEncodingStrategy: .throw - /// - outputFormatting: .sortedKeys (iOS 11.0+, macOS 10.13+, watchOS 4.0+) - /// - /// You can override those defaults: - /// - /// struct Achievement: Encodable { - /// var name: String - /// var date: Date - /// } - /// - /// struct Player: Encodable, PersistableRecord { - /// // stored in a JSON column - /// var achievements: [Achievement] - /// - /// static func databaseJSONEncoder(for column: String) -> JSONEncoder { - /// let encoder = JSONEncoder() - /// encoder.dateEncodingStrategy = .iso8601 - /// return encoder - /// } - /// } - static func databaseJSONEncoder(for column: String) -> JSONEncoder - - /// When the EncodableRecord type also adopts the standard Encodable - /// protocol, this property controls the encoding of date properties. - /// - /// Default value is .deferredToDate - /// - /// For example: - /// - /// struct Player: PersistableRecord, Encodable { - /// static let databaseDateEncodingStrategy: DatabaseDateEncodingStrategy = .timeIntervalSince1970 - /// - /// var name: String - /// var registrationDate: Date // encoded as an epoch timestamp - /// } - static var databaseDateEncodingStrategy: DatabaseDateEncodingStrategy { get } - - /// When the EncodableRecord type also adopts the standard Encodable - /// protocol, this property controls the encoding of UUID properties. - /// - /// Default value is .deferredToUUID - /// - /// For example: - /// - /// struct Player: PersistableProtocol, Encodable { - /// static let databaseUUIDEncodingStrategy: DatabaseUUIDEncodingStrategy = .string - /// - /// // encoded in a string like "E621E1F8-C36C-495A-93FC-0C247A3E6E5F" - /// var uuid: UUID - /// } - static var databaseUUIDEncodingStrategy: DatabaseUUIDEncodingStrategy { get } -} - -extension EncodableRecord { - public static var databaseEncodingUserInfo: [CodingUserInfoKey: Any] { - return [:] - } - - public static func databaseJSONEncoder(for column: String) -> JSONEncoder { - let encoder = JSONEncoder() - encoder.dataEncodingStrategy = .base64 - encoder.dateEncodingStrategy = .millisecondsSince1970 - encoder.nonConformingFloatEncodingStrategy = .throw - if #available(watchOS 4.0, OSX 10.13, iOS 11.0, *) { - // guarantee some stability in order to ease record comparison - encoder.outputFormatting = .sortedKeys - } - return encoder - } - - public static var databaseDateEncodingStrategy: DatabaseDateEncodingStrategy { - return .deferredToDate - } - - public static var databaseUUIDEncodingStrategy: DatabaseUUIDEncodingStrategy { - return .deferredToUUID - } -} - -extension EncodableRecord { - /// A dictionary whose keys are the columns encoded in the `encode(to:)` method. - public var databaseDictionary: [String: DatabaseValue] { - return Dictionary(PersistenceContainer(self).storage).mapValues { $0?.databaseValue ?? .null } - } -} - -extension EncodableRecord { - - // MARK: - Record Comparison - - /// Returns a boolean indicating whether this record and the other record - /// have the same database representation. - public func databaseEquals(_ record: Self) -> Bool { - return PersistenceContainer(self).changesIterator(from: PersistenceContainer(record)).next() == nil - } - - /// A dictionary of values changed from the other record. - /// - /// Its keys are column names. Its values come from the other record. - /// - /// Note that this method is not symmetrical, not only in terms of values, - /// but also in terms of columns. When the two records don't define the - /// same set of columns in their `encode(to:)` method, only the columns - /// defined by the receiver record are considered. - public func databaseChanges(from record: Record) -> [String: DatabaseValue] { - return Dictionary(uniqueKeysWithValues: PersistenceContainer(self).changesIterator(from: PersistenceContainer(record))) - } -} - -// MARK: - PersistenceContainer - -/// Use persistence containers in the `encode(to:)` method of your -/// encodable records: -/// -/// struct Player: EncodableRecord { -/// var id: Int64? -/// var name: String? -/// -/// func encode(to container: inout PersistenceContainer) { -/// container["id"] = id -/// container["name"] = name -/// } -/// } -public struct PersistenceContainer { - // fileprivate for Row(_:PersistenceContainer) - // The ordering of the OrderedDictionary helps generating always the same - // SQL queries, and hit the statement cache. - @usableFromInline var storage: OrderedDictionary - - /// Accesses the value associated with the given column. - /// - /// It is undefined behavior to set different values for the same column. - /// Column names are case insensitive, so defining both "name" and "NAME" - /// is considered undefined behavior. - @inlinable - public subscript(_ column: String) -> DatabaseValueConvertible? { - get { return storage[column] ?? nil } - set { storage.updateValue(newValue, forKey: column) } - } - - /// Accesses the value associated with the given column. - /// - /// It is undefined behavior to set different values for the same column. - /// Column names are case insensitive, so defining both "name" and "NAME" - /// is considered undefined behavior. - @inlinable - public subscript(_ column: Column) -> DatabaseValueConvertible? { - get { return self[column.name] } - set { self[column.name] = newValue } - } - - init() { - storage = OrderedDictionary() - } - - init(minimumCapacity: Int) { - storage = OrderedDictionary(minimumCapacity: minimumCapacity) - } - - /// Convenience initializer from a record - init(_ record: Record) { - self.init() - record.encode(to: &self) - } - - /// Columns stored in the container, ordered like values. - var columns: [String] { - return Array(storage.keys) - } - - /// Values stored in the container, ordered like columns. - var values: [DatabaseValueConvertible?] { - return Array(storage.values) - } - - /// Accesses the value associated with the given column, in a - /// case-insensitive fashion. - /// - /// :nodoc: - subscript(caseInsensitive column: String) -> DatabaseValueConvertible? { - get { - if let value = storage[column] { - return value - } - let lowercaseColumn = column.lowercased() - for (key, value) in storage where key.lowercased() == lowercaseColumn { - return value - } - return nil - } - set { - if storage[column] != nil { - storage[column] = newValue - return - } - let lowercaseColumn = column.lowercased() - for key in storage.keys where key.lowercased() == lowercaseColumn { - storage[key] = newValue - return - } - - storage[column] = newValue - } - } - - // Returns nil if column is not defined - func value(forCaseInsensitiveColumn column: String) -> DatabaseValue? { - let lowercaseColumn = column.lowercased() - for (key, value) in storage where key.lowercased() == lowercaseColumn { - return value?.databaseValue ?? .null - } - return nil - } - - var isEmpty: Bool { - return storage.isEmpty - } - - /// An iterator over the (column, value) pairs - func makeIterator() -> IndexingIterator> { - return storage.makeIterator() - } - - func changesIterator(from container: PersistenceContainer) -> AnyIterator<(String, DatabaseValue)> { - var newValueIterator = makeIterator() - return AnyIterator { - // Loop until we find a change, or exhaust columns: - while let (column, newValue) = newValueIterator.next() { - let oldValue = container[caseInsensitive: column] - let oldDbValue = oldValue?.databaseValue ?? .null - let newDbValue = newValue?.databaseValue ?? .null - if newDbValue != oldDbValue { - return (column, oldDbValue) - } - } - return nil - } - } -} - -extension Row { - convenience init(_ record: Record) { - self.init(PersistenceContainer(record)) - } - - convenience init(_ container: PersistenceContainer) { - self.init(Dictionary(container.storage)) - } -} - -// MARK: - DatabaseDateEncodingStrategy - -/// DatabaseDateEncodingStrategy specifies how EncodableRecord types that also -/// adopt the standard Encodable protocol encode their date properties. -/// -/// For example: -/// -/// struct Player: EncodableRecord, Encodable { -/// static let databaseDateEncodingStrategy: DatabaseDateEncodingStrategy = .timeIntervalSince1970 -/// -/// var name: String -/// var registrationDate: Date // encoded as an epoch timestamp -/// } -public enum DatabaseDateEncodingStrategy { - /// The strategy that uses formatting from the Date structure. - /// - /// It encodes dates using the format "YYYY-MM-DD HH:MM:SS.SSS" in the - /// UTC time zone. - case deferredToDate - - /// Encodes a Double: the number of seconds between the date and - /// midnight UTC on 1 January 2001 - case timeIntervalSinceReferenceDate - - /// Encodes a Double: the number of seconds between the date and - /// midnight UTC on 1 January 1970 - case timeIntervalSince1970 - - /// Encodes an Int64: the number of seconds between the date and - /// midnight UTC on 1 January 1970 - case secondsSince1970 - - /// Encodes an Int64: the number of milliseconds between the date and - /// midnight UTC on 1 January 1970 - case millisecondsSince1970 - - /// Encodes dates according to the ISO 8601 and RFC 3339 standards - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - case iso8601 - - /// Encodes a String, according to the provided formatter - case formatted(DateFormatter) - - /// Encodes the result of the user-provided function - case custom((Date) -> DatabaseValueConvertible?) -} - -// MARK: - DatabaseUUIDEncodingStrategy - -/// DatabaseUUIDEncodingStrategy specifies how EncodableRecord types that also -/// adopt the standard Encodable protocol encode their UUID properties. -/// -/// For example: -/// -/// struct Player: EncodableProtocol, Encodable { -/// static let databaseUUIDEncodingStrategy: DatabaseUUIDEncodingStrategy = .string -/// -/// // encoded in a string like "E621E1F8-C36C-495A-93FC-0C247A3E6E5F" -/// var uuid: UUID -/// } -public enum DatabaseUUIDEncodingStrategy { - /// The strategy that uses formatting from the UUID type. - /// - /// It encodes UUIDs as 16-bytes data blobs. - case deferredToUUID - - /// Encodes UUIDs as strings such as "E621E1F8-C36C-495A-93FC-0C247A3E6E5F" - case string -} diff --git a/Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord+Decodable.swift b/Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord+Decodable.swift deleted file mode 100755 index e379631..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord+Decodable.swift +++ /dev/null @@ -1,522 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -extension FetchableRecord where Self: Decodable { - public init(row: Row) { - let decoder = RowDecoder(row: row, codingPath: []) - try! self.init(from: decoder) - } -} - -// MARK: - RowDecoder - -/// The decoder that decodes a record from a database row -private struct RowDecoder: Decoder { - var row: Row - var codingPath: [CodingKey] - var userInfo: [CodingUserInfoKey: Any] { return R.databaseDecodingUserInfo } - - func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer { - return KeyedDecodingContainer(KeyedContainer(decoder: self)) - } - - func unkeyedContainer() throws -> UnkeyedDecodingContainer { - guard let codingKey = codingPath.last else { - fatalError("unkeyed decoding from database row is not supported") - } - let keys = row.prefetchedRows.keys - let debugDescription: String - if keys.isEmpty { - debugDescription = "No available prefetched rows" - } else { - debugDescription = "Available keys for prefetched rows: \(keys.sorted())" - } - throw DecodingError.keyNotFound( - codingKey, - DecodingError.Context( - codingPath: Array(codingPath.dropLast()), // TODO: remove Array initializer when Swift >= 5 - debugDescription: debugDescription)) - } - - func singleValueContainer() throws -> SingleValueDecodingContainer { - guard let key = codingPath.last else { - fatalError("single value decoding from database row is not supported") - } - guard let index = row.index(ofColumn: key.stringValue) else { - // Don't use DecodingError.keyNotFound: - // We need to specifically recognize missing columns in order to - // provide correct feedback. - throw MissingColumnError(column: key.stringValue) - } - // TODO: test - // See DatabaseValueConversionErrorTests.testDecodableFetchableRecord2 - return ColumnDecoder(row: row, columnIndex: index, codingPath: codingPath) - } - - struct KeyedContainer: KeyedDecodingContainerProtocol { - let decoder: RowDecoder - var codingPath: [CodingKey] { return decoder.codingPath } - - init(decoder: RowDecoder) { - self.decoder = decoder - } - - var allKeys: [Key] { - let row = decoder.row - return Set(row.columnNames) - .union(Set(row.scopesTree.names)) - .union(Set(row.prefetchedRows.keys)) - .compactMap { Key(stringValue: $0) } - } - - func contains(_ key: Key) -> Bool { - let row = decoder.row - return row.hasColumn(key.stringValue) || (row.scopesTree[key.stringValue] != nil) - } - - func decodeNil(forKey key: Key) throws -> Bool { - let row = decoder.row - return row[key.stringValue] == nil && (row.scopesTree[key.stringValue] == nil) - } - - func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool { return decoder.row[key.stringValue] } - func decode(_ type: Int.Type, forKey key: Key) throws -> Int { return decoder.row[key.stringValue] } - func decode(_ type: Int8.Type, forKey key: Key) throws -> Int8 { return decoder.row[key.stringValue] } - func decode(_ type: Int16.Type, forKey key: Key) throws -> Int16 { return decoder.row[key.stringValue] } - func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 { return decoder.row[key.stringValue] } - func decode(_ type: Int64.Type, forKey key: Key) throws -> Int64 { return decoder.row[key.stringValue] } - func decode(_ type: UInt.Type, forKey key: Key) throws -> UInt { return decoder.row[key.stringValue] } - func decode(_ type: UInt8.Type, forKey key: Key) throws -> UInt8 { return decoder.row[key.stringValue] } - func decode(_ type: UInt16.Type, forKey key: Key) throws -> UInt16 { return decoder.row[key.stringValue] } - func decode(_ type: UInt32.Type, forKey key: Key) throws -> UInt32 { return decoder.row[key.stringValue] } - func decode(_ type: UInt64.Type, forKey key: Key) throws -> UInt64 { return decoder.row[key.stringValue] } - func decode(_ type: Float.Type, forKey key: Key) throws -> Float { return decoder.row[key.stringValue] } - func decode(_ type: Double.Type, forKey key: Key) throws -> Double { return decoder.row[key.stringValue] } - func decode(_ type: String.Type, forKey key: Key) throws -> String { return decoder.row[key.stringValue] } - - func decodeIfPresent(_ type: T.Type, forKey key: Key) throws -> T? where T : Decodable { - let row = decoder.row - let keyName = key.stringValue - - // Column? - if let index = row.index(ofColumn: keyName) { - // Prefer DatabaseValueConvertible decoding over Decodable. - // This allows decoding Date from String, or DatabaseValue from NULL. - if type == Date.self { - return R.databaseDateDecodingStrategy.decodeIfPresent(fromRow: row, columnAtIndex: index) as! T? - } else if let type = T.self as? (DatabaseValueConvertible & StatementColumnConvertible).Type { - return type.fastDecodeIfPresent(from: row, atUncheckedIndex: index) as! T? - } else if let type = T.self as? DatabaseValueConvertible.Type { - return type.decodeIfPresent(from: row, atUncheckedIndex: index) as! T? - } else if row.impl.hasNull(atUncheckedIndex: index) { - return nil - } else { - return try decode(type, fromRow: row, columnAtIndex: index, key: key) - } - } - - // Scope? (beware left joins: check if scoped row contains non-null values) - if let scopedRow = row.scopesTree[keyName], scopedRow.containsNonNullValue { - return try decode(type, fromRow: scopedRow, codingPath: codingPath + [key]) - } - - // Key is not a column, and not a scope. - return nil - } - - func decode(_ type: T.Type, forKey key: Key) throws -> T where T : Decodable { - let row = decoder.row - let keyName = key.stringValue - - // Column? - if let index = row.index(ofColumn: keyName) { - // Prefer DatabaseValueConvertible decoding over Decodable. - // This allows decoding Date from String, or DatabaseValue from NULL. - if type == Date.self { - return R.databaseDateDecodingStrategy.decode(fromRow: row, columnAtIndex: index) as! T - } else if let type = T.self as? (DatabaseValueConvertible & StatementColumnConvertible).Type { - return type.fastDecode(from: row, atUncheckedIndex: index) as! T - } else if let type = T.self as? DatabaseValueConvertible.Type { - return type.decode(from: row, atUncheckedIndex: index) as! T - } else { - return try decode(type, fromRow: row, columnAtIndex: index, key: key) - } - } - - // Scope? - if let scopedRow = row.scopesTree[keyName] { - return try decode(type, fromRow: scopedRow, codingPath: codingPath + [key]) - } - - // Prefetched Rows? - if let prefetchedRows = row.prefetchedRows[keyName] { - let decoder = PrefetchedRowsDecoder(rows: prefetchedRows, codingPath: codingPath) - return try T(from: decoder) - } - - // Key is not a column, and not a scope. - // - // Should be throw an error? Well... The use case is the following: - // - // // SELECT book.*, author.* FROM book - // // JOIN author ON author.id = book.authorId - // let request = Book.including(required: Book.author) - // - // Rows loaded from this request don't have any "book" key: - // - // let row = try Row.fetchOne(db, request)! - // print(row.debugDescription) - // // ▿ [id:1 title:"Moby-Dick" authorId:2] - // // unadapted: [id:1 title:"Moby-Dick" authorId:2 id:2 name:"Melville"] - // // author: [id:2 name:"Melville"] - // - // And yet we have to decode the "book" key when we decode the - // BookInfo type below: - // - // struct BookInfo { - // var book: Book // <- decodes from the "book" key - // var author: Author - // } - // let infos = try BookInfos.fetchAll(db, request) - // - // Our current strategy is to assume that a missing key (such as - // "book", which is not the name of a column, and not the name of a - // scope) has to be decoded right from the base row. - // - // Yeah, there may be better ways to handle this. - return try decode(type, fromRow: row, codingPath: codingPath + [key]) - } - - func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer where NestedKey : CodingKey { - fatalError("not implemented") - } - - func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer { - throw DecodingError.typeMismatch( - UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: codingPath, debugDescription: "unkeyed decoding is not supported")) - } - - func superDecoder() throws -> Decoder { - // Not sure - return decoder - } - - func superDecoder(forKey key: Key) throws -> Decoder { - fatalError("not implemented") - } - - // Helper methods - - @inline(__always) - private func decode(_ type: T.Type, fromRow row: Row, codingPath: [CodingKey]) throws -> T where T: Decodable { - if let type = T.self as? FetchableRecord.Type { - // Prefer FetchableRecord decoding over Decodable. - return type.init(row: row) as! T - } else { - do { - let decoder = RowDecoder(row: row, codingPath: codingPath) - return try T(from: decoder) - } catch let error as MissingColumnError { - // Support for DatabaseValueConversionErrorTests.testDecodableFetchableRecord2 - fatalConversionError( - to: type, - from: nil, - conversionContext: ValueConversionContext(row).atColumn(error.column)) - } - } - } - - @inline(__always) - private func decode(_ type: T.Type, fromRow row: Row, columnAtIndex index: Int, key: Key) throws -> T where T: Decodable { - do { - // This decoding will fail for types that decode from keyed - // or unkeyed containers, because we're decoding a single - // value here (string, int, double, data, null). If such an - // error happens, we'll switch to JSON decoding. - let columnDecoder = ColumnDecoder( - row: row, - columnIndex: index, - codingPath: codingPath + [key]) - return try T(from: columnDecoder) - } catch is JSONRequiredError { - // Decode from JSON - guard let data = row.dataNoCopy(atIndex: index) else { - fatalConversionError(to: T.self, from: row[index], conversionContext: ValueConversionContext(row).atColumn(index)) - } - return try R - .databaseJSONDecoder(for: key.stringValue) - .decode(type.self, from: data) - } - } - } -} - -// MARK: - PrefetchedRowsDecoder - -private struct PrefetchedRowsDecoder: Decoder { - var rows: [Row] - var codingPath: [CodingKey] - var currentIndex: Int - var userInfo: [CodingUserInfoKey: Any] { return R.databaseDecodingUserInfo } - - init(rows: [Row], codingPath: [CodingKey]) { - self.rows = rows - self.codingPath = codingPath - self.currentIndex = 0 - } - - func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer where Key : CodingKey { - fatalError("keyed decoding from prefetched rows is not supported") - } - - func unkeyedContainer() throws -> UnkeyedDecodingContainer { - return self - } - - func singleValueContainer() throws -> SingleValueDecodingContainer { - fatalError("single value decoding from prefetched rows is not supported") - } -} - -extension PrefetchedRowsDecoder: UnkeyedDecodingContainer { - var count: Int? { - return rows.count - } - - var isAtEnd: Bool { - return currentIndex >= rows.count - } - - mutating func decodeNil() throws -> Bool { - return false - } - - mutating func decode(_ type: T.Type) throws -> T where T : Decodable { - defer { currentIndex += 1 } - let decoder = RowDecoder(row: rows[currentIndex], codingPath: codingPath) - return try T(from: decoder) - } - - mutating func nestedContainer(keyedBy type: NestedKey.Type) throws -> KeyedDecodingContainer where NestedKey : CodingKey { - fatalError("not implemented") - } - - mutating func nestedUnkeyedContainer() throws -> UnkeyedDecodingContainer { - fatalError("not implemented") - } - - mutating func superDecoder() throws -> Decoder { - fatalError("not implemented") - } -} - -// MARK: - ColumnDecoder - -/// The decoder that decodes from a database column -private struct ColumnDecoder: Decoder { - var row: Row - var columnIndex: Int - var codingPath: [CodingKey] - var userInfo: [CodingUserInfoKey: Any] { return R.databaseDecodingUserInfo } - - func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer { - // We need to switch to JSON decoding - throw JSONRequiredError() - } - - func unkeyedContainer() throws -> UnkeyedDecodingContainer { - // We need to switch to JSON decoding - throw JSONRequiredError() - } - - func singleValueContainer() throws -> SingleValueDecodingContainer { - return self - } -} - -extension ColumnDecoder: SingleValueDecodingContainer { - func decodeNil() -> Bool { - return row.hasNull(atIndex: columnIndex) - } - - func decode(_ type: Bool.Type ) throws -> Bool { return row[columnIndex] } - func decode(_ type: Int.Type ) throws -> Int { return row[columnIndex] } - func decode(_ type: Int8.Type ) throws -> Int8 { return row[columnIndex] } - func decode(_ type: Int16.Type ) throws -> Int16 { return row[columnIndex] } - func decode(_ type: Int32.Type ) throws -> Int32 { return row[columnIndex] } - func decode(_ type: Int64.Type ) throws -> Int64 { return row[columnIndex] } - func decode(_ type: UInt.Type ) throws -> UInt { return row[columnIndex] } - func decode(_ type: UInt8.Type ) throws -> UInt8 { return row[columnIndex] } - func decode(_ type: UInt16.Type) throws -> UInt16 { return row[columnIndex] } - func decode(_ type: UInt32.Type) throws -> UInt32 { return row[columnIndex] } - func decode(_ type: UInt64.Type) throws -> UInt64 { return row[columnIndex] } - func decode(_ type: Float.Type ) throws -> Float { return row[columnIndex] } - func decode(_ type: Double.Type) throws -> Double { return row[columnIndex] } - func decode(_ type: String.Type) throws -> String { return row[columnIndex] } - - func decode(_ type: T.Type) throws -> T where T : Decodable { - // Prefer DatabaseValueConvertible decoding over Decodable. - // This allows decoding Date from String, or DatabaseValue from NULL. - if type == Date.self { - return R.databaseDateDecodingStrategy.decode(fromRow: row, columnAtIndex: columnIndex) as! T - } else if let type = T.self as? (DatabaseValueConvertible & StatementColumnConvertible).Type { - return type.fastDecode(from: row, atUncheckedIndex: columnIndex) as! T - } else if let type = T.self as? DatabaseValueConvertible.Type { - return type.decode(from: row, atUncheckedIndex: columnIndex) as! T - } else { - return try T(from: self) - } - } -} - -/// The error that triggers JSON decoding -private struct JSONRequiredError: Error { } - -/// The error for missing columns -private struct MissingColumnError: Error { - var column: String -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -fileprivate var iso8601Formatter: ISO8601DateFormatter = { - let formatter = ISO8601DateFormatter() - formatter.formatOptions = .withInternetDateTime - return formatter -}() - -private extension DatabaseDateDecodingStrategy { - @inline(__always) - func decodeIfPresent(fromRow row: Row, columnAtIndex index: Int) -> Date? { - if let sqliteStatement = row.sqliteStatement { - return decodeIfPresent( - sqliteStatement: sqliteStatement, - index: Int32(index)) - } else { - return decodeIfPresent( - from: row[index], - conversionContext: ValueConversionContext(row).atColumn(index)) - } - } - - @inline(__always) - func decode(fromRow row: Row, columnAtIndex index: Int) -> Date { - if let sqliteStatement = row.sqliteStatement { - return decode( - sqliteStatement: sqliteStatement, - index: Int32(index)) - } else { - return decode( - from: row[index], - conversionContext: ValueConversionContext(row).atColumn(index)) - } - } - - @inline(__always) - func decode(sqliteStatement: SQLiteStatement, index: Int32) -> Date { - switch self { - case .deferredToDate: - return Date(sqliteStatement: sqliteStatement, index: index) - case .timeIntervalSinceReferenceDate: - let timeInterval = TimeInterval(sqliteStatement: sqliteStatement, index: index) - return Date(timeIntervalSinceReferenceDate: timeInterval) - case .timeIntervalSince1970: - let timeInterval = TimeInterval(sqliteStatement: sqliteStatement, index: index) - return Date(timeIntervalSince1970: timeInterval) - case .millisecondsSince1970: - let timeInterval = TimeInterval(sqliteStatement: sqliteStatement, index: index) - return Date(timeIntervalSince1970: timeInterval / 1000.0) - case .iso8601: - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - let string = String(sqliteStatement: sqliteStatement, index: index) - guard let date = iso8601Formatter.date(from: string) else { - fatalConversionError(to: Date.self, sqliteStatement: sqliteStatement, index: index) - } - return date - } else { - fatalError("ISO8601DateFormatter is unavailable on this platform.") - } - case .formatted(let formatter): - let string = String(sqliteStatement: sqliteStatement, index: index) - guard let date = formatter.date(from: string) else { - fatalConversionError(to: Date.self, sqliteStatement: sqliteStatement, index: index) - } - return date - case .custom(let format): - let dbValue = DatabaseValue(sqliteStatement: sqliteStatement, index: index) - guard let date = format(dbValue) else { - fatalConversionError(to: Date.self, sqliteStatement: sqliteStatement, index: index) - } - return date - } - } - - @inline(__always) - func decodeIfPresent(sqliteStatement: SQLiteStatement, index: Int32) -> Date? { - if sqlite3_column_type(sqliteStatement, index) == SQLITE_NULL { - return nil - } - return decode(sqliteStatement: sqliteStatement, index: index) - } - - @inline(__always) - func decode(from dbValue: DatabaseValue, conversionContext: @autoclosure () -> ValueConversionContext?) -> Date { - if let date = dateFromDatabaseValue(dbValue) { - return date - } else { - fatalConversionError(to: Date.self, from: dbValue, conversionContext: conversionContext()) - } - } - - @inline(__always) - func decodeIfPresent(from dbValue: DatabaseValue, conversionContext: @autoclosure () -> ValueConversionContext?) -> Date? { - if dbValue.isNull { - return nil - } else if let date = dateFromDatabaseValue(dbValue) { - return date - } else { - fatalConversionError(to: Date.self, from: dbValue, conversionContext: conversionContext()) - } - } - - // Returns nil if decoding fails - @inline(__always) - private func dateFromDatabaseValue(_ dbValue: DatabaseValue) -> Date? { - switch self { - case .deferredToDate: - return Date.fromDatabaseValue(dbValue) - case .timeIntervalSinceReferenceDate: - return TimeInterval - .fromDatabaseValue(dbValue) - .map { Date(timeIntervalSinceReferenceDate: $0) } - case .timeIntervalSince1970: - return TimeInterval - .fromDatabaseValue(dbValue) - .map { Date(timeIntervalSince1970: $0) } - case .millisecondsSince1970: - return TimeInterval - .fromDatabaseValue(dbValue) - .map { Date(timeIntervalSince1970: $0 / 1000.0) } - case .iso8601: - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return String - .fromDatabaseValue(dbValue) - .flatMap { iso8601Formatter.date(from: $0) } - } else { - fatalError("ISO8601DateFormatter is unavailable on this platform.") - } - case .formatted(let formatter): - return String - .fromDatabaseValue(dbValue) - .flatMap { formatter.date(from: $0) } - case .custom(let format): - return format(dbValue) - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord+TableRecord.swift b/Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord+TableRecord.swift deleted file mode 100755 index 9377364..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord+TableRecord.swift +++ /dev/null @@ -1,182 +0,0 @@ -extension FetchableRecord where Self: TableRecord { - - // MARK: Fetching All - - /// A cursor over all records fetched from the database. - /// - /// // SELECT * FROM player - /// let players = try Player.fetchCursor(db) // Cursor of Player - /// while let player = try players.next() { // Player - /// ... - /// } - /// - /// Records are iterated in the natural ordering of the table. - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - /// - /// - parameter db: A database connection. - /// - returns: A cursor over fetched records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database) throws -> RecordCursor { - return try all().fetchCursor(db) - } - - /// An array of all records fetched from the database. - /// - /// // SELECT * FROM player - /// let players = try Player.fetchAll(db) // [Player] - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - /// - /// - parameter db: A database connection. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database) throws -> [Self] { - return try all().fetchAll(db) - } - - /// The first found record. - /// - /// // SELECT * FROM player - /// let player = try Player.fetchOne(db) // Player? - /// - /// The selection defaults to all columns. This default can be changed for - /// all requests by the `TableRecord.databaseSelection` property, or - /// for individual requests with the `TableRecord.select` method. - /// - /// - parameter db: A database connection. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database) throws -> Self? { - return try all().fetchOne(db) - } -} - -extension FetchableRecord where Self: TableRecord { - - // MARK: Fetching by Single-Column Primary Key - - /// Returns a cursor over records, given their primary keys. - /// - /// let players = try Player.fetchCursor(db, keys: [1, 2, 3]) // Cursor of Player - /// while let player = try players.next() { // Player - /// ... - /// } - /// - /// Records are iterated in unspecified order. - /// - /// - parameters: - /// - db: A database connection. - /// - keys: A sequence of primary keys. - /// - returns: A cursor over fetched records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, keys: Sequence) throws -> RecordCursor where Sequence.Element: DatabaseValueConvertible { - return try filter(keys: keys).fetchCursor(db) - } - - /// Returns an array of records, given their primary keys. - /// - /// let players = try Player.fetchAll(db, keys: [1, 2, 3]) // [Player] - /// - /// The order of records in the returned array is undefined. - /// - /// - parameters: - /// - db: A database connection. - /// - keys: A sequence of primary keys. - /// - returns: An array of records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, keys: Sequence) throws -> [Self] where Sequence.Element: DatabaseValueConvertible { - let keys = Array(keys) - if keys.isEmpty { - // Avoid hitting the database - return [] - } - return try filter(keys: keys).fetchAll(db) - } - - /// Returns a single record given its primary key. - /// - /// let player = try Player.fetchOne(db, key: 123) // Player? - /// - /// - parameters: - /// - db: A database connection. - /// - key: A primary key value. - /// - returns: An optional record. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, key: PrimaryKeyType?) throws -> Self? { - guard let key = key else { - // Avoid hitting the database - return nil - } - return try filter(key: key).fetchOne(db) - } -} - -extension FetchableRecord where Self: TableRecord { - - // MARK: Fetching by Key - - /// Returns a cursor over records identified by the provided unique keys - /// (primary key or any key with a unique index on it). - /// - /// let players = try Player.fetchCursor(db, keys: [["email": "a@example.com"], ["email": "b@example.com"]]) // Cursor of Player - /// while let player = try players.next() { // Player - /// ... - /// } - /// - /// Records are iterated in unspecified order. - /// - /// - parameters: - /// - db: A database connection. - /// - keys: An array of key dictionaries. - /// - returns: A cursor over fetched records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, keys: [[String: DatabaseValueConvertible?]]) throws -> RecordCursor { - return try filter(keys: keys).fetchCursor(db) - } - - /// Returns an array of records identified by the provided unique keys - /// (primary key or any key with a unique index on it). - /// - /// let players = try Player.fetchAll(db, keys: [["email": "a@example.com"], ["email": "b@example.com"]]) // [Player] - /// - /// The order of records in the returned array is undefined. - /// - /// - parameters: - /// - db: A database connection. - /// - keys: An array of key dictionaries. - /// - returns: An array of records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, keys: [[String: DatabaseValueConvertible?]]) throws -> [Self] { - if keys.isEmpty { - // Avoid hitting the database - return [] - } - return try filter(keys: keys).fetchAll(db) - } - - /// Returns a single record identified by a unique key (the primary key or - /// any key with a unique index on it). - /// - /// let player = try Player.fetchOne(db, key: ["name": Arthur"]) // Player? - /// - /// - parameters: - /// - db: A database connection. - /// - key: A dictionary of values. - /// - returns: An optional record. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, key: [String: DatabaseValueConvertible?]?) throws -> Self? { - guard let key = key else { - // Avoid hitting the database - return nil - } - return try filter(key: key).fetchOne(db) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord.swift b/Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord.swift deleted file mode 100755 index da3f358..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Record/FetchableRecord.swift +++ /dev/null @@ -1,468 +0,0 @@ -import Foundation -#if SWIFT_PACKAGE - import CSQLite -#elseif GRDBCIPHER - import SQLCipher -#elseif !GRDBCUSTOMSQLITE && !GRDBCIPHER - import SQLite3 -#endif - -/// Types that adopt FetchableRecord can be initialized from a database Row. -/// -/// let row = try Row.fetchOne(db, sql: "SELECT ...")! -/// let player = Player(row) -/// -/// The protocol comes with built-in methods that allow to fetch cursors, -/// arrays, or single records: -/// -/// try Player.fetchCursor(db, sql: "SELECT ...", arguments:...) // Cursor of Player -/// try Player.fetchAll(db, sql: "SELECT ...", arguments:...) // [Player] -/// try Player.fetchOne(db, sql: "SELECT ...", arguments:...) // Player? -/// -/// let statement = try db.makeSelectStatement(sql: "SELECT ...") -/// try Player.fetchCursor(statement, arguments:...) // Cursor of Player -/// try Player.fetchAll(statement, arguments:...) // [Player] -/// try Player.fetchOne(statement, arguments:...) // Player? -/// -/// FetchableRecord is adopted by Record. -public protocol FetchableRecord { - - // MARK: - Row Decoding - - /// Creates a record from `row`. - /// - /// For performance reasons, the row argument may be reused during the - /// iteration of a fetch query. If you want to keep the row for later use, - /// make sure to store a copy: `self.row = row.copy()`. - init(row: Row) - - // MARK: - Customizing the Format of Database Columns - - /// When the FetchableRecord type also adopts the standard Decodable - /// protocol, you can use this dictionary to customize the decoding process - /// from database rows. - /// - /// For example: - /// - /// // A key that holds a decoder's name - /// let decoderName = CodingUserInfoKey(rawValue: "decoderName")! - /// - /// // A FetchableRecord + Decodable record - /// struct Player: FetchableRecord, Decodable { - /// // Customize the decoder name when decoding a database row - /// static let databaseDecodingUserInfo: [CodingUserInfoKey: Any] = [decoderName: "Database"] - /// - /// init(from decoder: Decoder) throws { - /// // Print the decoder name - /// print(decoder.userInfo[decoderName]) - /// ... - /// } - /// } - /// - /// // prints "Database" - /// let player = try Player.fetchOne(db, ...) - /// - /// // prints "JSON" - /// let decoder = JSONDecoder() - /// decoder.userInfo = [decoderName: "JSON"] - /// let player = try decoder.decode(Player.self, from: ...) - static var databaseDecodingUserInfo: [CodingUserInfoKey: Any] { get } - - /// When the FetchableRecord type also adopts the standard Decodable - /// protocol, this method controls the decoding process of nested properties - /// from JSON database columns. - /// - /// The default implementation returns a JSONDecoder with the - /// following properties: - /// - /// - dataDecodingStrategy: .base64 - /// - dateDecodingStrategy: .millisecondsSince1970 - /// - nonConformingFloatDecodingStrategy: .throw - /// - /// You can override those defaults: - /// - /// struct Achievement: Decodable { - /// var name: String - /// var date: Date - /// } - /// - /// struct Player: Decodable, FetchableRecord { - /// // stored in a JSON column - /// var achievements: [Achievement] - /// - /// static func databaseJSONDecoder(for column: String) -> JSONDecoder { - /// let decoder = JSONDecoder() - /// decoder.dateDecodingStrategy = .iso8601 - /// return decoder - /// } - /// } - static func databaseJSONDecoder(for column: String) -> JSONDecoder - - /// When the FetchableRecord type also adopts the standard Decodable - /// protocol, this property controls the decoding of date properties. - /// - /// Default value is .deferredToDate - /// - /// For example: - /// - /// struct Player: FetchableRecord, Decodable { - /// static let databaseDateDecodingStrategy: DatabaseDateDecodingStrategy = .timeIntervalSince1970 - /// - /// var name: String - /// var registrationDate: Date // decoded from epoch timestamp - /// } - static var databaseDateDecodingStrategy: DatabaseDateDecodingStrategy { get } -} - -extension FetchableRecord { - public static var databaseDecodingUserInfo: [CodingUserInfoKey: Any] { - return [:] - } - - /// Returns a JSONDecoder with the following properties: - /// - /// - dataDecodingStrategy: .base64 - /// - dateDecodingStrategy: .millisecondsSince1970 - /// - nonConformingFloatDecodingStrategy: .throw - public static func databaseJSONDecoder(for column: String) -> JSONDecoder { - let decoder = JSONDecoder() - decoder.dataDecodingStrategy = .base64 - decoder.dateDecodingStrategy = .millisecondsSince1970 - decoder.nonConformingFloatDecodingStrategy = .throw - return decoder - } - - public static var databaseDateDecodingStrategy: DatabaseDateDecodingStrategy { - return .deferredToDate - } -} - -extension FetchableRecord { - - // MARK: Fetching From SelectStatement - - /// A cursor over records fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT * FROM player") - /// let players = try Player.fetchCursor(statement) // Cursor of Player - /// while let player = try players.next() { // Player - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> RecordCursor { - return try RecordCursor(statement: statement, arguments: arguments, adapter: adapter) - } - - /// Returns an array of records fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT * FROM player") - /// let players = try Player.fetchAll(statement) // [Player] - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> [Self] { - return try Array(fetchCursor(statement, arguments: arguments, adapter: adapter)) - } - - /// Returns a single record fetched from a prepared statement. - /// - /// let statement = try db.makeSelectStatement(sql: "SELECT * FROM player") - /// let player = try Player.fetchOne(statement) // Player? - /// - /// - parameters: - /// - statement: The statement to run. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An optional record. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws -> Self? { - return try fetchCursor(statement, arguments: arguments, adapter: adapter).next() - } -} - -extension FetchableRecord { - - // MARK: Fetching From SQL - - /// Returns a cursor over records fetched from an SQL query. - /// - /// let players = try Player.fetchCursor(db, sql: "SELECT * FROM player") // Cursor of Player - /// while let player = try players.next() { // Player - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: A cursor over fetched records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> RecordCursor { - return try fetchCursor(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns an array of records fetched from an SQL query. - /// - /// let players = try Player.fetchAll(db, sql: "SELECT * FROM player") // [Player] - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An array of records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> [Self] { - return try fetchAll(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Returns a single record fetched from an SQL query. - /// - /// let player = try Player.fetchOne(db, sql: "SELECT * FROM player") // Player? - /// - /// - parameters: - /// - db: A database connection. - /// - sql: An SQL query. - /// - arguments: Statement arguments. - /// - adapter: Optional RowAdapter - /// - returns: An optional record. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws -> Self? { - return try fetchOne(db, SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } -} - -extension FetchableRecord { - - // MARK: Fetching From FetchRequest - - /// Returns a cursor over records fetched from a fetch request. - /// - /// let request = try Player.all() - /// let players = try Player.fetchCursor(db, request) // Cursor of Player - /// while let player = try players.next() { // Player - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameters: - /// - db: A database connection. - /// - sql: a FetchRequest. - /// - returns: A cursor over fetched records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchCursor(_ db: Database, _ request: R) throws -> RecordCursor { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchCursor(statement, adapter: adapter) - } - - /// Returns an array of records fetched from a fetch request. - /// - /// let request = try Player.all() - /// let players = try Player.fetchAll(db, request) // [Player] - /// - /// - parameters: - /// - db: A database connection. - /// - sql: a FetchRequest. - /// - returns: An array of records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchAll(_ db: Database, _ request: R) throws -> [Self] { - let (statement, adapter) = try request.prepare(db, forSingleResult: false) - return try fetchAll(statement, adapter: adapter) - } - - /// Returns a single record fetched from a fetch request. - /// - /// let request = try Player.filter(key: 1) - /// let player = try Player.fetchOne(db, request) // Player? - /// - /// - parameters: - /// - db: A database connection. - /// - sql: a FetchRequest. - /// - returns: An optional record. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public static func fetchOne(_ db: Database, _ request: R) throws -> Self? { - let (statement, adapter) = try request.prepare(db, forSingleResult: true) - return try fetchOne(statement, adapter: adapter) - } -} - -// MARK: - FetchRequest - -extension FetchRequest where RowDecoder: FetchableRecord { - - // MARK: Fetching Records - - /// A cursor over fetched records. - /// - /// let request: ... // Some FetchRequest that fetches Player - /// let players = try request.fetchCursor(db) // Cursor of Player - /// while let player = try players.next() { // Player - /// ... - /// } - /// - /// If the database is modified during the cursor iteration, the remaining - /// elements are undefined. - /// - /// The cursor must be iterated in a protected dispath queue. - /// - /// - parameter db: A database connection. - /// - returns: A cursor over fetched records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchCursor(_ db: Database) throws -> RecordCursor { - return try RowDecoder.fetchCursor(db, self) - } - - /// An array of fetched records. - /// - /// let request: ... // Some FetchRequest that fetches Player - /// let players = try request.fetchAll(db) // [Player] - /// - /// - parameter db: A database connection. - /// - returns: An array of records. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchAll(_ db: Database) throws -> [RowDecoder] { - return try RowDecoder.fetchAll(db, self) - } - - /// The first fetched record. - /// - /// let request: ... // Some FetchRequest that fetches Player - /// let player = try request.fetchOne(db) // Player? - /// - /// - parameter db: A database connection. - /// - returns: An optional record. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - public func fetchOne(_ db: Database) throws -> RowDecoder? { - return try RowDecoder.fetchOne(db, self) - } -} - -// MARK: - RecordCursor - -/// A cursor of records. For example: -/// -/// struct Player : FetchableRecord { ... } -/// try dbQueue.read { db in -/// let players: RecordCursor = try Player.fetchCursor(db, sql: "SELECT * FROM player") -/// } -public final class RecordCursor : Cursor { - @usableFromInline let _statement: SelectStatement - @usableFromInline let _row: Row // Reused for performance - @usableFromInline let _sqliteStatement: SQLiteStatement - @usableFromInline var _done = false - - init(statement: SelectStatement, arguments: StatementArguments? = nil, adapter: RowAdapter? = nil) throws { - _statement = statement - _row = try Row(statement: statement).adapted(with: adapter, layout: statement) - _sqliteStatement = statement.sqliteStatement - _statement.reset(withArguments: arguments) - } - - deinit { - // Statement reset fails when sqlite3_step has previously failed. - // Just ignore reset error. - try? _statement.reset() - } - - /// :nodoc: - @inlinable - public func next() throws -> Record? { - if _done { - // make sure this instance never yields a value again, even if the - // statement is reset by another cursor. - return nil - } - switch sqlite3_step(_sqliteStatement) { - case SQLITE_DONE: - _done = true - return nil - case SQLITE_ROW: - return Record(row: _row) - case let code: - try _statement.didFail(withResultCode: code) - } - } -} - -// MARK: - DatabaseDateDecodingStrategy - -/// DatabaseDateDecodingStrategy specifies how FetchableRecord types that also -/// adopt the standard Decodable protocol decode their date properties. -/// -/// For example: -/// -/// struct Player: FetchableRecord, Decodable { -/// static let databaseDateDecodingStrategy: DatabaseDateDecodingStrategy = .timeIntervalSince1970 -/// -/// var name: String -/// var registrationDate: Date // decoded from epoch timestamp -/// } -public enum DatabaseDateDecodingStrategy { - /// The strategy that uses formatting from the Date structure. - /// - /// It decodes numeric values as a nunber of seconds since Epoch - /// (midnight UTC on January 1st, 1970). - /// - /// It decodes strings in the following formats, assuming UTC time zone. - /// Missing components are assumed to be zero: - /// - /// - `YYYY-MM-DD` - /// - `YYYY-MM-DD HH:MM` - /// - `YYYY-MM-DD HH:MM:SS` - /// - `YYYY-MM-DD HH:MM:SS.SSS` - /// - `YYYY-MM-DDTHH:MM` - /// - `YYYY-MM-DDTHH:MM:SS` - /// - `YYYY-MM-DDTHH:MM:SS.SSS` - case deferredToDate - - /// Decodes numeric values as a number of seconds between the date and - /// midnight UTC on 1 January 2001 - case timeIntervalSinceReferenceDate - - /// Decodes numeric values as a number of seconds between the date and - /// midnight UTC on 1 January 1970 - case timeIntervalSince1970 - - /// Decodes numeric values as a number of milliseconds between the date and - /// midnight UTC on 1 January 1970 - case millisecondsSince1970 - - /// Decodes dates according to the ISO 8601 standards - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - case iso8601 - - /// Decodes a String, according to the provided formatter - case formatted(DateFormatter) - - /// Decodes according to the user-provided function. - /// - /// If the database value does not contain a suitable value, the function - /// must return nil (GRDB will interpret this nil result as a conversion - /// error, and react accordingly). - case custom((DatabaseValue) -> Date?) -} diff --git a/Example/Pods/GRDB.swift/GRDB/Record/FetchedRecordsController.swift b/Example/Pods/GRDB.swift/GRDB/Record/FetchedRecordsController.swift deleted file mode 100755 index 8238fc9..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Record/FetchedRecordsController.swift +++ /dev/null @@ -1,1030 +0,0 @@ -import Foundation - -#if os(iOS) - import UIKit -#endif - -/// You use FetchedRecordsController to track changes in the results of an -/// SQLite request. -/// -/// See https://github.com/groue/GRDB.swift#fetchedrecordscontroller for -/// more information. -public final class FetchedRecordsController { - - // MARK: - Initialization - - /// Creates a fetched records controller initialized from a SQL query and - /// its eventual arguments. - /// - /// let controller = FetchedRecordsController( - /// dbQueue, - /// sql: "SELECT * FROM wine WHERE color = ? ORDER BY name", - /// arguments: [Color.red], - /// isSameRecord: { (wine1, wine2) in wine1.id == wine2.id }) - /// - /// - parameters: - /// - databaseWriter: A DatabaseWriter (DatabaseQueue, or DatabasePool) - /// - sql: An SQL query. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - queue: A serial dispatch queue (defaults to the main queue) - /// - /// The fetched records controller tracking callbacks will be - /// notified of changes in this queue. The controller itself must be - /// used from this queue. - /// - /// - isSameRecord: Optional function that compares two records. - /// - /// This function should return true if the two records have the - /// same identity. For example, they have the same id. - public convenience init( - _ databaseWriter: DatabaseWriter, - sql: String, - arguments: StatementArguments = StatementArguments(), - adapter: RowAdapter? = nil, - queue: DispatchQueue = .main, - isSameRecord: ((Record, Record) -> Bool)? = nil) throws - { - try self.init( - databaseWriter, - request: SQLRequest(sql: sql, arguments: arguments, adapter: adapter), - queue: queue, - isSameRecord: isSameRecord) - } - - /// Creates a fetched records controller initialized from a fetch request - /// from the [Query Interface](https://github.com/groue/GRDB.swift#the-query-interface). - /// - /// let request = Wine.order(Column("name")) - /// let controller = FetchedRecordsController( - /// dbQueue, - /// request: request, - /// isSameRecord: { (wine1, wine2) in wine1.id == wine2.id }) - /// - /// - parameters: - /// - databaseWriter: A DatabaseWriter (DatabaseQueue, or DatabasePool) - /// - request: A fetch request. - /// - queue: A serial dispatch queue (defaults to the main queue) - /// - /// The fetched records controller tracking callbacks will be - /// notified of changes in this queue. The controller itself must be - /// used from this queue. - /// - /// - isSameRecord: Optional function that compares two records. - /// - /// This function should return true if the two records have the - /// same identity. For example, they have the same id. - public convenience init( - _ databaseWriter: DatabaseWriter, - request: Request, - queue: DispatchQueue = .main, - isSameRecord: ((Record, Record) -> Bool)? = nil) throws - where Request: FetchRequest, Request.RowDecoder == Record - { - let itemsAreIdenticalFactory: ItemComparatorFactory - if let isSameRecord = isSameRecord { - itemsAreIdenticalFactory = { _ in { isSameRecord($0.record, $1.record) } } - } else { - itemsAreIdenticalFactory = { _ in { _,_ in false } } - } - - try self.init( - databaseWriter, - request: request, - queue: queue, - itemsAreIdenticalFactory: itemsAreIdenticalFactory) - } - - private init( - _ databaseWriter: DatabaseWriter, - request: Request, - queue: DispatchQueue, - itemsAreIdenticalFactory: @escaping ItemComparatorFactory) throws - where Request: FetchRequest, Request.RowDecoder == Record - { - self.itemsAreIdenticalFactory = itemsAreIdenticalFactory - self.request = ItemRequest(request) - (self.region, self.itemsAreIdentical) = try databaseWriter.unsafeRead { db in - let region = try request.databaseRegion(db) - let itemsAreIdentical = try itemsAreIdenticalFactory(db) - return (region, itemsAreIdentical) - } - self.databaseWriter = databaseWriter - self.queue = queue - } - - /// Executes the controller's fetch request. - /// - /// After executing this method, you can access the the fetched objects with - /// the `fetchedRecords` property. - /// - /// This method must be used from the controller's dispatch queue (the - /// main queue unless stated otherwise in the controller's initializer). - public func performFetch() throws { - // If some changes are currently processed, make sure they are - // discarded. But preserve eventual changes processing for future - // changes. - let fetchAndNotifyChanges = observer?.fetchAndNotifyChanges - observer?.invalidate() - observer = nil - - // Fetch items on the writing dispatch queue, so that the transaction - // observer is added on the same serialized queue as transaction - // callbacks. - try databaseWriter.write { db in - let initialItems = try request.fetchAll(db) - fetchedItems = initialItems - if let fetchAndNotifyChanges = fetchAndNotifyChanges { - let observer = FetchedRecordsObserver(region: self.region, fetchAndNotifyChanges: fetchAndNotifyChanges) - self.observer = observer - observer.items = initialItems - db.add(transactionObserver: observer) - } - } - } - - - // MARK: - Configuration - - /// The database writer used to fetch records. - /// - /// The controller registers as a transaction observer in order to respond - /// to changes. - public let databaseWriter: DatabaseWriter - - /// The dispatch queue on which the controller must be used. - /// - /// Unless specified otherwise at initialization time, it is the main queue. - public let queue: DispatchQueue - - /// Updates the fetch request, and eventually notifies the tracking - /// callbacks if performFetch() has been called. - /// - /// This method must be used from the controller's dispatch queue (the - /// main queue unless stated otherwise in the controller's initializer). - public func setRequest(_ request: Request) throws where Request: FetchRequest, Request.RowDecoder == Record { - self.request = ItemRequest(request) - (self.region, self.itemsAreIdentical) = try databaseWriter.unsafeRead { db in - let region = try request.databaseRegion(db) - let itemsAreIdentical = try itemsAreIdenticalFactory(db) - return (region, itemsAreIdentical) - } - - // No observer: don't look for changes - guard let observer = observer else { return } - - // If some changes are currently processed, make sure they are - // discarded. But preserve eventual changes processing. - let fetchAndNotifyChanges = observer.fetchAndNotifyChanges - observer.invalidate() - self.observer = nil - - // Replace observer so that it tracks a new set of columns, - // and notify eventual changes - let initialItems = fetchedItems - databaseWriter.writeWithoutTransaction { db in - let observer = FetchedRecordsObserver(region: region, fetchAndNotifyChanges: fetchAndNotifyChanges) - self.observer = observer - observer.items = initialItems - db.add(transactionObserver: observer) - observer.fetchAndNotifyChanges(observer) - } - } - - /// Updates the fetch request, and eventually notifies the tracking - /// callbacks if performFetch() has been called. - /// - /// This method must be used from the controller's dispatch queue (the - /// main queue unless stated otherwise in the controller's initializer). - public func setRequest(sql: String, arguments: StatementArguments = StatementArguments(), adapter: RowAdapter? = nil) throws { - try setRequest(SQLRequest(sql: sql, arguments: arguments, adapter: adapter)) - } - - /// Registers changes notification callbacks. - /// - /// This method must be used from the controller's dispatch queue (the - /// main queue unless stated otherwise in the controller's initializer). - /// - /// - parameters: - /// - willChange: Invoked before records are updated. - /// - onChange: Invoked for each record that has been added, - /// removed, moved, or updated. - /// - didChange: Invoked after records have been updated. - public func trackChanges( - willChange: ((FetchedRecordsController) -> ())? = nil, - onChange: ((FetchedRecordsController, Record, FetchedRecordChange) -> ())? = nil, - didChange: ((FetchedRecordsController) -> ())? = nil) - { - // I hate you SE-0110. - let wrappedWillChange: ((FetchedRecordsController, Void) -> ())? - if let willChange = willChange { - wrappedWillChange = { (controller, _) in willChange(controller) } - } else { - wrappedWillChange = nil - } - - let wrappedDidChange: ((FetchedRecordsController, Void) -> ())? - if let didChange = didChange { - wrappedDidChange = { (controller, _) in didChange(controller) } - } else { - wrappedDidChange = nil - } - - trackChanges( - fetchAlongside: { _ in }, - willChange: wrappedWillChange, - onChange: onChange, - didChange: wrappedDidChange) - - // Without bloody SE-0110: -// trackChanges( -// fetchAlongside: { _ in }, -// willChange: willChange.map { callback in { (controller, _) in callback(controller) } }, -// onChange: onChange, -// didChange: didChange.map { callback in { (controller, _) in callback(controller) } }) - } - - /// Registers changes notification callbacks. - /// - /// This method must be used from the controller's dispatch queue (the - /// main queue unless stated otherwise in the controller's initializer). - /// - /// - parameters: - /// - fetchAlongside: The value returned from this closure is given to - /// willChange and didChange callbacks, as their - /// `fetchedAlongside` argument. The closure is guaranteed to see the - /// database in the state it has just after eventual changes to the - /// fetched records have been performed. Use it in order to fetch - /// values that must be consistent with the fetched records. - /// - willChange: Invoked before records are updated. - /// - onChange: Invoked for each record that has been added, - /// removed, moved, or updated. - /// - didChange: Invoked after records have been updated. - public func trackChanges( - fetchAlongside: @escaping (Database) throws -> T, - willChange: ((FetchedRecordsController, _ fetchedAlongside: T) -> ())? = nil, - onChange: ((FetchedRecordsController, Record, FetchedRecordChange) -> ())? = nil, - didChange: ((FetchedRecordsController, _ fetchedAlongside: T) -> ())? = nil) - { - // If some changes are currently processed, make sure they are - // discarded because they would trigger previously set callbacks. - observer?.invalidate() - observer = nil - - guard (willChange != nil) || (onChange != nil) || (didChange != nil) else { - // Stop tracking - return - } - - var willProcessTransaction: () -> () = { } - var didProcessTransaction: () -> () = { } - #if os(iOS) - if let application = application { - var backgroundTaskID: UIBackgroundTaskIdentifier! = nil - willProcessTransaction = { - backgroundTaskID = application.beginBackgroundTask { - application.endBackgroundTask(backgroundTaskID) - } - } - didProcessTransaction = { - application.endBackgroundTask(backgroundTaskID) - } - } - #endif - - let initialItems = fetchedItems - databaseWriter.writeWithoutTransaction { db in - let fetchAndNotifyChanges = makeFetchAndNotifyChangesFunction( - controller: self, - fetchAlongside: fetchAlongside, - itemsAreIdentical: itemsAreIdentical, - willProcessTransaction: willProcessTransaction, - willChange: willChange, - onChange: onChange, - didChange: didChange, - didProcessTransaction: didProcessTransaction) - let observer = FetchedRecordsObserver(region: region, fetchAndNotifyChanges: fetchAndNotifyChanges) - self.observer = observer - if let initialItems = initialItems { - observer.items = initialItems - db.add(transactionObserver: observer) - observer.fetchAndNotifyChanges(observer) - } - } - } - - /// Registers an error callback. - /// - /// Whenever the controller could not look for changes after a transaction - /// has potentially modified the tracked request, this error handler is - /// called. - /// - /// The request observation is not stopped, though: future transactions may - /// successfully be handled, and the notified changes will then be based on - /// the last successful fetch. - /// - /// This method must be used from the controller's dispatch queue (the - /// main queue unless stated otherwise in the controller's initializer). - public func trackErrors(_ errorHandler: @escaping (FetchedRecordsController, Error) -> ()) { - self.errorHandler = errorHandler - } - - #if os(iOS) - /// Call this method when changes performed while the application is - /// in the background should be processed before the application enters the - /// suspended state. - /// - /// Whenever the tracked request is changed, the fetched records controller - /// sets up a background task using - /// `UIApplication.beginBackgroundTask(expirationHandler:)` which is ended - /// after the `didChange` callback has completed. - public func allowBackgroundChangesTracking(in application: UIApplication) { - self.application = application - } - #endif - - // MARK: - Accessing Records - - /// The fetched records. - /// - /// The value of this property is nil until performFetch() has been called. - /// - /// The records reflect the state of the database after the initial - /// call to performFetch, and after each database transaction that affects - /// the results of the fetch request. - /// - /// This property must be used from the controller's dispatch queue (the - /// main queue unless stated otherwise in the controller's initializer). - public var fetchedRecords: [Record] { - guard let fetchedItems = fetchedItems else { - fatalError("the performFetch() method must be called before accessing fetched records") - } - return fetchedItems.map { $0.record } - } - - - // MARK: - Not public - - #if os(iOS) - /// Support for allowBackgroundChangeTracking(in:) - var application: UIApplication? - #endif - - /// The items - fileprivate var fetchedItems: [Item]? - - /// The record comparator - private var itemsAreIdentical: ItemComparator - - /// The record comparator factory (support for request change) - private let itemsAreIdenticalFactory: ItemComparatorFactory - - /// The request - fileprivate typealias ItemRequest = AnyFetchRequest> - fileprivate var request: ItemRequest - - /// The observed database region - private var region : DatabaseRegion - - /// The eventual current database observer - private var observer: FetchedRecordsObserver? - - /// The eventual error handler - fileprivate var errorHandler: ((FetchedRecordsController, Error) -> ())? -} - -extension FetchedRecordsController where Record: TableRecord { - - // MARK: - Initialization - - /// Creates a fetched records controller initialized from a SQL query and - /// its eventual arguments. - /// - /// let controller = FetchedRecordsController( - /// dbQueue, - /// sql: "SELECT * FROM wine WHERE color = ? ORDER BY name", - /// arguments: [Color.red]) - /// - /// The records are compared by primary key (single-column primary key, - /// compound primary key, or implicit rowid). For a database table which - /// has an `id` primary key, this initializer is equivalent to: - /// - /// // Assuming the wine table has an `id` primary key: - /// let controller = FetchedRecordsController( - /// dbQueue, - /// sql: "SELECT * FROM wine WHERE color = ? ORDER BY name", - /// arguments: [Color.red], - /// isSameRecord: { (wine1, wine2) in wine1.id == wine2.id }) - /// - /// - parameters: - /// - databaseWriter: A DatabaseWriter (DatabaseQueue, or DatabasePool) - /// - sql: An SQL query. - /// - arguments: Optional statement arguments. - /// - adapter: Optional RowAdapter - /// - queue: A serial dispatch queue (defaults to the main queue) - /// - /// The fetched records controller tracking callbacks will be - /// notified of changes in this queue. The controller itself must be - /// used from this queue. - public convenience init( - _ databaseWriter: DatabaseWriter, - sql: String, - arguments: StatementArguments = StatementArguments(), - adapter: RowAdapter? = nil, - queue: DispatchQueue = .main) throws - { - try self.init( - databaseWriter, - request: SQLRequest(sql: sql, arguments: arguments, adapter: adapter), - queue: queue) - } - - /// Creates a fetched records controller initialized from a fetch request - /// from the [Query Interface](https://github.com/groue/GRDB.swift#the-query-interface). - /// - /// let request = Wine.order(Column("name")) - /// let controller = FetchedRecordsController( - /// dbQueue, - /// request: request) - /// - /// The records are compared by primary key (single-column primary key, - /// compound primary key, or implicit rowid). For a database table which - /// has an `id` primary key, this initializer is equivalent to: - /// - /// // Assuming the wine table has an `id` primary key: - /// let controller = FetchedRecordsController( - /// dbQueue, - /// request: request, - /// isSameRecord: { (wine1, wine2) in wine1.id == wine2.id }) - /// - /// - parameters: - /// - databaseWriter: A DatabaseWriter (DatabaseQueue, or DatabasePool) - /// - request: A fetch request. - /// - queue: A serial dispatch queue (defaults to the main queue) - /// - /// The fetched records controller tracking callbacks will be - /// notified of changes in this queue. The controller itself must be - /// used from this queue. - public convenience init( - _ databaseWriter: DatabaseWriter, - request: Request, - queue: DispatchQueue = .main) throws - where Request: FetchRequest, Request.RowDecoder == Record - { - // Builds a function that returns true if and only if two items - // have the same primary key and primary keys contain at least one - // non-null value. - let itemsAreIdenticalFactory: ItemComparatorFactory = { db in - // Extract primary key columns from database table - let columns = try db.primaryKey(Record.databaseTableName).columns - - // Compare primary keys - assert(!columns.isEmpty) - return { (lItem, rItem) in - var notNullValue = false - for column in columns { - let lValue: DatabaseValue = lItem.row[column] - let rValue: DatabaseValue = rItem.row[column] - if lValue != rValue { - // different primary keys - return false - } - if !lValue.isNull || !rValue.isNull { - notNullValue = true - } - } - // identical primary keys iff at least one value is not null - return notNullValue - } - } - try self.init( - databaseWriter, - request: request, - queue: queue, - itemsAreIdenticalFactory: itemsAreIdenticalFactory) - } -} - - -// MARK: - FetchedRecordsObserver - -/// FetchedRecordsController adopts TransactionObserverType so that it can -/// monitor changes to its fetched records. -private final class FetchedRecordsObserver : TransactionObserver { - var isValid: Bool - var needsComputeChanges: Bool - var items: [Item]! // ought to be not nil when observer has started tracking transactions - let queue: DispatchQueue // protects items - let region: DatabaseRegion - var fetchAndNotifyChanges: (FetchedRecordsObserver) -> () - - init(region: DatabaseRegion, fetchAndNotifyChanges: @escaping (FetchedRecordsObserver) -> ()) { - self.isValid = true - self.items = nil - self.needsComputeChanges = false - self.queue = DispatchQueue(label: "GRDB.FetchedRecordsObserver") - self.region = region - self.fetchAndNotifyChanges = fetchAndNotifyChanges - } - - func invalidate() { - isValid = false - } - - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { - return region.isModified(byEventsOfKind: eventKind) - } - - /// Part of the TransactionObserverType protocol - func databaseDidChange(with event: DatabaseEvent) { - if region.isModified(by: event) { - needsComputeChanges = true - stopObservingDatabaseChangesUntilNextTransaction() - } - } - - /// Part of the TransactionObserverType protocol - func databaseDidRollback(_ db: Database) { - needsComputeChanges = false - } - - /// Part of the TransactionObserverType protocol - func databaseDidCommit(_ db: Database) { - // The databaseDidCommit callback is called in the database writer - // dispatch queue, which is serialized: it is guaranteed to process the - // last database transaction. - - // Were observed tables modified? - guard needsComputeChanges else { return } - needsComputeChanges = false - - fetchAndNotifyChanges(self) - } -} - - -// MARK: - Changes - -private func makeFetchFunction( - controller: FetchedRecordsController, - fetchAlongside: @escaping (Database) throws -> T, - willProcessTransaction: @escaping () -> (), - completion: @escaping (Result<(fetchedItems: [Item], fetchedAlongside: T, observer: FetchedRecordsObserver)>) -> () - ) -> (FetchedRecordsObserver) -> () -{ - // Make sure we keep a weak reference to the fetched records controller, - // so that the user can use unowned references in callbacks: - // - // controller.trackChanges { [unowned self] ... } - // - // Should controller become strong at any point before callbacks are - // called, such unowned reference would have an opportunity to crash. - return { [weak controller] observer in - // Return if observer has been invalidated, or if fetched records - // controller has been deallocated - guard observer.isValid, - let request = controller?.request, - let databaseWriter = controller?.databaseWriter - else { return } - - willProcessTransaction() - - // Perform a concurrent read so that writer dispatch queue is released - // as soon as possible. - let future = databaseWriter.concurrentRead { db in - try (fetchedItems: request.fetchAll(db), - fetchedAlongside: fetchAlongside(db)) - } - - // Dispatch processing immediately on observer.queue in order to - // process fetched values in the same order as transactions: - observer.queue.async { [weak observer] in - // Return if observer has been deallocated or invalidated - guard let observer = observer, - observer.isValid - else { return } - - do { - // Wait for concurrent read to complete - let values = try future.wait() - - completion(.success(( - fetchedItems: values.fetchedItems, - fetchedAlongside: values.fetchedAlongside, - observer: observer))) - } catch { - completion(.failure(error)) - } - } - } -} - -private func makeFetchAndNotifyChangesFunction( - controller: FetchedRecordsController, - fetchAlongside: @escaping (Database) throws -> T, - itemsAreIdentical: @escaping ItemComparator, - willProcessTransaction: @escaping () -> (), - willChange: ((FetchedRecordsController, _ fetchedAlongside: T) -> ())?, - onChange: ((FetchedRecordsController, Record, FetchedRecordChange) -> ())?, - didChange: ((FetchedRecordsController, _ fetchedAlongside: T) -> ())?, - didProcessTransaction: @escaping () -> () - ) -> (FetchedRecordsObserver) -> () -{ - // Make sure we keep a weak reference to the fetched records controller, - // so that the user can use unowned references in callbacks: - // - // controller.trackChanges { [unowned self] ... } - // - // Should controller become strong at any point before callbacks are - // called, such unowned reference would have an opportunity to crash. - return makeFetchFunction(controller: controller, fetchAlongside: fetchAlongside, willProcessTransaction: willProcessTransaction) { [weak controller] result in - // Return if fetched records controller has been deallocated - guard let callbackQueue = controller?.queue else { return } - - switch result { - case .failure(let error): - callbackQueue.async { - // Now we can retain controller - guard let strongController = controller else { return } - strongController.errorHandler?(strongController, error) - didProcessTransaction() - } - - case .success((fetchedItems: let fetchedItems, fetchedAlongside: let fetchedAlongside, observer: let observer)): - // Return if there is no change - let changes: [ItemChange] - if onChange != nil { - // Compute table view changes - changes = computeChanges(from: observer.items, to: fetchedItems, itemsAreIdentical: itemsAreIdentical) - if changes.isEmpty { return } - } else { - // Don't compute changes: just look for a row difference: - if identicalItemArrays(fetchedItems, observer.items) { return } - changes = [] - } - - // Ready for next check - observer.items = fetchedItems - - callbackQueue.async { [weak observer] in - // Return if observer has been invalidated - guard let strongObserver = observer else { return } - guard strongObserver.isValid else { return } - - // Now we can retain controller - guard let strongController = controller else { return } - - // Notify changes - willChange?(strongController, fetchedAlongside) - strongController.fetchedItems = fetchedItems - if let onChange = onChange { - for change in changes { - onChange(strongController, change.record, change.fetchedRecordChange) - } - } - didChange?(strongController, fetchedAlongside) - didProcessTransaction() - } - } - } -} - -private func computeChanges(from s: [Item], to t: [Item], itemsAreIdentical: ItemComparator) -> [ItemChange] { - let m = s.count - let n = t.count - - // Fill first row and column of insertions and deletions. - - var d: [[[ItemChange]]] = Array(repeating: Array(repeating: [], count: n + 1), count: m + 1) - - var changes = [ItemChange]() - for (row, item) in s.enumerated() { - let deletion = ItemChange.deletion(item: item, indexPath: IndexPath(indexes: [0, row])) - changes.append(deletion) - d[row + 1][0] = changes - } - - changes.removeAll() - for (col, item) in t.enumerated() { - let insertion = ItemChange.insertion(item: item, indexPath: IndexPath(indexes: [0, col])) - changes.append(insertion) - d[0][col + 1] = changes - } - - if m == 0 || n == 0 { - // Pure deletions or insertions - return d[m][n] - } - - // Fill body of matrix. - for tx in 0..], itemsAreIdentical: ItemComparator) -> [ItemChange] { - - /// Returns a potential .move or .update if *change* has a matching change in *changes*: - /// If *change* is a deletion or an insertion, and there is a matching inverse - /// insertion/deletion with the same value in *changes*, a corresponding .move or .update is returned. - /// As a convenience, the index of the matched change is returned as well. - func merge(change: ItemChange, in changes: [ItemChange], itemsAreIdentical: ItemComparator) -> (mergedChange: ItemChange, mergedIndex: Int)? { - - /// Returns the changes between two rows: a dictionary [key: oldValue] - /// Precondition: both rows have the same columns - func changedValues(from oldRow: Row, to newRow: Row) -> [String: DatabaseValue] { - var changedValues: [String: DatabaseValue] = [:] - for (column, newValue) in newRow { - let oldValue: DatabaseValue? = oldRow[column] - if newValue != oldValue { - changedValues[column] = oldValue - } - } - return changedValues - } - - switch change { - case .insertion(let newItem, let newIndexPath): - // Look for a matching deletion - for (index, otherChange) in changes.enumerated() { - guard case .deletion(let oldItem, let oldIndexPath) = otherChange else { continue } - guard itemsAreIdentical(oldItem, newItem) else { continue } - let rowChanges = changedValues(from: oldItem.row, to: newItem.row) - if oldIndexPath == newIndexPath { - return (ItemChange.update(item: newItem, indexPath: oldIndexPath, changes: rowChanges), index) - } else { - return (ItemChange.move(item: newItem, indexPath: oldIndexPath, newIndexPath: newIndexPath, changes: rowChanges), index) - } - } - return nil - - case .deletion(let oldItem, let oldIndexPath): - // Look for a matching insertion - for (index, otherChange) in changes.enumerated() { - guard case .insertion(let newItem, let newIndexPath) = otherChange else { continue } - guard itemsAreIdentical(oldItem, newItem) else { continue } - let rowChanges = changedValues(from: oldItem.row, to: newItem.row) - if oldIndexPath == newIndexPath { - return (ItemChange.update(item: newItem, indexPath: oldIndexPath, changes: rowChanges), index) - } else { - return (ItemChange.move(item: newItem, indexPath: oldIndexPath, newIndexPath: newIndexPath, changes: rowChanges), index) - } - } - return nil - - default: - return nil - } - } - - // Updates must be pushed at the end - var mergedChanges: [ItemChange] = [] - var updateChanges: [ItemChange] = [] - for change in changes { - if let (mergedChange, mergedIndex) = merge(change: change, in: mergedChanges, itemsAreIdentical: itemsAreIdentical) { - mergedChanges.remove(at: mergedIndex) - switch mergedChange { - case .update: - updateChanges.append(mergedChange) - default: - mergedChanges.append(mergedChange) - } - } else { - mergedChanges.append(change) - } - } - return mergedChanges + updateChanges - } - - return standardize(changes: d[m][n], itemsAreIdentical: itemsAreIdentical) -} - -private func identicalItemArrays(_ lhs: [Item], _ rhs: [Item]) -> Bool { - guard lhs.count == rhs.count else { - return false - } - for (lhs, rhs) in zip(lhs, rhs) { - if lhs.row != rhs.row { - return false - } - } - return true -} - - -// MARK: - UITableView Support - -private typealias ItemComparator = (Item, Item) -> Bool -private typealias ItemComparatorFactory = (Database) throws -> ItemComparator - -extension FetchedRecordsController { - - // MARK: - Accessing Records - - /// Returns the object at the given index path. - /// - /// - parameter indexPath: An index path in the fetched records. - /// - /// If indexPath does not describe a valid index path in the fetched - /// records, a fatal error is raised. - public func record(at indexPath: IndexPath) -> Record { - guard let fetchedItems = fetchedItems else { - // Programmer error - fatalError("performFetch() has not been called.") - } - return fetchedItems[indexPath[1]].record - } - - - // MARK: - Querying Sections Information - - /// The sections for the fetched records. - /// - /// You typically use the sections array when implementing - /// UITableViewDataSource methods, such as `numberOfSectionsInTableView`. - /// - /// The sections array is never empty, even when there are no fetched - /// records. In this case, there is a single empty section. - public var sections: [FetchedRecordsSectionInfo] { - // We only support a single section so far. - // We also return a single section when there are no fetched - // records, just like NSFetchedResultsController. - return [FetchedRecordsSectionInfo(controller: self)] - } -} - -extension FetchedRecordsController where Record: EncodableRecord { - - /// Returns the indexPath of a given record. - /// - /// - returns: The index path of *record* in the fetched records, or nil - /// if record could not be found. - public func indexPath(for record: Record) -> IndexPath? { - let item = Item(row: Row(record)) - guard let fetchedItems = fetchedItems, let index = fetchedItems.firstIndex(where: { itemsAreIdentical($0, item) }) else { - return nil - } - return IndexPath(indexes: [0, index]) - } -} - -private enum ItemChange { - case insertion(item: Item, indexPath: IndexPath) - case deletion(item: Item, indexPath: IndexPath) - case move(item: Item, indexPath: IndexPath, newIndexPath: IndexPath, changes: [String: DatabaseValue]) - case update(item: Item, indexPath: IndexPath, changes: [String: DatabaseValue]) -} - -extension ItemChange { - var record: T { - switch self { - case .insertion(item: let item, indexPath: _): - return item.record - case .deletion(item: let item, indexPath: _): - return item.record - case .move(item: let item, indexPath: _, newIndexPath: _, changes: _): - return item.record - case .update(item: let item, indexPath: _, changes: _): - return item.record - } - } - - var fetchedRecordChange: FetchedRecordChange { - switch self { - case .insertion(item: _, indexPath: let indexPath): - return .insertion(indexPath: indexPath) - case .deletion(item: _, indexPath: let indexPath): - return .deletion(indexPath: indexPath) - case .move(item: _, indexPath: let indexPath, newIndexPath: let newIndexPath, changes: let changes): - return .move(indexPath: indexPath, newIndexPath: newIndexPath, changes: changes) - case .update(item: _, indexPath: let indexPath, changes: let changes): - return .update(indexPath: indexPath, changes: changes) - } - } -} - -extension ItemChange: CustomStringConvertible { - var description: String { - switch self { - case .insertion(let item, let indexPath): - return "Insert \(item) at \(indexPath)" - - case .deletion(let item, let indexPath): - return "Delete \(item) from \(indexPath)" - - case .move(let item, let indexPath, let newIndexPath, changes: let changes): - return "Move \(item) from \(indexPath) to \(newIndexPath) with changes: \(changes)" - - case .update(let item, let indexPath, let changes): - return "Update \(item) at \(indexPath) with changes: \(changes)" - } - } -} - -/// A record change, given by a FetchedRecordsController to its change callback. -/// -/// The move and update events hold a *changes* dictionary, whose keys are -/// column names, and values the old values that have been changed. -public enum FetchedRecordChange { - - /// An insertion event, at given indexPath. - case insertion(indexPath: IndexPath) - - /// A deletion event, at given indexPath. - case deletion(indexPath: IndexPath) - - /// A move event, from indexPath to newIndexPath. The *changes* are a - /// dictionary whose keys are column names, and values the old values that - /// have been changed. - case move(indexPath: IndexPath, newIndexPath: IndexPath, changes: [String: DatabaseValue]) - - /// An update event, at given indexPath. The *changes* are a dictionary - /// whose keys are column names, and values the old values that have - /// been changed. - case update(indexPath: IndexPath, changes: [String: DatabaseValue]) -} - -extension FetchedRecordChange: CustomStringConvertible { - public var description: String { - switch self { - case .insertion(let indexPath): - return "Insertion at \(indexPath)" - - case .deletion(let indexPath): - return "Deletion from \(indexPath)" - - case .move(let indexPath, let newIndexPath, changes: let changes): - return "Move from \(indexPath) to \(newIndexPath) with changes: \(changes)" - - case .update(let indexPath, let changes): - return "Update at \(indexPath) with changes: \(changes)" - } - } -} - -/// A section given by a FetchedRecordsController. -public struct FetchedRecordsSectionInfo { - fileprivate let controller: FetchedRecordsController - - /// The number of records (rows) in the section. - public var numberOfRecords: Int { - guard let items = controller.fetchedItems else { - // Programmer error - fatalError("the performFetch() method must be called before accessing section contents") - } - return items.count - } - - /// The array of records in the section. - public var records: [Record] { - guard let items = controller.fetchedItems else { - // Programmer error - fatalError("the performFetch() method must be called before accessing section contents") - } - return items.map { $0.record } - } -} - - -// MARK: - Item - -private final class Item : FetchableRecord, Equatable { - let row: Row - - // Records are lazily loaded - lazy var record: T = T(row: self.row) - - init(row: Row) { - self.row = row.copy() - } - - static func == (lhs: Item, rhs: Item) -> Bool { - return lhs.row == rhs.row - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Record/PersistableRecord.swift b/Example/Pods/GRDB.swift/GRDB/Record/PersistableRecord.swift deleted file mode 100755 index 1fb4772..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Record/PersistableRecord.swift +++ /dev/null @@ -1,986 +0,0 @@ -extension Database.ConflictResolution { - @usableFromInline - var invalidatesLastInsertedRowID: Bool { - switch self { - case .abort, .fail, .rollback, .replace: - return false - case .ignore: - // Statement may have succeeded without inserting any row - return true - } - } -} - -/// An error thrown by a type that adopts PersistableRecord. -public enum PersistenceError: Error, CustomStringConvertible { - - /// Thrown by MutablePersistableRecord.update() when no matching row could be - /// found in the database. - /// - /// - databaseTableName: the table of the unfound record - /// - key: the key of the unfound record (column and values) - case recordNotFound(databaseTableName: String, key: [String: DatabaseValue]) -} - -// CustomStringConvertible -extension PersistenceError { - /// :nodoc: - public var description: String { - switch self { - case let .recordNotFound(databaseTableName: databaseTableName, key: key): - let row = Row(key) // For nice output - return "Key not found in table \(databaseTableName): \(row.description)" - } - } -} - -/// The MutablePersistableRecord protocol uses this type in order to handle SQLite -/// conflicts when records are inserted or updated. -/// -/// See `MutablePersistableRecord.persistenceConflictPolicy`. -/// -/// See https://www.sqlite.org/lang_conflict.html -public struct PersistenceConflictPolicy { - /// The conflict resolution algorithm for insertions - public let conflictResolutionForInsert: Database.ConflictResolution - - /// The conflict resolution algorithm for updates - public let conflictResolutionForUpdate: Database.ConflictResolution - - /// Creates a policy - public init(insert: Database.ConflictResolution = .abort, update: Database.ConflictResolution = .abort) { - self.conflictResolutionForInsert = insert - self.conflictResolutionForUpdate = update - } -} - -/// Types that adopt MutablePersistableRecord can be inserted, updated, and deleted. -public protocol MutablePersistableRecord : EncodableRecord, TableRecord { - /// The policy that handles SQLite conflicts when records are inserted - /// or updated. - /// - /// This property is optional: its default value uses the ABORT policy - /// for both insertions and updates, and has GRDB generate regular - /// INSERT and UPDATE queries. - /// - /// If insertions are resolved with .ignore policy, the - /// `didInsert(with:for:)` method is not called upon successful insertion, - /// even if a row was actually inserted without any conflict. - /// - /// See https://www.sqlite.org/lang_conflict.html - static var persistenceConflictPolicy: PersistenceConflictPolicy { get } - - /// Notifies the record that it was succesfully inserted. - /// - /// Do not call this method directly: it is called for you, in a protected - /// dispatch queue, with the inserted RowID and the eventual - /// INTEGER PRIMARY KEY column name. - /// - /// This method is optional: the default implementation does nothing. - /// - /// struct Player : MutablePersistableRecord { - /// var id: Int64? - /// var name: String? - /// - /// mutating func didInsert(with rowID: Int64, for column: String?) { - /// self.id = rowID - /// } - /// } - /// - /// - parameters: - /// - rowID: The inserted rowID. - /// - column: The name of the eventual INTEGER PRIMARY KEY column. - mutating func didInsert(with rowID: Int64, for column: String?) - - // MARK: - CRUD - - /// Executes an INSERT statement. - /// - /// This method is guaranteed to have inserted a row in the database if it - /// returns without error. - /// - /// Upon successful insertion, the didInsert(with:for:) method - /// is called with the inserted RowID and the eventual INTEGER PRIMARY KEY - /// column name. - /// - /// This method has a default implementation, so your adopting types don't - /// have to implement it. Yet your types can provide their own - /// implementation of insert(). In their implementation, it is recommended - /// that they invoke the performInsert() method. - /// - /// - parameter db: A database connection. - /// - throws: A DatabaseError whenever an SQLite error occurs. - mutating func insert(_ db: Database) throws - - /// Executes an UPDATE statement. - /// - /// This method is guaranteed to have updated a row in the database if it - /// returns without error. - /// - /// This method has a default implementation, so your adopting types don't - /// have to implement it. Yet your types can provide their own - /// implementation of update(). In their implementation, it is recommended - /// that they invoke the performUpdate() method. - /// - /// - parameter db: A database connection. - /// - parameter columns: The columns to update. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database. - func update(_ db: Database, columns: Set) throws - - /// Executes an INSERT or an UPDATE statement so that `self` is saved in - /// the database. - /// - /// If the receiver has a non-nil primary key and a matching row in the - /// database, this method performs an update. - /// - /// Otherwise, performs an insert. - /// - /// This method is guaranteed to have inserted or updated a row in the - /// database if it returns without error. - /// - /// This method has a default implementation, so your adopting types don't - /// have to implement it. Yet your types can provide their own - /// implementation of save(). In their implementation, it is recommended - /// that they invoke the performSave() method. - /// - /// - parameter db: A database connection. - /// - throws: A DatabaseError whenever an SQLite error occurs, or errors - /// thrown by update(). - mutating func save(_ db: Database) throws - - /// Executes a DELETE statement. - /// - /// This method has a default implementation, so your adopting types don't - /// have to implement it. Yet your types can provide their own - /// implementation of delete(). In their implementation, it is recommended - /// that they invoke the performDelete() method. - /// - /// - parameter db: A database connection. - /// - returns: Whether a database row was deleted. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - @discardableResult - func delete(_ db: Database) throws -> Bool - - /// Returns true if and only if the primary key matches a row in - /// the database. - /// - /// This method has a default implementation, so your adopting types don't - /// have to implement it. Yet your types can provide their own - /// implementation of exists(). In their implementation, it is recommended - /// that they invoke the performExists() method. - /// - /// - parameter db: A database connection. - /// - returns: Whether the primary key matches a row in the database. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - func exists(_ db: Database) throws -> Bool -} - -extension MutablePersistableRecord { - /// Describes the conflict policy for insertions and updates. - /// - /// The default value specifies ABORT policy for both insertions and - /// updates, which has GRDB generate regular INSERT and UPDATE queries. - public static var persistenceConflictPolicy: PersistenceConflictPolicy { - return PersistenceConflictPolicy(insert: .abort, update: .abort) - } - - /// Notifies the record that it was succesfully inserted. - /// - /// The default implementation does nothing. - public mutating func didInsert(with rowID: Int64, for column: String?) { - } - - // MARK: - CRUD - - /// Executes an INSERT statement. - /// - /// The default implementation for insert() invokes performInsert(). - public mutating func insert(_ db: Database) throws { - try performInsert(db) - } - - /// Executes an UPDATE statement. - /// - /// - parameter db: A database connection. - /// - parameter columns: The columns to update. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database. - public func update(_ db: Database, columns: Set) throws { - try performUpdate(db, columns: columns) - } - - /// Executes an UPDATE statement. - /// - /// - parameter db: A database connection. - /// - parameter columns: The columns to update. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database. - public func update(_ db: Database, columns: Sequence) throws where Sequence.Element: ColumnExpression { - try update(db, columns: Set(columns.map { $0.name })) - } - - /// Executes an UPDATE statement. - /// - /// - parameter db: A database connection. - /// - parameter columns: The columns to update. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database. - public func update(_ db: Database, columns: Sequence) throws where Sequence.Element == String { - try update(db, columns: Set(columns)) - } - - /// Executes an UPDATE statement that updates all table columns. - /// - /// - parameter db: A database connection. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database. - public func update(_ db: Database) throws { - let databaseTableName = type(of: self).databaseTableName - let columns = try db.columns(in: databaseTableName) - try update(db, columns: Set(columns.map { $0.name })) - } - - /// If the record has any difference from the other record, executes an - /// UPDATE statement so that those differences and only those difference are - /// saved in the database. - /// - /// This method is guaranteed to have saved the eventual differences in the - /// database if it returns without error. - /// - /// For example: - /// - /// if let oldPlayer = try Player.fetchOne(db, key: 42) { - /// var newPlayer = oldPlayer - /// newPlayer.score += 10 - /// newPlayer.hasAward = true - /// try newPlayer.updateChanges(db, from: oldRecord) - /// } - /// - /// - parameter db: A database connection. - /// - parameter record: The comparison record. - /// - returns: Whether the record had changes. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database and record could not be updated. - /// - SeeAlso: updateChanges(_:with:) - @discardableResult - public func updateChanges(_ db: Database, from record: Record) throws -> Bool { - return try updateChanges(db, from: PersistenceContainer(db, record)) - } - - /// Mutates the record according to the provided closure, and then, if the - /// record has any difference from its previous version, executes an - /// UPDATE statement so that those differences and only those difference are - /// saved in the database. - /// - /// This method is guaranteed to have saved the eventual differences in the - /// database if it returns without error. - /// - /// For example: - /// - /// if var player = try Player.fetchOne(db, key: 42) { - /// try player.updateChanges(db) { - /// $0.score += 10 - /// $0.hasAward = true - /// } - /// } - /// - /// - parameter db: A database connection. - /// - parameter change: A closure that modifies the record. - /// - returns: Whether the record had changes. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database and record could not be updated. - @discardableResult - public mutating func updateChanges(_ db: Database, with change: (inout Self) throws -> Void) throws -> Bool { - let container = try PersistenceContainer(db, self) - try change(&self) - return try updateChanges(db, from: container) - } - - /// Executes an INSERT or an UPDATE statement so that `self` is saved in - /// the database. - /// - /// The default implementation for save() invokes performSave(). - public mutating func save(_ db: Database) throws { - try performSave(db) - } - - /// Executes a DELETE statement. - /// - /// The default implementation for delete() invokes performDelete(). - @discardableResult - public func delete(_ db: Database) throws -> Bool { - return try performDelete(db) - } - - /// Returns true if and only if the primary key matches a row in - /// the database. - /// - /// The default implementation for exists() invokes performExists(). - public func exists(_ db: Database) throws -> Bool { - return try performExists(db) - } - - // MARK: - Record Comparison - - @discardableResult - fileprivate func updateChanges(_ db: Database, from container: PersistenceContainer) throws -> Bool { - let changes = try PersistenceContainer(db, self).changesIterator(from: container) - let changedColumns: Set = changes.reduce(into: []) { $0.insert($1.0) } - if changedColumns.isEmpty { - return false - } - try update(db, columns: changedColumns) - return true - } - - // MARK: - CRUD Internals - - /// Return a non-nil dictionary if record has a non-null primary key - @usableFromInline - func primaryKey(_ db: Database) throws -> [String: DatabaseValue]? { - let databaseTableName = type(of: self).databaseTableName - let primaryKeyInfo = try db.primaryKey(databaseTableName) - let container = try PersistenceContainer(db, self) - let primaryKey = Dictionary(uniqueKeysWithValues: primaryKeyInfo.columns.map { - ($0, container[caseInsensitive: $0]?.databaseValue ?? .null) - }) - if primaryKey.allSatisfy({ $0.value.isNull }) { - return nil - } - return primaryKey - } - - /// Don't invoke this method directly: it is an internal method for types - /// that adopt MutablePersistableRecord. - /// - /// performInsert() provides the default implementation for insert(). Types - /// that adopt MutablePersistableRecord can invoke performInsert() in their - /// implementation of insert(). They should not provide their own - /// implementation of performInsert(). - @inlinable - public mutating func performInsert(_ db: Database) throws { - let conflictResolutionForInsert = type(of: self).persistenceConflictPolicy.conflictResolutionForInsert - let dao = try DAO(db, self) - try dao.insertStatement(onConflict: conflictResolutionForInsert).execute() - - if !conflictResolutionForInsert.invalidatesLastInsertedRowID { - didInsert(with: db.lastInsertedRowID, for: dao.primaryKey.rowIDColumn) - } - } - - /// Don't invoke this method directly: it is an internal method for types - /// that adopt MutablePersistableRecord. - /// - /// performUpdate() provides the default implementation for update(). Types - /// that adopt MutablePersistableRecord can invoke performUpdate() in their - /// implementation of update(). They should not provide their own - /// implementation of performUpdate(). - /// - /// - parameter db: A database connection. - /// - parameter columns: The columns to update. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database. - @inlinable - public func performUpdate(_ db: Database, columns: Set) throws { - let dao = try DAO(db, self) - guard let statement = try dao.updateStatement(columns: columns, onConflict: type(of: self).persistenceConflictPolicy.conflictResolutionForUpdate) else { - // Nil primary key - throw dao.makeRecordNotFoundError() - } - try statement.execute() - if db.changesCount == 0 { - throw dao.makeRecordNotFoundError() - } - } - - /// Don't invoke this method directly: it is an internal method for types - /// that adopt MutablePersistableRecord. - /// - /// performSave() provides the default implementation for save(). Types - /// that adopt MutablePersistableRecord can invoke performSave() in their - /// implementation of save(). They should not provide their own - /// implementation of performSave(). - /// - /// This default implementation forwards the job to `update` or `insert`. - @inlinable - public mutating func performSave(_ db: Database) throws { - // Call self.insert and self.update so that we support classes that - // override those methods. - if let key = try primaryKey(db) { - do { - try update(db) - } catch PersistenceError.recordNotFound(databaseTableName: type(of: self).databaseTableName, key: key) { - try insert(db) - } - } else { - try insert(db) - } - } - - /// Don't invoke this method directly: it is an internal method for types - /// that adopt MutablePersistableRecord. - /// - /// performDelete() provides the default implementation for deelte(). Types - /// that adopt MutablePersistableRecord can invoke performDelete() in - /// their implementation of delete(). They should not provide their own - /// implementation of performDelete(). - @inlinable - public func performDelete(_ db: Database) throws -> Bool { - guard let statement = try DAO(db, self).deleteStatement() else { - // Nil primary key - return false - } - try statement.execute() - return db.changesCount > 0 - } - - /// Don't invoke this method directly: it is an internal method for types - /// that adopt MutablePersistableRecord. - /// - /// performExists() provides the default implementation for exists(). Types - /// that adopt MutablePersistableRecord can invoke performExists() in - /// their implementation of exists(). They should not provide their own - /// implementation of performExists(). - @inlinable - public func performExists(_ db: Database) throws -> Bool { - guard let statement = try DAO(db, self).existsStatement() else { - // Nil primary key - return false - } - return try Row.fetchOne(statement) != nil - } -} - -extension MutablePersistableRecord where Self: AnyObject { - - // MARK: - Record Comparison - - /// Mutates the record according to the provided closure, and then, if the - /// record has any difference from its previous version, executes an - /// UPDATE statement so that those differences and only those difference are - /// saved in the database. - /// - /// This method is guaranteed to have saved the eventual differences in the - /// database if it returns without error. - /// - /// For example: - /// - /// if let player = try Player.fetchOne(db, key: 42) { - /// try player.updateChanges(db) { - /// $0.score += 10 - /// $0.hasAward = true - /// } - /// } - /// - /// - parameter db: A database connection. - /// - parameter change: A closure that modifies the record. - /// - returns: Whether the record had changes. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database and record could not be updated. - @discardableResult - public func updateChanges(_ db: Database, with change: (Self) throws -> Void) throws -> Bool { - let container = try PersistenceContainer(db, self) - try change(self) - return try updateChanges(db, from: container) - } -} - -extension MutablePersistableRecord { - - // MARK: - Deleting All - - /// Deletes all records; returns the number of deleted rows. - /// - /// - parameter db: A database connection. - /// - returns: The number of deleted rows - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - @discardableResult - public static func deleteAll(_ db: Database) throws -> Int { - return try all().deleteAll(db) - } -} - -extension MutablePersistableRecord { - - // MARK: - Deleting by Single-Column Primary Key - - /// Delete records identified by their primary keys; returns the number of - /// deleted rows. - /// - /// // DELETE FROM player WHERE id IN (1, 2, 3) - /// try Player.deleteAll(db, keys: [1, 2, 3]) - /// - /// // DELETE FROM country WHERE code IN ('FR', 'US', 'DE') - /// try Country.deleteAll(db, keys: ["FR", "US", "DE"]) - /// - /// When the table has no explicit primary key, GRDB uses the hidden - /// "rowid" column: - /// - /// // DELETE FROM document WHERE rowid IN (1, 2, 3) - /// try Document.deleteAll(db, keys: [1, 2, 3]) - /// - /// - parameters: - /// - db: A database connection. - /// - keys: A sequence of primary keys. - /// - returns: The number of deleted rows - @discardableResult - public static func deleteAll(_ db: Database, keys: Sequence) throws -> Int where Sequence.Element: DatabaseValueConvertible { - let keys = Array(keys) - if keys.isEmpty { - // Avoid hitting the database - return 0 - } - return try filter(keys: keys).deleteAll(db) - } - - /// Delete a record, identified by its primary key; returns whether a - /// database row was deleted. - /// - /// // DELETE FROM player WHERE id = 123 - /// try Player.deleteOne(db, key: 123) - /// - /// // DELETE FROM country WHERE code = 'FR' - /// try Country.deleteOne(db, key: "FR") - /// - /// When the table has no explicit primary key, GRDB uses the hidden - /// "rowid" column: - /// - /// // DELETE FROM document WHERE rowid = 1 - /// try Document.deleteOne(db, key: 1) - /// - /// - parameters: - /// - db: A database connection. - /// - key: A primary key value. - /// - returns: Whether a database row was deleted. - @discardableResult - public static func deleteOne(_ db: Database, key: PrimaryKeyType?) throws -> Bool { - guard let key = key else { - // Avoid hitting the database - return false - } - return try deleteAll(db, keys: [key]) > 0 - } -} - -extension MutablePersistableRecord { - - // MARK: - Deleting by Key - - /// Delete records identified by the provided unique keys (primary key or - /// any key with a unique index on it); returns the number of deleted rows. - /// - /// try Player.deleteAll(db, keys: [["email": "a@example.com"], ["email": "b@example.com"]]) - /// - /// - parameters: - /// - db: A database connection. - /// - keys: An array of key dictionaries. - /// - returns: The number of deleted rows - @discardableResult - public static func deleteAll(_ db: Database, keys: [[String: DatabaseValueConvertible?]]) throws -> Int { - if keys.isEmpty { - // Avoid hitting the database - return 0 - } - return try filter(keys: keys).deleteAll(db) - } - - /// Delete a record, identified by a unique key (the primary key or any key - /// with a unique index on it); returns whether a database row was deleted. - /// - /// Player.deleteOne(db, key: ["name": Arthur"]) - /// - /// - parameters: - /// - db: A database connection. - /// - key: A dictionary of values. - /// - returns: Whether a database row was deleted. - @discardableResult - public static func deleteOne(_ db: Database, key: [String: DatabaseValueConvertible?]) throws -> Bool { - return try deleteAll(db, keys: [key]) > 0 - } -} - -// MARK: - PersistableRecord - -/// Types that adopt PersistableRecord can be inserted, updated, and deleted. -/// -/// This protocol is intented for types that don't have an INTEGER PRIMARY KEY. -/// -/// Unlike MutablePersistableRecord, the insert() and save() methods are not -/// mutating methods. -public protocol PersistableRecord : MutablePersistableRecord { - - /// Notifies the record that it was succesfully inserted. - /// - /// Do not call this method directly: it is called for you, in a protected - /// dispatch queue, with the inserted RowID and the eventual - /// INTEGER PRIMARY KEY column name. - /// - /// This method is optional: the default implementation does nothing. - /// - /// If you need a mutating variant of this method, adopt the - /// MutablePersistableRecord protocol instead. - /// - /// - parameters: - /// - rowID: The inserted rowID. - /// - column: The name of the eventual INTEGER PRIMARY KEY column. - func didInsert(with rowID: Int64, for column: String?) - - /// Executes an INSERT statement. - /// - /// This method is guaranteed to have inserted a row in the database if it - /// returns without error. - /// - /// Upon successful insertion, the didInsert(with:for:) method - /// is called with the inserted RowID and the eventual INTEGER PRIMARY KEY - /// column name. - /// - /// This method has a default implementation, so your adopting types don't - /// have to implement it. Yet your types can provide their own - /// implementation of insert(). In their implementation, it is recommended - /// that they invoke the performInsert() method. - /// - /// - parameter db: A database connection. - /// - throws: A DatabaseError whenever an SQLite error occurs. - func insert(_ db: Database) throws - - /// Executes an INSERT or an UPDATE statement so that `self` is saved in - /// the database. - /// - /// If the receiver has a non-nil primary key and a matching row in the - /// database, this method performs an update. - /// - /// Otherwise, performs an insert. - /// - /// This method is guaranteed to have inserted or updated a row in the - /// database if it returns without error. - /// - /// This method has a default implementation, so your adopting types don't - /// have to implement it. Yet your types can provide their own - /// implementation of save(). In their implementation, it is recommended - /// that they invoke the performSave() method. - /// - /// - parameter db: A database connection. - /// - throws: A DatabaseError whenever an SQLite error occurs, or errors - /// thrown by update(). - func save(_ db: Database) throws -} - -extension PersistableRecord { - - /// Notifies the record that it was succesfully inserted. - /// - /// The default implementation does nothing. - public func didInsert(with rowID: Int64, for column: String?) { - } - - // MARK: - Immutable CRUD - - /// Executes an INSERT statement. - /// - /// The default implementation for insert() invokes performInsert(). - public func insert(_ db: Database) throws { - try performInsert(db) - } - - /// Executes an INSERT or an UPDATE statement so that `self` is saved in - /// the database. - /// - /// The default implementation for save() invokes performSave(). - public func save(_ db: Database) throws { - try performSave(db) - } - - // MARK: - Immutable CRUD Internals - - /// Don't invoke this method directly: it is an internal method for types - /// that adopt PersistableRecord. - /// - /// performInsert() provides the default implementation for insert(). Types - /// that adopt PersistableRecord can invoke performInsert() in their - /// implementation of insert(). They should not provide their own - /// implementation of performInsert(). - @inlinable - public func performInsert(_ db: Database) throws { - let conflictResolutionForInsert = type(of: self).persistenceConflictPolicy.conflictResolutionForInsert - let dao = try DAO(db, self) - try dao.insertStatement(onConflict: conflictResolutionForInsert).execute() - - if !conflictResolutionForInsert.invalidatesLastInsertedRowID { - didInsert(with: db.lastInsertedRowID, for: dao.primaryKey.rowIDColumn) - } - } - - /// Don't invoke this method directly: it is an internal method for types - /// that adopt PersistableRecord. - /// - /// performSave() provides the default implementation for save(). Types - /// that adopt PersistableRecord can invoke performSave() in their - /// implementation of save(). They should not provide their own - /// implementation of performSave(). - /// - /// This default implementation forwards the job to `update` or `insert`. - @inlinable - public func performSave(_ db: Database) throws { - // Call self.insert and self.update so that we support classes that - // override those methods. - if let key = try primaryKey(db) { - do { - try update(db) - } catch PersistenceError.recordNotFound(databaseTableName: type(of: self).databaseTableName, key: key) { - try insert(db) - } - } else { - try insert(db) - } - } -} - -// MARK: - DAO - -extension PersistenceContainer { - /// Convenience initializer from a database connection and a record - init(_ db: Database,_ record: Record) throws { - let databaseTableName = type(of: record).databaseTableName - let columnCount = try db.columns(in: databaseTableName).count - self.init(minimumCapacity: columnCount) - record.encode(to: &self) - } -} - -/// DAO takes care of PersistableRecord CRUD -@usableFromInline -final class DAO { - /// The database - let db: Database - - /// DAO keeps a copy the record's persistenceContainer, so that this - /// dictionary is built once whatever the database operation. It is - /// guaranteed to have at least one (key, value) pair. - let persistenceContainer: PersistenceContainer - - /// The table name - let databaseTableName: String - - /// The table primary key info - @usableFromInline let primaryKey: PrimaryKeyInfo - - @usableFromInline - init(_ db: Database, _ record: Record) throws { - self.db = db - databaseTableName = type(of: record).databaseTableName - primaryKey = try db.primaryKey(databaseTableName) - persistenceContainer = try PersistenceContainer(db, record) - GRDBPrecondition(!persistenceContainer.isEmpty, "\(type(of: record)): invalid empty persistence container") - } - - @usableFromInline - func insertStatement(onConflict: Database.ConflictResolution) throws -> UpdateStatement { - let query = InsertQuery( - onConflict: onConflict, - tableName: databaseTableName, - insertedColumns: persistenceContainer.columns) - let statement = try db.internalCachedUpdateStatement(sql: query.sql) - statement.unsafeSetArguments(StatementArguments(persistenceContainer.values)) - return statement - } - - /// Returns nil if and only if primary key is nil - @usableFromInline - func updateStatement(columns: Set, onConflict: Database.ConflictResolution) throws -> UpdateStatement? { - // Fail early if primary key does not resolve to a database row. - let primaryKeyColumns = primaryKey.columns - let primaryKeyValues = primaryKeyColumns.map { - persistenceContainer[caseInsensitive: $0]?.databaseValue ?? .null - } - if primaryKeyValues.allSatisfy({ $0.isNull }) { - return nil - } - - // Don't update columns not present in columns - // Don't update columns not present in the persistenceContainer - // Don't update primary key columns - let lowercaseUpdatedColumns = Set(columns.map { $0.lowercased() }) - .intersection(persistenceContainer.columns.map { $0.lowercased() }) - .subtracting(primaryKeyColumns.map { $0.lowercased() }) - - var updatedColumns: [String] = try db - .columns(in: databaseTableName) - .map { $0.name } - .filter { lowercaseUpdatedColumns.contains($0.lowercased()) } - - if updatedColumns.isEmpty { - // IMPLEMENTATION NOTE - // - // It is important to update something, so that - // TransactionObserver can observe a change even though this - // change is useless. - // - // The goal is to be able to write tests with minimal tables, - // including tables made of a single primary key column. - updatedColumns = primaryKeyColumns - } - - let updatedValues = updatedColumns.map { - persistenceContainer[caseInsensitive: $0]?.databaseValue ?? .null - } - - let query = UpdateQuery( - onConflict: onConflict, - tableName: databaseTableName, - updatedColumns: updatedColumns, - conditionColumns: primaryKeyColumns) - let statement = try db.internalCachedUpdateStatement(sql: query.sql) - statement.unsafeSetArguments(StatementArguments(updatedValues + primaryKeyValues)) - return statement - } - - /// Returns nil if and only if primary key is nil - @usableFromInline - func deleteStatement() throws -> UpdateStatement? { - // Fail early if primary key does not resolve to a database row. - let primaryKeyColumns = primaryKey.columns - let primaryKeyValues = primaryKeyColumns.map { - persistenceContainer[caseInsensitive: $0]?.databaseValue ?? .null - } - if primaryKeyValues.allSatisfy({ $0.isNull }) { - return nil - } - - let query = DeleteQuery( - tableName: databaseTableName, - conditionColumns: primaryKeyColumns) - let statement = try db.internalCachedUpdateStatement(sql: query.sql) - statement.unsafeSetArguments(StatementArguments(primaryKeyValues)) - return statement - } - - /// Returns nil if and only if primary key is nil - @usableFromInline - func existsStatement() throws -> SelectStatement? { - // Fail early if primary key does not resolve to a database row. - let primaryKeyColumns = primaryKey.columns - let primaryKeyValues = primaryKeyColumns.map { - persistenceContainer[caseInsensitive: $0]?.databaseValue ?? .null - } - if primaryKeyValues.allSatisfy({ $0.isNull }) { - return nil - } - - let query = ExistsQuery( - tableName: databaseTableName, - conditionColumns: primaryKeyColumns) - let statement = try db.internalCachedSelectStatement(sql: query.sql) - statement.unsafeSetArguments(StatementArguments(primaryKeyValues)) - return statement - } - - /// Throws a PersistenceError.recordNotFound error - @usableFromInline - func makeRecordNotFoundError() -> Error { - let key = Dictionary(uniqueKeysWithValues: primaryKey.columns.map { - ($0, persistenceContainer[caseInsensitive: $0]?.databaseValue ?? .null) - }) - return PersistenceError.recordNotFound( - databaseTableName: databaseTableName, - key: key) - } -} - - -// MARK: - InsertQuery - -private struct InsertQuery: Hashable { - let onConflict: Database.ConflictResolution - let tableName: String - let insertedColumns: [String] -} - -extension InsertQuery { - static let sqlCache = ReadWriteBox([InsertQuery: String]()) - var sql: String { - if let sql = InsertQuery.sqlCache.read({ $0[self] }) { - return sql - } - let columnsSQL = insertedColumns.map { $0.quotedDatabaseIdentifier }.joined(separator: ", ") - let valuesSQL = databaseQuestionMarks(count: insertedColumns.count) - let sql: String - switch onConflict { - case .abort: - sql = "INSERT INTO \(tableName.quotedDatabaseIdentifier) (\(columnsSQL)) VALUES (\(valuesSQL))" - default: - sql = "INSERT OR \(onConflict.rawValue) INTO \(tableName.quotedDatabaseIdentifier) (\(columnsSQL)) VALUES (\(valuesSQL))" - } - InsertQuery.sqlCache.write { $0[self] = sql } - return sql - } -} - - -// MARK: - UpdateQuery - -private struct UpdateQuery: Hashable { - let onConflict: Database.ConflictResolution - let tableName: String - let updatedColumns: [String] - let conditionColumns: [String] -} - -extension UpdateQuery { - static let sqlCache = ReadWriteBox([UpdateQuery: String]()) - var sql: String { - if let sql = UpdateQuery.sqlCache.read({ $0[self] }) { - return sql - } - let updateSQL = updatedColumns.map { "\($0.quotedDatabaseIdentifier)=?" }.joined(separator: ", ") - let whereSQL = conditionColumns.map { "\($0.quotedDatabaseIdentifier)=?" }.joined(separator: " AND ") - let sql: String - switch onConflict { - case .abort: - sql = "UPDATE \(tableName.quotedDatabaseIdentifier) SET \(updateSQL) WHERE \(whereSQL)" - default: - sql = "UPDATE OR \(onConflict.rawValue) \(tableName.quotedDatabaseIdentifier) SET \(updateSQL) WHERE \(whereSQL)" - } - UpdateQuery.sqlCache.write { $0[self] = sql } - return sql - } -} - - -// MARK: - DeleteQuery - -private struct DeleteQuery { - let tableName: String - let conditionColumns: [String] -} - -extension DeleteQuery { - var sql: String { - let whereSQL = conditionColumns.map { "\($0.quotedDatabaseIdentifier)=?" }.joined(separator: " AND ") - return "DELETE FROM \(tableName.quotedDatabaseIdentifier) WHERE \(whereSQL)" - } -} - - -// MARK: - ExistsQuery - -private struct ExistsQuery { - let tableName: String - let conditionColumns: [String] -} - -extension ExistsQuery { - var sql: String { - let whereSQL = conditionColumns.map { "\($0.quotedDatabaseIdentifier)=?" }.joined(separator: " AND ") - return "SELECT 1 FROM \(tableName.quotedDatabaseIdentifier) WHERE \(whereSQL)" - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Record/Record.swift b/Example/Pods/GRDB.swift/GRDB/Record/Record.swift deleted file mode 100755 index 4b22021..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Record/Record.swift +++ /dev/null @@ -1,355 +0,0 @@ -// MARK: - Record - -/// Record is a class that wraps a table row, or the result of any query. It is -/// designed to be subclassed. -open class Record : FetchableRecord, TableRecord, PersistableRecord { - - // MARK: - Initializers - - /// Creates a Record. - public init() { - } - - /// Creates a Record from a row. - required public init(row: Row) { - if row.isFetched { - // Take care of the hasDatabaseChanges flag. - // - // Row may be a reused row which will turn invalid as soon as the - // SQLite statement is iterated. We need to store an - // immutable copy. - referenceRow = row.copy() - } - } - - - // MARK: - Core methods - - /// The name of a database table. - /// - /// This table name is required by the insert, update, save, delete, - /// and exists methods. - /// - /// class Player : Record { - /// override class var databaseTableName: String { - /// return "player" - /// } - /// } - /// - /// The implementation of the base class Record raises a fatal error. - /// - /// - returns: The name of a database table. - open class var databaseTableName: String { - // Programmer error - fatalError("subclass must override") - } - - /// The policy that handles SQLite conflicts when records are inserted - /// or updated. - /// - /// This property is optional: its default value uses the ABORT policy - /// for both insertions and updates, and has GRDB generate regular - /// INSERT and UPDATE queries. - /// - /// If insertions are resolved with .ignore policy, the - /// `didInsert(with:for:)` method is not called upon successful insertion, - /// even if a row was actually inserted without any conflict. - /// - /// See https://www.sqlite.org/lang_conflict.html - open class var persistenceConflictPolicy: PersistenceConflictPolicy { - return PersistenceConflictPolicy(insert: .abort, update: .abort) - } - - /// The default request selection. - /// - /// Unless this method is overriden, requests select all columns: - /// - /// // SELECT * FROM player - /// try Player.fetchAll(db) - /// - /// You can override this property and provide an explicit list - /// of columns: - /// - /// class RestrictedPlayer : Record { - /// override static var databaseSelection: [SQLSelectable] { - /// return [Column("id"), Column("name")] - /// } - /// } - /// - /// // SELECT id, name FROM player - /// try RestrictedPlayer.fetchAll(db) - /// - /// You can also add extra columns such as the `rowid` column: - /// - /// class ExtendedPlayer : Player { - /// override static var databaseSelection: [SQLSelectable] { - /// return [AllColumns(), Column.rowID] - /// } - /// } - /// - /// // SELECT *, rowid FROM player - /// try ExtendedPlayer.fetchAll(db) - open class var databaseSelection: [SQLSelectable] { - return [AllColumns()] - } - - - /// Defines the values persisted in the database. - /// - /// Store in the *container* argument all values that should be stored in - /// the columns of the database table (see Record.databaseTableName()). - /// - /// Primary key columns, if any, must be included. - /// - /// class Player : Record { - /// var id: Int64? - /// var name: String? - /// - /// override func encode(to container: inout PersistenceContainer) { - /// container["id"] = id - /// container["name"] = name - /// } - /// } - /// - /// The implementation of the base class Record does not store any value in - /// the container. - open func encode(to container: inout PersistenceContainer) { - } - - /// Notifies the record that it was succesfully inserted. - /// - /// Do not call this method directly: it is called for you, in a protected - /// dispatch queue, with the inserted RowID and the eventual - /// INTEGER PRIMARY KEY column name. - /// - /// The implementation of the base Record class does nothing. - /// - /// class Player : Record { - /// var id: Int64? - /// var name: String? - /// - /// func didInsert(with rowID: Int64, for column: String?) { - /// id = rowID - /// } - /// } - /// - /// - parameters: - /// - rowID: The inserted rowID. - /// - column: The name of the eventual INTEGER PRIMARY KEY column. - open func didInsert(with rowID: Int64, for column: String?) { - } - - - // MARK: - Copy - - /// Returns a copy of `self`, initialized from all values encoded in the - /// `encode(to:)` method. - /// - /// The eventual primary key is copied, as well as the - /// `hasDatabaseChanges` flag. - /// - /// - returns: A copy of self. - open func copy() -> Self { - let copy = type(of: self).init(row: Row(self)) - copy.referenceRow = referenceRow - return copy - } - - - // MARK: - Compare with Previous Versions - - /// A boolean that indicates whether the record has changes that have not - /// been saved. - /// - /// This flag is purely informative, and does not prevent insert(), - /// update(), and save() from performing their database queries. - /// - /// A record is *edited* if has been changed since last database - /// synchronization (fetch, update, insert). Comparison - /// is performed between *values* (values stored in the `encode(to:)` - /// method, and values loaded from the database). Property setters do not - /// trigger this flag. - /// - /// You can rely on the Record base class to compute this flag for you, or - /// you may set it to true or false when you know better. Setting it to - /// false does not prevent it from turning true on subsequent modifications - /// of the record. - public var hasDatabaseChanges: Bool { - get { return databaseChangesIterator().next() != nil } - set { referenceRow = newValue ? nil : Row(self) } - } - - /// A dictionary of changes that have not been saved. - /// - /// Its keys are column names, and values the old values that have been - /// changed since last fetching or saving of the record. - /// - /// Unless the record has actually been fetched or saved, the old values - /// are nil. - /// - /// See `hasDatabaseChanges` for more information. - public var databaseChanges: [String: DatabaseValue?] { - return Dictionary(uniqueKeysWithValues: databaseChangesIterator()) - } - - // A change iterator that is used by both hasDatabaseChanges and - // persistentChangedValues properties. - private func databaseChangesIterator() -> AnyIterator<(String, DatabaseValue?)> { - let oldRow = referenceRow - var newValueIterator = PersistenceContainer(self).makeIterator() - return AnyIterator { - // Loop until we find a change, or exhaust columns: - while let (column, newValue) = newValueIterator.next() { - let newDbValue = newValue?.databaseValue ?? .null - guard let oldRow = oldRow, let oldDbValue: DatabaseValue = oldRow[column] else { - return (column, nil) - } - if newDbValue != oldDbValue { - return (column, oldDbValue) - } - } - return nil - } - } - - - /// Reference row for the *hasDatabaseChanges* property. - var referenceRow: Row? - - - // MARK: - CRUD - - /// Executes an INSERT statement. - /// - /// On success, this method sets the *hasDatabaseChanges* flag to false. - /// - /// This method is guaranteed to have inserted a row in the database if it - /// returns without error. - /// - /// Records whose primary key is declared as "INTEGER PRIMARY KEY" have - /// their id automatically set after successful insertion, if it was nil - /// before the insertion. - /// - /// - parameter db: A database connection. - /// - throws: A DatabaseError whenever an SQLite error occurs. - open func insert(_ db: Database) throws { - let conflictResolutionForInsert = type(of: self).persistenceConflictPolicy.conflictResolutionForInsert - let dao = try DAO(db, self) - var persistenceContainer = dao.persistenceContainer - try dao.insertStatement(onConflict: conflictResolutionForInsert).execute() - - if !conflictResolutionForInsert.invalidatesLastInsertedRowID { - let rowID = db.lastInsertedRowID - let rowIDColumn = dao.primaryKey.rowIDColumn - didInsert(with: rowID, for: rowIDColumn) - - // Update persistenceContainer with inserted id, so that we can - // set hasDatabaseChanges to false: - if let rowIDColumn = rowIDColumn { - persistenceContainer[caseInsensitive: rowIDColumn] = rowID - } - } - - // Set hasDatabaseChanges to false - referenceRow = Row(persistenceContainer) - } - - /// Executes an UPDATE statement. - /// - /// On success, this method sets the *hasDatabaseChanges* flag to false. - /// - /// This method is guaranteed to have updated a row in the database if it - /// returns without error. - /// - /// - parameter db: A database connection. - /// - parameter columns: The columns to update. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database and record could not be updated. - open func update(_ db: Database, columns: Set) throws { - // The simplest code would be: - // - // try performUpdate(db, columns: columns) - // hasDatabaseChanges = false - // - // But this would trigger two calls to `encode(to:)`. - let dao = try DAO(db, self) - guard let statement = try dao.updateStatement(columns: columns, onConflict: type(of: self).persistenceConflictPolicy.conflictResolutionForUpdate) else { - // Nil primary key - throw dao.makeRecordNotFoundError() - } - try statement.execute() - if db.changesCount == 0 { - throw dao.makeRecordNotFoundError() - } - - // Set hasDatabaseChanges to false - referenceRow = Row(dao.persistenceContainer) - } - - /// If the record has been changed, executes an UPDATE statement so that - /// those changes and only those changes are saved in the database. - /// - /// On success, this method sets the *hasDatabaseChanges* flag to false. - /// - /// This method is guaranteed to have saved the eventual changes in the - /// database if it returns without error. - /// - /// - parameter db: A database connection. - /// - parameter columns: The columns to update. - /// - returns: Whether the record had changes. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - /// PersistenceError.recordNotFound is thrown if the primary key does not - /// match any row in the database and record could not be updated. - @discardableResult - final public func updateChanges(_ db: Database) throws -> Bool { - let changedColumns = Set(databaseChanges.keys) - if changedColumns.isEmpty { - return false - } else { - try update(db, columns: changedColumns) - return true - } - } - - /// Executes an INSERT or an UPDATE statement so that `self` is saved in - /// the database. - /// - /// If the record has a non-nil primary key and a matching row in the - /// database, this method performs an update. - /// - /// Otherwise, performs an insert. - /// - /// On success, this method sets the *hasDatabaseChanges* flag to false. - /// - /// This method is guaranteed to have inserted or updated a row in the - /// database if it returns without error. - /// - /// You can't override this method. Instead, override `insert(_:)` - /// or `update(_:columns:)`. - /// - /// - parameter db: A database connection. - /// - throws: A DatabaseError whenever an SQLite error occurs, or errors - /// thrown by update(). - final public func save(_ db: Database) throws { - try performSave(db) - } - - /// Executes a DELETE statement. - /// - /// On success, this method sets the *hasDatabaseChanges* flag to true. - /// - /// - parameter db: A database connection. - /// - returns: Whether a database row was deleted. - /// - throws: A DatabaseError is thrown whenever an SQLite error occurs. - @discardableResult - open func delete(_ db: Database) throws -> Bool { - defer { - // Future calls to update() will throw NotFound. Make the user - // a favor and make sure this error is thrown even if she checks the - // hasDatabaseChanges flag: - hasDatabaseChanges = true - } - return try performDelete(db) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Record/TableRecord.swift b/Example/Pods/GRDB.swift/GRDB/Record/TableRecord.swift deleted file mode 100755 index d7ea751..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Record/TableRecord.swift +++ /dev/null @@ -1,155 +0,0 @@ -/// Types that adopt TableRecord declare a particular relationship with -/// a database table. -/// -/// Types that adopt both TableRecord and FetchableRecord are granted with -/// built-in methods that allow to fetch instances identified by key: -/// -/// try Player.fetchOne(db, key: 123) // Player? -/// try Citizenship.fetchOne(db, key: ["citizenId": 12, "countryId": 45]) // Citizenship? -/// -/// TableRecord is adopted by Record. -public protocol TableRecord { - /// The name of the database table used to build requests. - /// - /// struct Player : TableRecord { - /// static var databaseTableName = "player" - /// } - /// - /// // SELECT * FROM player - /// try Player.fetchAll(db) - static var databaseTableName: String { get } - - /// The default request selection. - /// - /// Unless said otherwise, requests select all columns: - /// - /// // SELECT * FROM player - /// try Player.fetchAll(db) - /// - /// You can provide a custom implementation and provide an explicit list - /// of columns: - /// - /// struct RestrictedPlayer : TableRecord { - /// static var databaseTableName = "player" - /// static var databaseSelection = [Column("id"), Column("name")] - /// } - /// - /// // SELECT id, name FROM player - /// try RestrictedPlayer.fetchAll(db) - /// - /// You can also add extra columns such as the `rowid` column: - /// - /// struct ExtendedPlayer : TableRecord { - /// static var databaseTableName = "player" - /// static let databaseSelection: [SQLSelectable] = [AllColumns(), Column.rowID] - /// } - /// - /// // SELECT *, rowid FROM player - /// try ExtendedPlayer.fetchAll(db) - static var databaseSelection: [SQLSelectable] { get } -} - -extension TableRecord { - - /// The default name of the database table used to build requests. - /// - /// - Player -> "player" - /// - Place -> "place" - /// - PostalAddress -> "postalAddress" - /// - HTTPRequest -> "httpRequest" - /// - TOEFL -> "toefl" - internal static var defaultDatabaseTableName: String { - let typeName = "\(Self.self)".replacingOccurrences(of: "(.)\\b.*$", with: "$1", options: [.regularExpression]) - let initial = typeName.replacingOccurrences(of: "^([A-Z]+).*$", with: "$1", options: [.regularExpression]) - switch initial.count { - case typeName.count: - return initial.lowercased() - case 0: - return typeName - case 1: - return initial.lowercased() + typeName.dropFirst() - default: - return initial.dropLast().lowercased() + typeName.dropFirst(initial.count - 1) - } - } - - /// The default name of the database table used to build requests. - /// - /// - Player -> "player" - /// - Place -> "place" - /// - PostalAddress -> "postalAddress" - /// - HTTPRequest -> "httpRequest" - /// - TOEFL -> "toefl" - public static var databaseTableName: String { - return defaultDatabaseTableName - } - - /// Default value: `[AllColumns()]`. - public static var databaseSelection: [SQLSelectable] { - return [AllColumns()] - } -} - -extension TableRecord { - - // MARK: - Counting All - - /// The number of records. - /// - /// - parameter db: A database connection. - public static func fetchCount(_ db: Database) throws -> Int { - return try all().fetchCount(db) - } -} - -extension TableRecord { - - // MARK: - SQL Generation - - /// The selection as an SQL String. - /// - /// For example: - /// - /// struct Player: TableRecord { - /// static let databaseTableName = "player" - /// } - /// - /// // SELECT "player".* FROM player - /// let sql = "SELECT \(Player.selectionSQL()) FROM player" - /// - /// // SELECT "p".* FROM player AS p - /// let sql = "SELECT \(Player.selectionSQL(alias: "p")) FROM player p" - public static func selectionSQL(alias: String? = nil) -> String { - let alias = TableAlias(tableName: databaseTableName, userName: alias) - let selection = databaseSelection.map { $0.qualifiedSelectable(with: alias) } - var context = SQLGenerationContext.recordSelectionGenerationContext() - return selection - .map { $0.resultColumnSQL(&context) } - .joined(separator: ", ") - } - - /// Returns the number of selected columns. - /// - /// For example: - /// - /// struct Player: TableRecord { - /// static let databaseTableName = "player" - /// } - /// - /// try dbQueue.write { db in - /// try db.create(table: "player") { t in - /// t.autoIncrementedPrimaryKey("id") - /// t.column("name", .text) - /// t.column("score", .integer) - /// } - /// - /// // 3 - /// try Player.numberOfSelectedColumns(db) - /// } - public static func numberOfSelectedColumns(_ db: Database) throws -> Int { - let alias = TableAlias(tableName: databaseTableName) - return try databaseSelection - .map { try $0.qualifiedSelectable(with: alias).columnCount(db) } - .reduce(0, +) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Utils/Inflections+English.swift b/Example/Pods/GRDB.swift/GRDB/Utils/Inflections+English.swift deleted file mode 100755 index c9f5270..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Utils/Inflections+English.swift +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright (C) 2019 Gwendal Roué -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ============================================================================= -// -// Copyright (c) 2005-2019 David Heinemeier Hansson -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -extension Inflections { - /// The default inflections - public static var `default`: Inflections = { - // Defines the standard inflection rules. These are the starting point - // for new projects and are not considered complete. The current set of - // inflection rules is frozen. This means, we do not change them to - // become more complete. This is a safety measure to keep existing - // applications from breaking. - // - // https://github.com/rails/rails/blob/b2eb1d1c55a59fee1e6c4cba7030d8ceb524267c/activesupport/lib/active_support/inflections.rb - var inflections = Inflections() - - inflections.plural("$", "s") - inflections.plural("s$", "s") - inflections.plural("^(ax|test)is$", "$1es") - inflections.plural("(octop|vir)us$", "$1i") - inflections.plural("(octop|vir)i$", "$1i") - inflections.plural("(alias|status)$", "$1es") - inflections.plural("(bu)s$", "$1ses") - inflections.plural("(buffal|tomat|her)o$", "$1oes") - inflections.plural("([ti])um$", "$1a") - inflections.plural("([ti])a$", "$1a") - inflections.plural("sis$", "ses") - inflections.plural("(?:([^f])fe|([lr])f)$", "$1$2ves") - inflections.plural("(hive)$", "$1s") - inflections.plural("([^aeiouy]|qu)y$", "$1ies") - inflections.plural("(x|ch|ss|sh)$", "$1es") - inflections.plural("(matr|vert|ind)(?:ix|ex)$", "$1ices") - inflections.plural("^(m|l)ouse$", "$1ice") - inflections.plural("^(m|l)ice$", "$1ice") - inflections.plural("^(ox)$", "$1en") - inflections.plural("^(oxen)$", "$1") - inflections.plural("(quiz)$", "$1zes") - inflections.plural("(canva)s$", "$1ses") - - inflections.singular("s$", "") - inflections.singular("(ss)$", "$1") - inflections.singular("(n)ews$", "$1ews") - inflections.singular("([ti])a$", "$1um") - inflections.singular("((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$", "$1sis") - inflections.singular("(^analy)(sis|ses)$", "$1sis") - inflections.singular("([^f])ves$", "$1fe") - inflections.singular("(hive)s$", "$1") - inflections.singular("(tive)s$", "$1") - inflections.singular("([lr])ves$", "$1f") - inflections.singular("([^aeiouy]|qu)ies$", "$1y") - inflections.singular("(s)eries$", "$1eries") - inflections.singular("(m)ovies$", "$1ovie") - inflections.singular("(x|ch|ss|sh)es$", "$1") - inflections.singular("^(m|l)ice$", "$1ouse") - inflections.singular("(bus)(es)?$", "$1") - inflections.singular("(o)es$", "$1") - inflections.singular("(shoe)s$", "$1") - inflections.singular("(cris|test)(is|es)$", "$1is") - inflections.singular("^(a)x[ie]s$", "$1xis") - inflections.singular("(octop|vir)(us|i)$", "$1us") - inflections.singular("(alias|status)(es)?$", "$1") - inflections.singular("^(ox)en$", "$1") - inflections.singular("(vert|ind)ices$", "$1ex") - inflections.singular("(matr)ices$", "$1ix") - inflections.singular("(quiz)zes$", "$1") - inflections.singular("(database)s$", "$1") - inflections.singular("(canvas)(es)?$", "$1") - - inflections.uncountableWords([ - "advice", - "corps", - "dice", - "equipment", - "fish", - "information", - "jeans", - "kudos", - "money", - "offspring", - "police", - "rice", - "sheep", - "species", - ]) - - inflections.irregularSuffix("child", "children") - inflections.irregularSuffix("foot", "feet") - inflections.irregularSuffix("leaf", "leaves") - inflections.irregularSuffix("man", "men") - inflections.irregularSuffix("move", "moves") - inflections.irregularSuffix("person", "people") - inflections.irregularSuffix("sex", "sexes") - inflections.irregularSuffix("specimen", "specimens") - inflections.irregularSuffix("zombie", "zombies") - - return inflections - }() -} diff --git a/Example/Pods/GRDB.swift/GRDB/Utils/Inflections.swift b/Example/Pods/GRDB.swift/GRDB/Utils/Inflections.swift deleted file mode 100755 index f8dbabf..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Utils/Inflections.swift +++ /dev/null @@ -1,238 +0,0 @@ -import Foundation - -extension String { - /// "player" -> "Player" - var uppercasingFirstCharacter: String { - guard let first = first else { - return self - } - return String(first).uppercased() + dropFirst() - } - - /// "player" -> "players" - /// "players" -> "players" - var pluralized: String { - return Inflections.default.pluralize(self) - } - - /// "player" -> "player" - /// "players" -> "player" - var singularized: String { - return Inflections.default.singularize(self) - } - - /// "bar" -> "bar" - /// "foo12" -> "foo" - var digitlessRadical: String { - return String(prefix(upTo: Inflections.endIndexOfDigitlessRadical(self))) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A type that controls GRDB string inflections. -public struct Inflections { - private var pluralizeRules: [(NSRegularExpression, String)] = [] - private var singularizeRules: [(NSRegularExpression, String)] = [] - private var uncountablesRegularExpressions: [String: NSRegularExpression] = [:] - - // For testability - var uncountables: Set { - return Set(uncountablesRegularExpressions.keys) - } - - // MARK: - Initialization - - public init() { - } - - // MARK: - Configuration - - /// Appends a pluralization rule. - /// - /// var inflections = Inflections() - /// inflections.plural("$", "s") - /// inflections.pluralize("player") // "players" - /// - /// - parameters: - /// - pattern: A regular expression pattern. - /// - options: Regular expression options (defaults to - /// `[.caseInsensitive]`). - /// - template: A replacement template string. - public mutating func plural(_ pattern: String, options: NSRegularExpression.Options = [.caseInsensitive], _ template: String) { - let reg = try! NSRegularExpression(pattern: pattern, options: options) - pluralizeRules.append((reg, template)) - } - - /// Appends a singularization rule. - /// - /// var inflections = Inflections() - /// inflections.singular("s$", "") - /// inflections.singularize("players") // "player" - /// - /// - parameters: - /// - pattern: A regular expression pattern. - /// - options: Regular expression options (defaults to - /// `[.caseInsensitive]`). - /// - template: A replacement template string. - public mutating func singular(_ pattern: String, options: NSRegularExpression.Options = [.caseInsensitive], _ template: String) { - let reg = try! NSRegularExpression(pattern: pattern, options: options) - singularizeRules.append((reg, template)) - } - - /// Appends uncountable words. - /// - /// var inflections = Inflections() - /// inflections.plural("$", "s") - /// inflections.uncountableWords(["foo"]) - /// inflections.pluralize("foo") // "foo" - /// inflections.pluralize("bar") // "bars" - public mutating func uncountableWords(_ words: [String]) { - for word in words { - uncountableWord(word) - } - } - - /// Appends an irregular singular/plural pair. - /// - /// var inflections = Inflections() - /// inflections.plural("$", "s") - /// inflections.irregularSuffix("man", "men") - /// inflections.pluralize("man") // "men" - /// inflections.singularizes("women") // "woman" - /// - /// - parameters: - /// - singular: The singular form. - /// - plural: The plural form. - public mutating func irregularSuffix(_ singular: String, _ plural: String) { - let s0 = singular.first! - let srest = singular.dropFirst() - - let p0 = plural.first! - let prest = plural.dropFirst() - - if s0.uppercased() == p0.uppercased() { - self.plural("(\(s0))\(srest)$", options: [.caseInsensitive], "$1\(prest)") - self.plural("(\(p0))\(prest)$", options: [.caseInsensitive], "$1\(prest)") - - self.singular("(\(s0))\(srest)$", options: [.caseInsensitive], "$1\(srest)") - self.singular("(\(p0))\(prest)$", options: [.caseInsensitive], "$1\(srest)") - } else { - self.plural("\(s0.uppercased())(?i)\(srest)$", options: [], p0.uppercased() + prest) - self.plural("\(s0.lowercased())(?i)\(srest)$", options: [], p0.lowercased() + prest) - self.plural("\(p0.uppercased())(?i)\(prest)$", options: [], p0.uppercased() + prest) - self.plural("\(p0.lowercased())(?i)\(prest)$", options: [], p0.lowercased() + prest) - - self.singular("\(s0.uppercased())(?i)\(srest)$", options: [], s0.uppercased() + srest) - self.singular("\(s0.lowercased())(?i)\(srest)$", options: [], s0.lowercased() + srest) - self.singular("\(p0.uppercased())(?i)\(prest)$", options: [], s0.uppercased() + srest) - self.singular("\(p0.lowercased())(?i)\(prest)$", options: [], s0.lowercased() + srest) - } - } - - // MARK: - Inflections - - /// Returns a pluralized string. - /// - /// Inflections.default.pluralize("player") // "players" - public func pluralize(_ string: String) -> String { - return inflectString(string, with: pluralizeRules) - } - - /// Returns a singularized string. - public func singularize(_ string: String) -> String { - return inflectString(string, with: singularizeRules) - } - - // MARK: - Utils - - /// Appends an uncountable word. - /// - /// var inflections = Inflections() - /// inflections.plural("$", "s") - /// inflections.uncountableWord("foo") - /// inflections.pluralize("foo") // "foo" - /// inflections.pluralize("bar") // "bars" - private mutating func uncountableWord(_ word: String) { - let escWord = NSRegularExpression.escapedPattern(for: word) - uncountablesRegularExpressions[word] = try! NSRegularExpression(pattern: "\\b\(escWord)\\Z", options: [.caseInsensitive]) - } - - private func isUncountable(_ string: String) -> Bool { - let range = NSRange(location: 0, length: string.utf16.count) - for (_, reg) in uncountablesRegularExpressions { - if reg.firstMatch(in: string, options: [], range: range) != nil { - return true - } - } - return false - } - - private func inflectString(_ string: String, with rules: [(NSRegularExpression, String)]) -> String { - let indexOfLastWord = Inflections.startIndexOfLastWord(string) - let endIndexOfDigitlessRadical = Inflections.endIndexOfDigitlessRadical(string) - let lastWord = String(string[indexOfLastWord.. String { - if string.isEmpty { - return string - } - let range = NSRange(string.startIndex.. 0 { - return String(result) - } - } - return string - } - - /// startIndexOfLastWord("foo") -> "foo" - /// startIndexOfLastWord("foo bar") -> "bar" - /// startIndexOfLastWord("foo_bar") -> "bar" - /// startIndexOfLastWord("fooBar") -> "Bar" - static func startIndexOfLastWord(_ string: String) -> String.Index { - let range = NSRange(string.startIndex.. "bar" - /// "foo12" -> "foo" - static func endIndexOfDigitlessRadical(_ string: String) -> String.Index { - let digits: ClosedRange = "0"..."9" - return string // "foo12" - .reversed() // "21oof" - .prefix(while: { digits.contains($0) }) // "21" - .endIndex // reversed(foo^12) - .base // foo^12 - } - - private static let wordBoundaryReg = try! NSRegularExpression(pattern: "\\b\\w+$", options: []) - private static let underscoreBoundaryReg = try! NSRegularExpression(pattern: "_[^_]+$", options: []) - private static let caseBoundaryReg = try! NSRegularExpression(pattern: "[^A-Z][A-Z]+[a-z1-9]+$", options: []) -} - diff --git a/Example/Pods/GRDB.swift/GRDB/Utils/OrderedDictionary.swift b/Example/Pods/GRDB.swift/GRDB/Utils/OrderedDictionary.swift deleted file mode 100755 index dd51231..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Utils/OrderedDictionary.swift +++ /dev/null @@ -1,152 +0,0 @@ -/// A dictionary with guaranteed keys ordering. -/// -/// var dict = OrderedDictionary() -/// dict.append(1, forKey: "foo") -/// dict.append(2, forKey: "bar") -/// -/// dict["foo"] // 1 -/// dict["bar"] // 2 -/// dict["qux"] // nil -/// dict.map { $0.key } // ["foo", "bar"], in this order. -@usableFromInline -struct OrderedDictionary { - @usableFromInline /* private(set) */ var keys: [Key] - @usableFromInline /* private(set) */ var dictionary: [Key: Value] - - var values: [Value] { - return keys.map { dictionary[$0]! } - } - - /// Creates an empty ordered dictionary. - init() { - keys = [] - dictionary = [:] - } - - /// Creates an empty ordered dictionary. - init(minimumCapacity: Int) { - keys = [] - keys.reserveCapacity(minimumCapacity) - dictionary = Dictionary(minimumCapacity: minimumCapacity) - } - - /// Returns the value associated with key, or nil. - @usableFromInline - subscript(_ key: Key) -> Value? { - get { return dictionary[key] } - set { - if let value = newValue { - updateValue(value, forKey: key) - } else { - removeValue(forKey: key) - } - } - } - - /// Returns the value associated with key, or the default value. - @inlinable - subscript(_ key: Key, default defaultValue: Value) -> Value { - get { return dictionary[key] ?? defaultValue } - set { self[key] = newValue } - } - - /// Appends the given value for the given key. - /// - /// - precondition: There is no value associated with key yet. - mutating func appendValue(_ value: Value, forKey key: Key) { - guard updateValue(value, forKey: key) == nil else { - fatalError("key is already defined") - } - } - - /// Updates the value stored in the dictionary for the given key, or - /// appnds a new key-value pair if the key does not exist. - /// - /// Use this method instead of key-based subscripting when you need to know - /// whether the new value supplants the value of an existing key. If the - /// value of an existing key is updated, updateValue(_:forKey:) returns the - /// original value. If the given key is not present in the dictionary, this - /// method appends the key-value pair and returns nil. - @discardableResult - @usableFromInline - mutating func updateValue(_ value: Value, forKey key: Key) -> Value? { - if let oldValue = dictionary.updateValue(value, forKey: key) { - return oldValue - } - keys.append(key) - return nil - } - - /// Removes the value associated with key. - @discardableResult - @inlinable - mutating func removeValue(forKey key: Key) -> Value? { - guard let value = dictionary.removeValue(forKey: key) else { - return nil - } - let index = keys.firstIndex { $0 == key }! - keys.remove(at: index) - return value - } - - /// Returns a new ordered dictionary containing the keys of this dictionary - /// with the values transformed by the given closure. - func mapValues(_ transform: (Value) throws -> T) rethrows -> OrderedDictionary { - return try reduce(into: .init()) { dict, pair in - let value = try transform(pair.value) - dict.appendValue(value, forKey: pair.key) - } - } - - /// Returns a new ordered dictionary containing only the key-value pairs - /// that have non-nil values as the result of transformation by the - /// given closure. - func compactMapValues(_ transform: (Value) throws -> T?) rethrows -> OrderedDictionary { - return try reduce(into: .init()) { dict, pair in - if let value = try transform(pair.value) { - dict.appendValue(value, forKey: pair.key) - } - } - } -} - -extension OrderedDictionary: Collection { - @usableFromInline typealias Index = Int - - @usableFromInline var startIndex: Int { - return 0 - } - - @usableFromInline var endIndex: Int { - return keys.count - } - - @usableFromInline func index(after i: Int) -> Int { - return i + 1 - } - - @usableFromInline subscript(position: Int) -> (key: Key, value: Value) { - let key = keys[position] - return (key: key, value: dictionary[key]!) - } -} - -extension OrderedDictionary: ExpressibleByDictionaryLiteral { - @usableFromInline init(dictionaryLiteral elements: (Key, Value)...) { - self.keys = elements.map { $0.0 } - self.dictionary = Dictionary(uniqueKeysWithValues: elements) - } -} - -extension OrderedDictionary: Equatable where Value: Equatable { - @usableFromInline - static func == (lhs: OrderedDictionary, rhs: OrderedDictionary) -> Bool { - return (lhs.keys == rhs.keys) && (lhs.dictionary == rhs.dictionary) - } -} - -extension Dictionary { - init(_ orderedDictionary: OrderedDictionary) { - self = orderedDictionary.dictionary - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Utils/Pool.swift b/Example/Pods/GRDB.swift/GRDB/Utils/Pool.swift deleted file mode 100755 index 444d926..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Utils/Pool.swift +++ /dev/null @@ -1,121 +0,0 @@ -import Dispatch - -/// A Pool maintains a set of elements that are built them on demand. A pool has -/// a maximum number of elements. -/// -/// // A pool of 3 integers -/// var number = 0 -/// let pool = Pool(maximumCount: 3, makeElement: { -/// number = number + 1 -/// return number -/// }) -/// -/// The function get() dequeues an available element and gives this element to -/// the block argument. During the block execution, the element is not -/// available. When the block is ended, the element is available again. -/// -/// // got 1 -/// pool.get { n in -/// print("got \(n)") -/// } -/// -/// If there is no available element, the pool builds a new element, unless the -/// maximum number of elements is reached. In this case, the get() method -/// blocks the current thread, until an element eventually turns available again. -/// -/// DispatchQueue.concurrentPerform(iterations: 6) { _ in -/// pool.get { n in -/// print("got \(n)") -/// } -/// } -/// -/// got 1 -/// got 2 -/// got 3 -/// got 2 -/// got 1 -/// got 3 -final class Pool { - private class Item { - let element: T - var available: Bool - - init(element: T, available: Bool) { - self.element = element - self.available = available - } - } - - private let makeElement: () throws -> T - private var items: ReadWriteBox<[Item]> = ReadWriteBox([]) - private let semaphore: DispatchSemaphore // limits the number of elements - - init(maximumCount: Int, makeElement: @escaping () throws -> T) { - GRDBPrecondition(maximumCount > 0, "Pool size must be at least 1") - self.makeElement = makeElement - self.semaphore = DispatchSemaphore(value: maximumCount) - } - - /// Returns a tuple (element, release) - /// Client MUST call release() after the element has been used. - func get() throws -> (T, () -> ()) { - _ = semaphore.wait(timeout: .distantFuture) - do { - let item = try items.write { items -> Item in - if let item = items.first(where: { $0.available }) { - item.available = false - return item - } else { - let element = try makeElement() - let item = Item(element: element, available: false) - items.append(item) - return item - } - } - let release = { - self.items.write { _ in - // This is why Item is a class, not a struct: so that we can - // release it without having to find in it the items array. - item.available = true - } - self.semaphore.signal() - } - return (item.element, release) - } catch { - semaphore.signal() - throw error - } - } - - /// Performs a synchronous block with an element. The element turns - /// available after the block has executed. - func get(block: (T) throws -> U) throws -> U { - let (element, release) = try get() - defer { release() } - return try block(element) - } - - /// Performs a block on each pool element, available or not. - /// The block is run is some arbitrary dispatch queue. - func forEach(_ body: (T) throws -> ()) rethrows { - try items.read { items in - for item in items { - try body(item.element) - } - } - } - - /// Empty the pool. Currently used items won't be reused. - func clear() { - clear {} - } - - /// Empty the pool. Currently used items won't be reused. - /// Eventual block is executed before any other element is dequeued. - func clear(andThen block: () throws -> ()) rethrows { - try items.write { items in - items.removeAll() - try block() - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Utils/ReadWriteBox.swift b/Example/Pods/GRDB.swift/GRDB/Utils/ReadWriteBox.swift deleted file mode 100755 index 4dc9e4f..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Utils/ReadWriteBox.swift +++ /dev/null @@ -1,38 +0,0 @@ -import Dispatch - -/// A ReadWriteBox grants multiple readers and single-writer guarantees on a value. -final class ReadWriteBox { - var value: T { - get { return read { $0 } } - set { write { $0 = newValue } } - } - - init(_ value: T) { - self._value = value - self.queue = DispatchQueue(label: "GRDB.ReadWriteBox", attributes: [.concurrent]) - } - - func read(_ block: (T) throws -> U) rethrows -> U { - return try queue.sync { - try block(_value) - } - } - - func write(_ block: (inout T) throws -> U) rethrows -> U { - return try queue.sync(flags: [.barrier]) { - try block(&_value) - } - } - - private var _value: T - private var queue: DispatchQueue -} - -extension ReadWriteBox where T: Numeric { - func increment() -> T { - return write { n in - n += 1 - return n - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/Utils/Result.swift b/Example/Pods/GRDB.swift/GRDB/Utils/Result.swift deleted file mode 100755 index 028259c..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Utils/Result.swift +++ /dev/null @@ -1,34 +0,0 @@ -#if compiler(>=5.0) -typealias Result = Swift.Result -#else -enum Result { - case success(Success) - case failure(Error) - - init(catching body: () throws -> Success) { - do { - self = try .success(body()) - } catch { - self = .failure(error) - } - } - - func map(_ transform: (Success) -> T) -> Result { - switch self { - case .success(let success): - return .success(transform(success)) - case .failure(let error): - return .failure(error) - } - } - - func get() throws -> Success { - switch self { - case .success(let success): - return success - case .failure(let error): - throw error - } - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/Utils/Utils.swift b/Example/Pods/GRDB.swift/GRDB/Utils/Utils.swift deleted file mode 100755 index ae666ec..0000000 --- a/Example/Pods/GRDB.swift/GRDB/Utils/Utils.swift +++ /dev/null @@ -1,120 +0,0 @@ -import Foundation - -// MARK: - Public - -extension String { - /// Returns the receiver, quoted for safe insertion as an identifier in an - /// SQL query. - /// - /// db.execute(sql: "SELECT * FROM \(tableName.quotedDatabaseIdentifier)") - @inlinable - public var quotedDatabaseIdentifier: String { - // See https://www.sqlite.org/lang_keywords.html - return "\"\(self)\"" - } -} - -/// Return as many question marks separated with commas as the *count* argument. -/// -/// databaseQuestionMarks(count: 3) // "?,?,?" -@inlinable -public func databaseQuestionMarks(count: Int) -> String { - return repeatElement("?", count: count).joined(separator: ",") -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// This protocol is an implementation detail of GRDB. Don't use it. -/// -/// :nodoc: -public protocol _OptionalProtocol { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - associatedtype _Wrapped -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// This conformance is an implementation detail of GRDB. Don't rely on it. -/// -/// :nodoc: -extension Optional : _OptionalProtocol { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// :nodoc: - public typealias _Wrapped = Wrapped -} - - -// MARK: - Internal - -/// Reserved for GRDB: do not use. -@inlinable -func GRDBPrecondition(_ condition: @autoclosure() -> Bool, _ message: @autoclosure() -> String = "", file: StaticString = #file, line: UInt = #line) { - /// Custom precondition function which aims at solving - /// https://bugs.swift.org/browse/SR-905 and - /// https://github.com/groue/GRDB.swift/issues/37 - if !condition() { - fatalError(message(), file: file, line: line) - } -} - -// Workaround Swift inconvenience around factory methods of non-final classes -func cast(_ value: T) -> U? { - return value as? U -} - -extension RangeReplaceableCollection { - /// Removes the first object that matches *predicate*. - mutating func removeFirst(where predicate: (Element) throws -> Bool) rethrows { - if let index = try firstIndex(where: predicate) { - remove(at: index) - } - } -} - -extension Dictionary { - /// Removes the first object that matches *predicate*. - mutating func removeFirst(where predicate: (Element) throws -> Bool) rethrows { - if let index = try firstIndex(where: predicate) { - remove(at: index) - } - } -} - -extension DispatchQueue { - private static var mainKey: DispatchSpecificKey<()> = { - let key = DispatchSpecificKey<()>() - DispatchQueue.main.setSpecific(key: key, value: ()) - return key - }() - - static var isMain: Bool { - return DispatchQueue.getSpecific(key: mainKey) != nil - } -} - -// Has SE-0220 been removed in Xcode 10.2 beta 4? -// #if compiler(<5.0) -extension Sequence { - @inlinable - func count(where predicate: (Element) throws -> Bool) rethrows -> Int { - var count = 0 - for e in self where try predicate(e) { - count += 1 - } - return count - } -} -// #endif - -#if !compiler(>=5.0) -extension Character { - func uppercased() -> String { - return String(self).uppercased() - } - - func lowercased() -> String { - return String(self).lowercased() - } -} -#endif diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Combine.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Combine.swift deleted file mode 100755 index da06efc..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Combine.swift +++ /dev/null @@ -1,273 +0,0 @@ -extension ValueObservation where Reducer == Void { - public static func combine( - _ o1: ValueObservation, - _ o2: ValueObservation) - -> ValueObservation> - { - return ValueObservation>( - tracking: { try DatabaseRegion.union( - o1.observedRegion($0), - o2.observedRegion($0)) }, - reducer: { try _combine( - o1.makeReducer($0), - o2.makeReducer($0)) }) - } - - public static func combine( - _ o1: ValueObservation, - _ o2: ValueObservation, - _ o3: ValueObservation) - -> ValueObservation> - { - return ValueObservation>( - tracking: { try DatabaseRegion.union( - o1.observedRegion($0), - o2.observedRegion($0), - o3.observedRegion($0)) }, - reducer: { try _combine( - o1.makeReducer($0), - o2.makeReducer($0), - o3.makeReducer($0)) }) - } - - public static func combine( - _ o1: ValueObservation, - _ o2: ValueObservation, - _ o3: ValueObservation, - _ o4: ValueObservation) - -> ValueObservation> - { - return ValueObservation>( - tracking: { try DatabaseRegion.union( - o1.observedRegion($0), - o2.observedRegion($0), - o3.observedRegion($0), - o4.observedRegion($0)) }, - reducer: { try _combine( - o1.makeReducer($0), - o2.makeReducer($0), - o3.makeReducer($0), - o4.makeReducer($0)) }) - } - - public static func combine( - _ o1: ValueObservation, - _ o2: ValueObservation, - _ o3: ValueObservation, - _ o4: ValueObservation, - _ o5: ValueObservation) - -> ValueObservation> - { - return ValueObservation>( - tracking: { try DatabaseRegion.union( - o1.observedRegion($0), - o2.observedRegion($0), - o3.observedRegion($0), - o4.observedRegion($0), - o5.observedRegion($0)) }, - reducer: { try _combine( - o1.makeReducer($0), - o2.makeReducer($0), - o3.makeReducer($0), - o4.makeReducer($0), - o5.makeReducer($0)) }) - } -} - -private func _combine( - _ r1: R1, - _ r2: R2) - -> AnyValueReducer< - (R1.Fetched, R2.Fetched), - (R1.Value, R2.Value)> -{ - var r1 = r1 - var r2 = r2 - var prev1: R1.Value? - var prev2: R2.Value? - func fetch(db: Database) throws -> (R1.Fetched, R2.Fetched) { - return try ( - r1.fetch(db), - r2.fetch(db)) - } - func value(tuple: (R1.Fetched, R2.Fetched)) -> (R1.Value, R2.Value)? { - let v1 = r1.value(tuple.0) - let v2 = r2.value(tuple.1) - defer { - if let v1 = v1 { prev1 = v1 } - if let v2 = v2 { prev2 = v2 } - } - if v1 != nil || v2 != nil, - let c1 = v1 ?? prev1, - let c2 = v2 ?? prev2 - { - return (c1, c2) - } else { - return nil - } - } - return AnyValueReducer(fetch: fetch, value: value) -} - -private func _combine( - _ r1: R1, - _ r2: R2, - _ r3: R3) - -> AnyValueReducer< - (R1.Fetched, R2.Fetched, R3.Fetched), - (R1.Value, R2.Value, R3.Value)> -{ - var r1 = r1 - var r2 = r2 - var r3 = r3 - var prev1: R1.Value? - var prev2: R2.Value? - var prev3: R3.Value? - func fetch(db: Database) throws -> (R1.Fetched, R2.Fetched, R3.Fetched) { - return try ( - r1.fetch(db), - r2.fetch(db), - r3.fetch(db)) - } - func value(tuple: (R1.Fetched, R2.Fetched, R3.Fetched)) -> (R1.Value, R2.Value, R3.Value)? { - let v1 = r1.value(tuple.0) - let v2 = r2.value(tuple.1) - let v3 = r3.value(tuple.2) - defer { - if let v1 = v1 { prev1 = v1 } - if let v2 = v2 { prev2 = v2 } - if let v3 = v3 { prev3 = v3 } - } - if v1 != nil || v2 != nil || v3 != nil, - let c1 = v1 ?? prev1, - let c2 = v2 ?? prev2, - let c3 = v3 ?? prev3 - { - return (c1, c2, c3) - } else { - return nil - } - } - return AnyValueReducer(fetch: fetch, value: value) -} - -private func _combine( - _ r1: R1, - _ r2: R2, - _ r3: R3, - _ r4: R4) - -> AnyValueReducer< - (R1.Fetched, R2.Fetched, R3.Fetched, R4.Fetched), - (R1.Value, R2.Value, R3.Value, R4.Value)> -{ - var r1 = r1 - var r2 = r2 - var r3 = r3 - var r4 = r4 - var prev1: R1.Value? - var prev2: R2.Value? - var prev3: R3.Value? - var prev4: R4.Value? - func fetch(db: Database) throws -> (R1.Fetched, R2.Fetched, R3.Fetched, R4.Fetched) { - return try ( - r1.fetch(db), - r2.fetch(db), - r3.fetch(db), - r4.fetch(db)) - } - func value(tuple: (R1.Fetched, R2.Fetched, R3.Fetched, R4.Fetched)) -> (R1.Value, R2.Value, R3.Value, R4.Value)? { - let v1 = r1.value(tuple.0) - let v2 = r2.value(tuple.1) - let v3 = r3.value(tuple.2) - let v4 = r4.value(tuple.3) - defer { - if let v1 = v1 { prev1 = v1 } - if let v2 = v2 { prev2 = v2 } - if let v3 = v3 { prev3 = v3 } - if let v4 = v4 { prev4 = v4 } - } - if v1 != nil || v2 != nil || v3 != nil || v4 != nil, - let c1 = v1 ?? prev1, - let c2 = v2 ?? prev2, - let c3 = v3 ?? prev3, - let c4 = v4 ?? prev4 - { - return (c1, c2, c3, c4) - } else { - return nil - } - } - return AnyValueReducer(fetch: fetch, value: value) -} - -private func _combine( - _ r1: R1, - _ r2: R2, - _ r3: R3, - _ r4: R4, - _ r5: R5) - -> AnyValueReducer< - (R1.Fetched, R2.Fetched, R3.Fetched, R4.Fetched, R5.Fetched), - (R1.Value, R2.Value, R3.Value, R4.Value, R5.Value)> -{ - var r1 = r1 - var r2 = r2 - var r3 = r3 - var r4 = r4 - var r5 = r5 - var prev1: R1.Value? - var prev2: R2.Value? - var prev3: R3.Value? - var prev4: R4.Value? - var prev5: R5.Value? - func fetch(db: Database) throws -> (R1.Fetched, R2.Fetched, R3.Fetched, R4.Fetched, R5.Fetched) { - return try ( - r1.fetch(db), - r2.fetch(db), - r3.fetch(db), - r4.fetch(db), - r5.fetch(db)) - } - func value(tuple: (R1.Fetched, R2.Fetched, R3.Fetched, R4.Fetched, R5.Fetched)) -> (R1.Value, R2.Value, R3.Value, R4.Value, R5.Value)? { - let v1 = r1.value(tuple.0) - let v2 = r2.value(tuple.1) - let v3 = r3.value(tuple.2) - let v4 = r4.value(tuple.3) - let v5 = r5.value(tuple.4) - defer { - if let v1 = v1 { prev1 = v1 } - if let v2 = v2 { prev2 = v2 } - if let v3 = v3 { prev3 = v3 } - if let v4 = v4 { prev4 = v4 } - if let v5 = v5 { prev5 = v5 } - } - if v1 != nil || v2 != nil || v3 != nil || v4 != nil || v5 != nil, - let c1 = v1 ?? prev1, - let c2 = v2 ?? prev2, - let c3 = v3 ?? prev3, - let c4 = v4 ?? prev4, - let c5 = v5 ?? prev5 - { - return (c1, c2, c3, c4, c5) - } else { - return nil - } - } - return AnyValueReducer(fetch: fetch, value: value) -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+CompactMap.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+CompactMap.swift deleted file mode 100755 index 5778b5a..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+CompactMap.swift +++ /dev/null @@ -1,44 +0,0 @@ -extension ValueObservation where Reducer: ValueReducer { - /// Returns a ValueObservation which notifies the non-nil results of calling - /// the given transformation which each element notified by this - /// value observation. - public func compactMap(_ transform: @escaping (Reducer.Value) -> T?) - -> ValueObservation> - { - return mapReducer { $1.compactMap(transform) } - } -} - -extension ValueReducer { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns a reducer which outputs the non-nil results of calling the given - /// transformation which each element emitted by this reducer. - public func compactMap(_ transform: @escaping (Value) -> T?) -> CompactMapValueReducer { - return CompactMapValueReducer(self, transform) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// See ValueReducer.compactMap(_:) -/// -/// :nodoc: -public struct CompactMapValueReducer: ValueReducer { - private var base: Base - private let transform: (Base.Value) -> T? - - init(_ base: Base, _ transform: @escaping (Base.Value) -> T?) { - self.base = base - self.transform = transform - } - - public func fetch(_ db: Database) throws -> Base.Fetched { - return try base.fetch(db) - } - - public mutating func value(_ fetched: Base.Fetched) -> T? { - guard let value = base.value(fetched) else { return nil } - return transform(value) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Count.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Count.swift deleted file mode 100755 index 78ff705..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Count.swift +++ /dev/null @@ -1,33 +0,0 @@ -extension ValueObservation where Reducer == Void { - - // MARK: - Count Observation - - /// Creates a ValueObservation which observes *request*, and notifies its - /// count whenever it is modified by a database transaction. - /// - /// For example: - /// - /// let request = Player.all() - /// let observation = ValueObservation.trackingCount(request) - /// - /// let observer = try observation.start(in: dbQueue) { count: Int in - /// print("Number of players has changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingCount(_ request: Request) - -> ValueObservation>> - { - return ValueObservation.tracking(request, fetch: request.fetchCount).distinctUntilChanged() - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+DatabaseValueConvertible.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+DatabaseValueConvertible.swift deleted file mode 100755 index c326345..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+DatabaseValueConvertible.swift +++ /dev/null @@ -1,210 +0,0 @@ -extension ValueObservation where Reducer == Void { - - // MARK: - DatabaseValueConvertible Observation - - /// Creates a ValueObservation which observes *request*, and notifies - /// fresh values whenever the request is modified by a - /// database transaction. - /// - /// For example: - /// - /// let request = Player.select(Column("name"), as: String.self) - /// let observation = ValueObservation.trackingAll(request) - /// - /// let observer = try observation.start(in: dbQueue) { names: [String] in - /// print("Player names have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingAll(_ request: Request) - -> ValueObservation> - where Request.RowDecoder: DatabaseValueConvertible - { - return ValueObservation>.tracking(request, reducer: { _ in - DatabaseValuesReducer(request: request) } - ) - } - - /// Creates a ValueObservation which observes *request*, and notifies a - /// fresh value whenever the request is modified by a database transaction. - /// - /// For example: - /// - /// let request = Player.select(max(Column("score")), as: Int.self) - /// let observation = ValueObservation.trackingOne(request) - /// - /// let observer = try observation.start(in: dbQueue) { maxScore: Int? in - /// print("Maximum score has changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingOne(_ request: Request) - -> ValueObservation> - where Request.RowDecoder: DatabaseValueConvertible - { - return ValueObservation>.tracking(request, reducer: { _ in DatabaseValueReducer(request: request) - }) - } - - /// Creates a ValueObservation which observes *request*, and notifies - /// fresh values whenever the request is modified by a - /// database transaction. - /// - /// For example: - /// - /// let request = Player.select(Column("name"), as: Optional.self) - /// let observation = ValueObservation.trackingAll(request) - /// - /// let observer = try observation.start(in: dbQueue) { names: [String?] in - /// print("Player names have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingAll(_ request: Request) - -> ValueObservation> - where Request.RowDecoder: _OptionalProtocol, - Request.RowDecoder._Wrapped: DatabaseValueConvertible - { - return ValueObservation>.tracking(request, reducer: { _ in - OptionalDatabaseValuesReducer(request: request) - }) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A reducer which outputs arrays of values, filtering out consecutive -/// identical database values. -/// -/// :nodoc: -public struct DatabaseValuesReducer: ValueReducer - where Request.RowDecoder: DatabaseValueConvertible -{ - public let request: Request - private var previousDbValues: [DatabaseValue]? - - init(request: Request) { - self.request = request - } - - public func fetch(_ db: Database) throws -> [DatabaseValue] { - return try DatabaseValue.fetchAll(db, request) - } - - public mutating func value(_ dbValues: [DatabaseValue]) -> [Request.RowDecoder]? { - if let previousDbValues = previousDbValues, previousDbValues == dbValues { - // Don't notify consecutive identical dbValue arrays - return nil - } - self.previousDbValues = dbValues - return dbValues.map { - Request.RowDecoder.decode(from: $0, conversionContext: nil) - } - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A reducer which outputs optional values, filtering out consecutive -/// identical database values. -/// -/// :nodoc: -public struct DatabaseValueReducer: ValueReducer - where Request.RowDecoder: DatabaseValueConvertible -{ - public let request: Request - private var previousDbValue: DatabaseValue?? - private var previousValueWasNil = false - - init(request: Request) { - self.request = request - } - - public func fetch(_ db: Database) throws -> DatabaseValue? { - return try DatabaseValue.fetchOne(db, request) - } - - public mutating func value(_ dbValue: DatabaseValue?) -> Request.RowDecoder?? { - if let previousDbValue = previousDbValue, previousDbValue == dbValue { - // Don't notify consecutive identical dbValue - return nil - } - self.previousDbValue = dbValue - if let dbValue = dbValue, - let value = Request.RowDecoder.decodeIfPresent(from: dbValue, conversionContext: nil) - { - previousValueWasNil = false - return .some(value) - } else if previousValueWasNil { - // Don't notify consecutive nil values - return nil - } else { - previousValueWasNil = true - return .some(nil) - } - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A reducer which outputs arrays of optional values, filtering out consecutive -/// identical database values. -/// -/// :nodoc: -public struct OptionalDatabaseValuesReducer: ValueReducer - where - Request.RowDecoder: _OptionalProtocol, - Request.RowDecoder._Wrapped: DatabaseValueConvertible -{ - public let request: Request - private var previousDbValues: [DatabaseValue]? - - init(request: Request) { - self.request = request - } - - public func fetch(_ db: Database) throws -> [DatabaseValue] { - return try DatabaseValue.fetchAll(db, request) - } - - public mutating func value(_ dbValues: [DatabaseValue]) -> [Request.RowDecoder._Wrapped?]? { - if let previousDbValues = previousDbValues, previousDbValues == dbValues { - // Don't notify consecutive identical dbValue arrays - return nil - } - self.previousDbValues = dbValues - return dbValues.map { - Request.RowDecoder._Wrapped.decodeIfPresent(from: $0, conversionContext: nil) - } - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+DistinctUntilChanged.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+DistinctUntilChanged.swift deleted file mode 100755 index a15102a..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+DistinctUntilChanged.swift +++ /dev/null @@ -1,47 +0,0 @@ -extension ValueObservation where Reducer: ValueReducer, Reducer.Value: Equatable { - /// Returns a ValueObservation which filters out consecutive equal values. - public func distinctUntilChanged() - -> ValueObservation> - { - return mapReducer { $1.distinctUntilChanged() } - } -} - -extension ValueReducer where Value: Equatable { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns a ValueReducer which filters out consecutive equal values. - public func distinctUntilChanged() -> DistinctUntilChangedValueReducer { - return DistinctUntilChangedValueReducer(self) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// See ValueReducer.distinctUntilChanged() -/// -/// :nodoc: -public struct DistinctUntilChangedValueReducer: ValueReducer where Base.Value: Equatable { - private var base: Base - private var previousValue: Base.Value? - - init(_ base: Base) { - self.base = base - } - - public func fetch(_ db: Database) throws -> Base.Fetched { - return try base.fetch(db) - } - - public mutating func value(_ fetched: Base.Fetched) -> Base.Value? { - guard let value = base.value(fetched) else { - return nil - } - if let previousValue = previousValue, previousValue == value { - // Don't notify consecutive identical values - return nil - } - self.previousValue = value - return value - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+FetchableRecord.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+FetchableRecord.swift deleted file mode 100755 index df28ced..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+FetchableRecord.swift +++ /dev/null @@ -1,192 +0,0 @@ -extension ValueObservation where Reducer == Void { - - // MARK: - FetchableRecord Observation - - /// Creates a ValueObservation which observes *request*, and notifies - /// fresh records whenever the request is modified by a - /// database transaction. - /// - /// For example: - /// - /// let request = Player.all() - /// let observation = ValueObservation.trackingAll(request) - /// - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("Players have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingAll(_ request: Request) - -> ValueObservation> - where Request.RowDecoder: FetchableRecord - { - return ValueObservation>.tracking(request, reducer: { _ in - FetchableRecordsReducer { try Row.fetchAll($0, request) } - }) - } - - /// Creates a ValueObservation which observes *request*, and notifies - /// fresh records whenever the request is modified by a - /// database transaction. - /// - /// For example: - /// - /// let request = Player.all() - /// let observation = ValueObservation.trackingAll(request) - /// - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("Players have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingAll(_ request: QueryInterfaceRequest) - -> ValueObservation> - { - return ValueObservation>.tracking(request, reducer: { _ in - FetchableRecordsReducer { try Row.fetchAll($0, request) } - }) - } - - /// Creates a ValueObservation which observes *request*, and notifies a - /// fresh record whenever the request is modified by a database transaction. - /// - /// For example: - /// - /// let request = Player.filter(key: 1) - /// let observation = ValueObservation.trackingOne(request) - /// - /// let observer = try observation.start(in: dbQueue) { player: Player? in - /// print("Player has changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingOne(_ request: Request) -> - ValueObservation> - where Request.RowDecoder: FetchableRecord - { - return ValueObservation>.tracking(request, reducer: { _ in - FetchableRecordReducer { try Row.fetchOne($0, request) } - }) - } - - /// Creates a ValueObservation which observes *request*, and notifies a - /// fresh record whenever the request is modified by a database transaction. - /// - /// For example: - /// - /// let request = Player.filter(key: 1) - /// let observation = ValueObservation.trackingOne(request) - /// - /// let observer = try observation.start(in: dbQueue) { player: Player? in - /// print("Player has changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingOne(_ request: QueryInterfaceRequest) - -> ValueObservation> - { - return ValueObservation>.tracking(request, reducer: { _ in - FetchableRecordReducer { try Row.fetchOne($0, request) } - }) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A reducer which outputs arrays of records, filtering out consecutive -/// identical database rows. -/// -/// :nodoc: -public struct FetchableRecordsReducer: ValueReducer - where RowDecoder: FetchableRecord -{ - private let _fetch: (Database) throws -> [Row] - private var previousRows: [Row]? - - init(fetch: @escaping (Database) throws -> [Row]) { - self._fetch = fetch - } - - public func fetch(_ db: Database) throws -> [Row] { - return try _fetch(db) - } - - public mutating func value(_ rows: [Row]) -> [RowDecoder]? { - if let previousRows = previousRows, previousRows == rows { - // Don't notify consecutive identical row arrays - return nil - } - self.previousRows = rows - return rows.map(RowDecoder.init(row:)) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A reducer which outputs optional records, filtering out consecutive -/// identical database rows. -/// -/// :nodoc: -public struct FetchableRecordReducer: ValueReducer - where RowDecoder: FetchableRecord -{ - private let _fetch: (Database) throws -> Row? - private var previousRow: Row?? - - init(fetch: @escaping (Database) throws -> Row?) { - self._fetch = fetch - } - - public func fetch(_ db: Database) throws -> Row? { - return try _fetch(db) - } - - public mutating func value(_ row: Row?) -> RowDecoder?? { - if let previousRow = previousRow, previousRow == row { - // Don't notify consecutive identical rows - return nil - } - self.previousRow = row - return .some(row.map(RowDecoder.init(row:))) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Map.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Map.swift deleted file mode 100755 index cefd648..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Map.swift +++ /dev/null @@ -1,47 +0,0 @@ -extension ValueObservation where Reducer: ValueReducer { - /// Returns a ValueObservation which notifies the results of calling the - /// given transformation which each element notified by this - /// value observation. - public func map(_ transform: @escaping (Reducer.Value) -> T) - -> ValueObservation> - { - return mapReducer { $1.map(transform) } - } -} - -extension ValueReducer { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns a reducer which outputs the results of calling the given - /// transformation which each element emitted by this reducer. - public func map(_ transform: @escaping (Value) -> T) -> MapValueReducer { - return MapValueReducer(self, transform) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A ValueReducer whose values consist of those in a Base ValueReducer passed -/// through a transform function. -/// -/// See ValueReducer.map(_:) -/// -/// :nodoc: -public struct MapValueReducer: ValueReducer { - private var base: Base - private let transform: (Base.Value) -> T - - init(_ base: Base, _ transform: @escaping (Base.Value) -> T) { - self.base = base - self.transform = transform - } - - public func fetch(_ db: Database) throws -> Base.Fetched { - return try base.fetch(db) - } - - public mutating func value(_ fetched: Base.Fetched) -> T? { - guard let value = base.value(fetched) else { return nil } - return transform(value) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+MapReducer.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+MapReducer.swift deleted file mode 100755 index 0f9705c..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+MapReducer.swift +++ /dev/null @@ -1,14 +0,0 @@ -extension ValueObservation { - /// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) - /// - /// Returns a ValueObservation with a transformed reducer. - public func mapReducer(_ transform: @escaping (Database, Reducer) throws -> R) -> ValueObservation { - let makeReducer = self.makeReducer - var observation = ValueObservation( - tracking: observedRegion, - reducer: { db in try transform(db, makeReducer(db)) }) - observation.scheduling = scheduling - observation.requiresWriteAccess = requiresWriteAccess - return observation - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Row.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Row.swift deleted file mode 100755 index 32038ee..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation+Row.swift +++ /dev/null @@ -1,186 +0,0 @@ -extension ValueObservation where Reducer == Void { - - // MARK: - Row Observation - - /// Creates a ValueObservation which observes *request*, and notifies - /// fresh rows whenever the request is modified by a database transaction. - /// - /// For example: - /// - /// let request = SQLRequest(sql: "SELECT * FROM player") - /// let observation = ValueObservation.trackingAll(request) - /// - /// let observer = try observation.start(in: dbQueue) { rows: [Row] in - /// print("Players have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingAll(_ request: Request) - -> ValueObservation - where Request.RowDecoder == Row - { - return ValueObservation.tracking(request, reducer: { _ in - RowsReducer(fetch: request.fetchAll) - }) - } - - /// Creates a ValueObservation which observes *request*, and notifies - /// fresh rows whenever the request is modified by a database transaction. - /// - /// For example: - /// - /// let request = SQLRequest(sql: "SELECT * FROM player") - /// let observation = ValueObservation.trackingAll(request) - /// - /// let observer = try observation.start(in: dbQueue) { rows: [Row] in - /// print("Players have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingAll(_ request: QueryInterfaceRequest) - -> ValueObservation - { - return ValueObservation.tracking(request, reducer: { _ in - RowsReducer(fetch: request.fetchAll) - }) - } - - /// Creates a ValueObservation which observes *request*, and notifies a - /// fresh row whenever the request is modified by a database transaction. - /// - /// For example: - /// - /// let request = SQLRequest(sql: "SELECT * FROM player WHERE id = ?", arguments: [1]) - /// let observation = ValueObservation.trackingOne(request) - /// - /// let observer = try observation.start(in: dbQueue) { row: Row? in - /// print("Players have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingOne(_ request: Request) - -> ValueObservation - where Request.RowDecoder == Row - { - return ValueObservation.tracking(request, reducer: { _ in - RowReducer(fetch: request.fetchOne) - }) - } - - /// Creates a ValueObservation which observes *request*, and notifies a - /// fresh row whenever the request is modified by a database transaction. - /// - /// For example: - /// - /// let request = SQLRequest(sql: "SELECT * FROM player WHERE id = ?", arguments: [1]) - /// let observation = ValueObservation.trackingOne(request) - /// - /// let observer = try observation.start(in: dbQueue) { row: Row? in - /// print("Players have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter request: the observed request. - /// - returns: a ValueObservation. - public static func trackingOne(_ request: QueryInterfaceRequest) - -> ValueObservation - { - return ValueObservation.tracking(request, reducer: { _ in - RowReducer(fetch: request.fetchOne) - }) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A reducer which outputs arrays of database rows, filtering out -/// consecutive identical arrays. -/// -/// :nodoc: -public struct RowsReducer: ValueReducer { - private let _fetch: (Database) throws -> [Row] - private var previousRows: [Row]? - - init(fetch: @escaping (Database) throws -> [Row]) { - self._fetch = fetch - } - - public func fetch(_ db: Database) throws -> [Row] { - return try _fetch(db) - } - - public mutating func value(_ rows: [Row]) -> [Row]? { - if let previousRows = previousRows, previousRows == rows { - // Don't notify consecutive identical row arrays - return nil - } - self.previousRows = rows - return rows - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A reducer which outputs optional records, filtering out consecutive -/// identical database rows. -/// -/// :nodoc: -public struct RowReducer: ValueReducer { - private let _fetch: (Database) throws -> Row? - private var previousRow: Row?? - - init(fetch: @escaping (Database) throws -> Row?) { - self._fetch = fetch - } - - public func fetch(_ db: Database) throws -> Row? { - return try _fetch(db) - } - - public mutating func value(_ row: Row?) -> Row?? { - if let previousRow = previousRow, previousRow == row { - // Don't notify consecutive identical rows - return nil - } - self.previousRow = row - return row - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation.swift deleted file mode 100755 index c263e73..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObservation.swift +++ /dev/null @@ -1,361 +0,0 @@ -import Dispatch - -// MARK: - ValueScheduling - -/// ValueScheduling controls how ValueObservation schedules the notifications -/// of fresh values to your application. -public enum ValueScheduling { - /// All values are notified on the main queue. - /// - /// If the observation starts on the main queue, an initial value is - /// notified right upon subscription, synchronously: - /// - /// // On main queue - /// let observation = ValueObservation.trackingAll(Player.all()) - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("fresh players: \(players)") - /// } - /// // <- here "fresh players" is already printed. - /// - /// If the observation does not start on the main queue, an initial value - /// is also notified on the main queue, but asynchronously: - /// - /// // Not on the main queue: "fresh players" is eventually printed - /// // on the main queue. - /// let observation = ValueObservation.trackingAll(Player.all()) - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("fresh players: \(players)") - /// } - /// - /// When the database changes, fresh values are asynchronously notified on - /// the main queue: - /// - /// // Eventually prints "fresh players" on the main queue - /// try dbQueue.write { db in - /// try Player(...).insert(db) - /// } - case mainQueue - - /// All values are asychronously notified on the specified queue. - /// - /// An initial value is fetched and notified if `startImmediately` - /// is true. - case async(onQueue: DispatchQueue, startImmediately: Bool) - - /// Values are not all notified on the same dispatch queue. - /// - /// If `startImmediately` is true, an initial value is notified right upon - /// subscription, synchronously, on the dispatch queue which starts - /// the observation. - /// - /// // On any queue - /// var observation = ValueObservation.trackingAll(Player.all()) - /// observation.scheduling = .unsafe(startImmediately: true) - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("fresh players: \(players)") - /// } - /// // <- here "fresh players" is already printed. - /// - /// When the database changes, other values are notified on - /// unspecified queues. - case unsafe(startImmediately: Bool) -} - -// MARK: - ValueObservation - -/// ValueObservation tracks changes in the results of database requests, and -/// notifies fresh values whenever the database changes. -/// -/// For example: -/// -/// let observation = ValueObservation.trackingAll(Player.all) -/// let observer = try observation.start(in: dbQueue) { players: [Player] in -/// print("Players have changed.") -/// } -public struct ValueObservation { - /// A closure that is evaluated when the observation starts, and returns - /// the observed database region. - var observedRegion: (Database) throws -> DatabaseRegion - - /// The reducer is created when observation starts, and is triggered upon - /// each database change in *observedRegion*. - var makeReducer: (Database) throws -> Reducer - - /// Default is false. Set this property to true when the observation - /// requires write access in order to fetch fresh values. Fetches are then - /// wrapped inside a savepoint. - /// - /// Don't set this flag to true unless you really need it. A read/write - /// observation is less efficient than a read-only observation. - public var requiresWriteAccess: Bool = false - - /// `scheduling` controls how fresh values are notified. Default - /// is `.mainQueue`. - /// - /// - `.mainQueue`: all values are notified on the main queue. - /// - /// If the observation starts on the main queue, an initial value is - /// notified right upon subscription, synchronously:: - /// - /// // On main queue - /// let observation = ValueObservation.trackingAll(Player.all()) - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("fresh players: \(players)") - /// } - /// // <- here "fresh players" is already printed. - /// - /// If the observation does not start on the main queue, an initial - /// value is also notified on the main queue, but asynchronously: - /// - /// // Not on the main queue: "fresh players" is eventually printed - /// // on the main queue. - /// let observation = ValueObservation.trackingAll(Player.all()) - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("fresh players: \(players)") - /// } - /// - /// When the database changes, fresh values are asynchronously notified: - /// - /// // Eventually prints "fresh players" on the main queue - /// try dbQueue.write { db in - /// try Player(...).insert(db) - /// } - /// - /// - `.onQueue(_:startImmediately:)`: all values are asychronously notified - /// on the specified queue. - /// - /// An initial value is fetched and notified if `startImmediately` - /// is true. - /// - /// - `unsafe(startImmediately:)`: values are not all notified on the same - /// dispatch queue. - /// - /// If `startImmediately` is true, an initial value is notified right - /// upon subscription, synchronously, on the dispatch queue which starts - /// the observation. - /// - /// // On any queue - /// var observation = ValueObservation.trackingAll(Player.all()) - /// observation.scheduling = .unsafe(startImmediately: true) - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("fresh players: \(players)") - /// } - /// // <- here "fresh players" is already printed. - /// - /// When the database changes, other values are notified on - /// unspecified queues. - public var scheduling: ValueScheduling = .mainQueue - - /// The dispatch queue where change callbacks are called. - var notificationQueue: DispatchQueue? { - switch scheduling { - case .mainQueue: - return DispatchQueue.main - case let .async(onQueue: queue, startImmediately: _): - return queue - case .unsafe: - return nil - } - } - - // Not public because we foster DatabaseRegionConvertible. - // See ValueObservation.tracking(_:reducer:) - init( - tracking region: @escaping (Database) throws -> DatabaseRegion, - reducer: @escaping (Database) throws -> Reducer) - { - self.observedRegion = { db in - // Remove views from the observed region. - // - // We can do it because we are only interested in modifications in - // actual tables. And we want to do it because we have a fast path - // for simple regions that span a single table. - let views = try db.schema().names(ofType: .view) - return try region(db).ignoring(views) - } - self.makeReducer = reducer - } -} - -extension ValueObservation where Reducer: ValueReducer { - - // MARK: - Starting Observation - - /// Starts the value observation in the provided database reader (such as - /// a database queue or database pool), and returns a transaction observer. - /// - /// - parameter reader: A DatabaseReader. - /// - parameter onError: A closure that is provided eventual errors that - /// happen during observation - /// - parameter onChange: A closure that is provided fresh values - /// - returns: a TransactionObserver - public func start( - in reader: DatabaseReader, - onError: ((Error) -> Void)? = nil, - onChange: @escaping (Reducer.Value) -> Void) throws -> TransactionObserver - { - return try reader.add(observation: self, onError: onError, onChange: onChange) - } -} - -extension ValueObservation { - - // MARK: - Creating ValueObservation from ValueReducer - - /// Returns a ValueObservation which observes *regions*, and notifies the - /// values returned by the *reducer* whenever one of the observed - /// regions is modified by a database transaction. - /// - /// This method is the most fundamental way to create a ValueObservation. - /// - /// For example, this observation counts the number of a times the player - /// table is modified: - /// - /// var count = 0 - /// let reducer = AnyValueReducer( - /// fetch: { _ in /* don't fetch anything */ }, - /// value: { _ -> Int? in - /// defer { count += 1 } - /// return count }) - /// let observation = ValueObservation.tracking(Player.all(), reducer: { db in reducer }) - /// let observer = observation.start(in: dbQueue) { count: Int in - /// print("Players have been modified \(count) times.") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter regions: A list of observed regions. - /// - parameter reducer: A reducer that turns database changes in the - /// modified regions into fresh values. Currently only reducers that adopt - /// the ValueReducer protocol are supported. - public static func tracking( - _ regions: DatabaseRegionConvertible..., - reducer: @escaping (Database) throws -> Reducer) - -> ValueObservation - { - return ValueObservation.tracking(regions, reducer: reducer) - } - - /// Returns a ValueObservation which observes *regions*, and notifies the - /// values returned by the *reducer* whenever one of the observed - /// regions is modified by a database transaction. - /// - /// This method is the most fundamental way to create a ValueObservation. - /// - /// For example, this observation counts the number of a times the player - /// table is modified: - /// - /// var count = 0 - /// let reducer = AnyValueReducer( - /// fetch: { _ in /* don't fetch anything */ }, - /// value: { _ -> Int? in - /// defer { count += 1 } - /// return count }) - /// let observation = ValueObservation.tracking([Player.all()], reducer: { db in reducer }) - /// let observer = observation.start(in: dbQueue) { count: Int in - /// print("Players have been modified \(count) times.") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter regions: A list of observed regions. - /// - parameter reducer: A reducer that turns database changes in the - /// modified regions into fresh values. Currently only reducers that adopt - /// the ValueReducer protocol are supported. - public static func tracking( - _ regions: [DatabaseRegionConvertible], - reducer: @escaping (Database) throws -> Reducer) - -> ValueObservation - { - return ValueObservation( - tracking: DatabaseRegion.union(regions), - reducer: reducer) - } -} - -extension ValueObservation where Reducer == Void { - - // MARK: - Creating ValueObservation from Fetch Closures - - /// Creates a ValueObservation which observes *regions*, and notifies the - /// values returned by the *fetch* closure whenever one of the observed - /// regions is modified by a database transaction. - /// - /// For example: - /// - /// let observation = ValueObservation.tracking( - /// Player.all(), - /// fetch: { db in return try Player.fetchAll(db) }) - /// - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("Players have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter regions: A list of observed regions. - /// - parameter fetch: A closure that fetches a value. - public static func tracking( - _ regions: DatabaseRegionConvertible..., - fetch: @escaping (Database) throws -> Value) - -> ValueObservation> - { - return ValueObservation.tracking(regions, fetch: fetch) - } - - /// Creates a ValueObservation which observes *regions*, and notifies the - /// values returned by the *fetch* closure whenever one of the observed - /// regions is modified by a database transaction. - /// - /// For example: - /// - /// let observation = ValueObservation.tracking( - /// [Player.all()], - /// fetch: { db in return try Player.fetchAll(db) }) - /// - /// let observer = try observation.start(in: dbQueue) { players: [Player] in - /// print("Players have changed") - /// } - /// - /// The returned observation has the default configuration: - /// - /// - When started with the `start(in:onError:onChange:)` method, a fresh - /// value is immediately notified on the main queue. - /// - Upon subsequent database changes, fresh values are notified on the - /// main queue. - /// - The observation lasts until the observer returned by - /// `start` is deallocated. - /// - /// - parameter regions: A list of observed regions. - /// - parameter fetch: A closure that fetches a value. - public static func tracking( - _ regions: [DatabaseRegionConvertible], - fetch: @escaping (Database) throws -> Value) - -> ValueObservation> - { - return ValueObservation>( - tracking: DatabaseRegion.union(regions), - reducer: { _ in RawValueReducer(fetch) }) - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObserver.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObserver.swift deleted file mode 100755 index a25e778..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueObserver.swift +++ /dev/null @@ -1,87 +0,0 @@ -import Foundation - -/// Support for ValueObservation. -/// See DatabaseWriter.add(observation:onError:onChange:) -class ValueObserver: TransactionObserver { - /* private */ let region: DatabaseRegion // Internal for testability - private var reducer: Reducer - private let fetch: (Database, Reducer) -> DatabaseFuture - private let notificationQueue: DispatchQueue? - private let onError: ((Error) -> Void)? - private let onChange: (Reducer.Value) -> Void - private let reduceQueue: DispatchQueue - private var isChanged = false - - init( - region: DatabaseRegion, - reducer: Reducer, - configuration: Configuration, - fetch: @escaping (Database, Reducer) -> DatabaseFuture, - notificationQueue: DispatchQueue?, - onError: ((Error) -> Void)?, - onChange: @escaping (Reducer.Value) -> Void) - { - self.region = region - self.reducer = reducer - self.fetch = fetch - self.notificationQueue = notificationQueue - self.onChange = onChange - self.onError = onError - self.reduceQueue = configuration.makeDispatchQueue(defaultLabel: "GRDB", purpose: "ValueObservation.reducer") - } - - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { - return region.isModified(byEventsOfKind: eventKind) - } - - func databaseDidChange(with event: DatabaseEvent) { - if region.isModified(by: event) { - isChanged = true - stopObservingDatabaseChangesUntilNextTransaction() - } - } - - func databaseDidCommit(_ db: Database) { - guard isChanged else { return } - isChanged = false - - // Grab future fetched values from the database writer queue - let future = fetch(db, reducer) - - // Wait for future fetched values in reduceQueue. This guarantees: - // - that notifications have the same ordering as transactions. - // - that expensive reduce operations are computed without blocking - // any database dispatch queue. - reduceQueue.async { [weak self] in - // Never ever retain self so that notifications stop when self - // is deallocated by the user. - do { - if let value = try self?.reducer.value(future.wait()) { - if let queue = self?.notificationQueue { - queue.async { - self?.onChange(value) - } - } else { - self?.onChange(value) - } - } - } catch { - guard self?.onError != nil else { - // TODO: how can we let the user know about the error? - return - } - if let queue = self?.notificationQueue { - queue.async { - self?.onError?(error) - } - } else { - self?.onError?(error) - } - } - } - } - - func databaseDidRollback(_ db: Database) { - isChanged = false - } -} diff --git a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueReducer.swift b/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueReducer.swift deleted file mode 100755 index 198e3af..0000000 --- a/Example/Pods/GRDB.swift/GRDB/ValueObservation/ValueReducer.swift +++ /dev/null @@ -1,92 +0,0 @@ -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// The ValueReducer protocol supports ValueObservation. -public protocol ValueReducer { - /// The type of fetched database values - associatedtype Fetched - - /// The type of observed values - associatedtype Value - - /// Feches database values upon changes in an observed database region. - func fetch(_ db: Database) throws -> Fetched - - /// Transforms a fetched value into an eventual observed value. Returns nil - /// when observer should not be notified. - /// - /// This method runs inside a private dispatch queue. - mutating func value(_ fetched: Fetched) -> Value? -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A type-erased ValueReducer. -/// -/// An AnyValueReducer forwards its operations to an underlying reducer, -/// hiding its specifics. -public struct AnyValueReducer: ValueReducer { - private var _fetch: (Database) throws -> Fetched - private var _value: (Fetched) -> Value? - - /// Creates a reducer whose `fetch(_:)` and `value(_:)` methods wrap and - /// forward operations the argument closures. - /// - /// For example, this reducer counts the number of a times the player table - /// is modified: - /// - /// var count = 0 - /// let reducer = AnyValueReducer( - /// fetch: { _ in }, - /// value: { _ -> Int? in - /// count += 1 - /// return count - /// }) - /// let observer = ValueObservation - /// .tracking(Player.all(), reducer: reducer) - /// .start(in: dbQueue) { count: Int in - /// print("Players have been modified \(count) times.") - /// } - public init(fetch: @escaping (Database) throws -> Fetched, value: @escaping (Fetched) -> Value?) { - self._fetch = fetch - self._value = value - } - - /// Creates a reducer that wraps and forwards operations to `reducer`. - public init(_ reducer: Base) where Base.Fetched == Fetched, Base.Value == Value { - var reducer = reducer - self._fetch = { try reducer.fetch($0) } - self._value = { reducer.value($0) } - } - - /// :nodoc: - public func fetch(_ db: Database) throws -> Fetched { - return try _fetch(db) - } - - /// :nodoc: - public func value(_ fetched: Fetched) -> Value? { - return _value(fetched) - } -} - -/// [**Experimental**](http://github.com/groue/GRDB.swift#what-are-experimental-features) -/// -/// A reducer which outputs raw values. -/// -/// :nodoc: -public struct RawValueReducer: ValueReducer { - private let _fetch: (Database) throws -> Value - - public init(_ fetch: @escaping (Database) throws -> Value) { - self._fetch = fetch - } - - public func fetch(_ db: Database) throws -> Value { - return try _fetch(db) - } - - public func value(_ fetched: Value) -> Value? { - return fetched - } -} - diff --git a/Example/Pods/GRDB.swift/LICENSE b/Example/Pods/GRDB.swift/LICENSE deleted file mode 100755 index bd480b0..0000000 --- a/Example/Pods/GRDB.swift/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (C) 2019 Gwendal Roué - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Example/Pods/GRDB.swift/README.md b/Example/Pods/GRDB.swift/README.md deleted file mode 100755 index 850fdf0..0000000 --- a/Example/Pods/GRDB.swift/README.md +++ /dev/null @@ -1,8709 +0,0 @@ -GRDB 4 [![Swift 4.2](https://img.shields.io/badge/swift-4.2-orange.svg?style=flat)](https://developer.apple.com/swift/) [![Swift 5](https://img.shields.io/badge/swift-5-orange.svg?style=flat)](https://developer.apple.com/swift/) [![Platforms](https://img.shields.io/cocoapods/p/GRDB.swift.svg)](https://developer.apple.com/swift/) [![License](https://img.shields.io/github/license/groue/GRDB.swift.svg?maxAge=2592000)](/LICENSE) [![Build Status](https://travis-ci.org/groue/GRDB.swift.svg?branch=master)](https://travis-ci.org/groue/GRDB.swift) -========== - -### A toolkit for SQLite databases, with a focus on application development - ---- - -**Latest release**: May 25, 2019 • version 4.0.1 • [CHANGELOG](CHANGELOG.md) • [Migrating From GRDB 3 to GRDB 4](Documentation/GRDB3MigrationGuide.md) - -**Requirements**: iOS 9.0+ / macOS 10.9+ / watchOS 2.0+ • Swift 4.2+ / Xcode 10.0+ - -| Swift version | GRDB version | -| ------------- | ----------------------------------------------------------- | -| **Swift 5** | **v4.0.1** | -| **Swift 4.2** | **v4.0.1** | -| Swift 4.1 | [v3.7.0](https://github.com/groue/GRDB.swift/tree/v3.7.0) | -| Swift 4 | [v2.10.0](https://github.com/groue/GRDB.swift/tree/v2.10.0) | -| Swift 3.2 | [v1.3.0](https://github.com/groue/GRDB.swift/tree/v1.3.0) | -| Swift 3.1 | [v1.3.0](https://github.com/groue/GRDB.swift/tree/v1.3.0) | -| Swift 3 | [v1.0](https://github.com/groue/GRDB.swift/tree/v1.0) | -| Swift 2.3 | [v0.81.2](https://github.com/groue/GRDB.swift/tree/v0.81.2) | -| Swift 2.2 | [v0.80.2](https://github.com/groue/GRDB.swift/tree/v0.80.2) | - -**Contact**: - -- Release announcements and usage tips: follow [@groue](http://twitter.com/groue) on Twitter. -- Report bugs in a [Github issue](https://github.com/groue/GRDB.swift/issues/new). Make sure you check the [existing issues](https://github.com/groue/GRDB.swift/issues?q=is%3Aopen) first. -- A question? Looking for advice? Do you wonder how to contribute? Fancy a chat? Go to the [GRDB forums](https://forums.swift.org/c/related-projects/grdb), or open a [Github issue](https://github.com/groue/GRDB.swift/issues/new). - - -## What is this? - -GRDB provides raw access to SQL and advanced SQLite features, because one sometimes enjoys a sharp tool. It has robust concurrency primitives, so that multi-threaded applications can efficiently use their databases. It grants your application models with persistence and fetching methods, so that you don't have to deal with SQL and raw database rows when you don't want to. - -Compared to [SQLite.swift](http://github.com/stephencelis/SQLite.swift) or [FMDB](http://github.com/ccgus/fmdb), GRDB can spare you a lot of glue code. Compared to [Core Data](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/) or [Realm](http://realm.io), it can simplify your multi-threaded applications. - -It comes with [up-to-date documentation](#documentation), [general guides](#general-guides--good-practices), and it is [fast](https://github.com/groue/GRDB.swift/wiki/Performance). - -See [Why Adopt GRDB?](Documentation/WhyAdoptGRDB.md) if you are looking for your favorite database library. - - ---- - -

- Features • - Usage • - Installation • - Documentation • - Demo Application • - FAQ -

- ---- - - -## Features - -GRDB ships with: - -- [Access to raw SQL and SQLite](#sqlite-api) -- [Records](#records): Fetching and persistence methods for your custom structs and class hierarchies. -- [Query Interface](#the-query-interface): A swift way to avoid the SQL language. -- [Associations](Documentation/AssociationsBasics.md): Relations and joins between record types. -- [WAL Mode Support](#database-pools): Extra performance for multi-threaded applications. -- [Migrations](#migrations): Transform your database as your application evolves. -- [Database Observation](#database-changes-observation): Observe database changes and transactions. -- [Full-Text Search](#full-text-search) -- [Encryption](#encryption) -- [Support for Custom SQLite Builds](Documentation/CustomSQLiteBuilds.md) - -Companion libraries that enhance and extend GRDB: - -- [RxGRDB]: track database changes in a reactive way, with [RxSwift](https://github.com/ReactiveX/RxSwift). -- [GRDBObjc](https://github.com/groue/GRDBObjc): FMDB-compatible bindings to GRDB. - - -## Usage - -
- Connect to an SQLite database - -```swift -import GRDB - -// Simple database connection -let dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite") - -// Enhanced multithreading based on SQLite's WAL mode -let dbPool = try DatabasePool(path: "/path/to/database.sqlite") -``` - -See [Database Connections](#database-connections) - -
- -
- Execute SQL statements - -```swift -try dbQueue.write { db in - try db.execute(sql: """ - CREATE TABLE place ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - title TEXT NOT NULL, - favorite BOOLEAN NOT NULL DEFAULT 0, - latitude DOUBLE NOT NULL, - longitude DOUBLE NOT NULL) - """) - - try db.execute(sql: """ - INSERT INTO place (title, favorite, latitude, longitude) - VALUES (?, ?, ?, ?) - """, arguments: ["Paris", true, 48.85341, 2.3488]) - - let parisId = db.lastInsertedRowID - - // Swift 5 only - try db.execute(literal: """ - INSERT INTO place (title, favorite, latitude, longitude) - VALUES (\("Madrid"), \(true), \(40.41678), \(-3.70379)) - """) -} -``` - -See [Executing Updates](#executing-updates) - -
- -
- Fetch database rows and values - -```swift -try dbQueue.read { db in - // Fetch database rows - let rows = try Row.fetchCursor(db, sql: "SELECT * FROM place") - while let row = try rows.next() { - let title: String = row["title"] - let isFavorite: Bool = row["favorite"] - let coordinate = CLLocationCoordinate2D( - latitude: row["latitude"], - longitude: row["longitude"]) - } - - // Fetch values - let placeCount = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM place")! // Int - let placeTitles = try String.fetchAll(db, sql: "SELECT title FROM place") // [String] -} - -let placeCount = try dbQueue.read { db in - try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM place")! -} -``` - -See [Fetch Queries](#fetch-queries) - -
- -
- Store custom models aka "records" - -```swift -struct Place { - var id: Int64? - var title: String - var isFavorite: Bool - var coordinate: CLLocationCoordinate2D -} - -// snip: turn Place into a "record" by adopting the protocols that -// provide fetching and persistence methods. - -try dbQueue.write { db in - // Create database table - try db.create(table: "place") { t in - t.autoIncrementedPrimaryKey("id") - t.column("title", .text).notNull() - t.column("favorite", .boolean).notNull().defaults(to: false) - t.column("longitude", .double).notNull() - t.column("latitude", .double).notNull() - } - - var berlin = Place( - id: nil, - title: "Berlin", - isFavorite: false, - coordinate: CLLocationCoordinate2D(latitude: 52.52437, longitude: 13.41053)) - - try berlin.insert(db) - berlin.id // some value - - berlin.isFavorite = true - try berlin.update(db) -} -``` - -See [Records](#records) - -
- -
- Fetch records and values with the Swift query interface - -```swift -try dbQueue.read { db in - // Place? - let paris = try Place.fetchOne(db, key: 1) - - // Place? - let berlin = try Place.filter(Column("title") == "Berlin").fetchOne(db) - - // [Place] - let favoritePlaces = try Place - .filter(Column("favorite") == true) - .order(Column("title")) - .fetchAll(db) - - // Int - let favoriteCount = try Place.filter(Column("favorite")).fetchCount(db) - - // SQL is always welcome - let places = try Place.fetchAll(db, sql: "SELECT * FROM place") -} -``` - -See the [Query Interface](#the-query-interface) - -
- -
- Be notified of database changes - -```swift -let request = Place.order(Column("title")) -try ValueObservation - .trackingAll(request) - .start(in: dbQueue) { (places: [Place]) in - print("Places have changed.") - } -``` - -See [Database Changes Observation](#database-changes-observation) - -
- - -Documentation -============= - -**GRDB runs on top of SQLite**: you should get familiar with the [SQLite FAQ](http://www.sqlite.org/faq.html). For general and detailed information, jump to the [SQLite Documentation](http://www.sqlite.org/docs.html). - -#### Reference - -- [GRDB Reference](http://groue.github.io/GRDB.swift/docs/4.0/index.html) (generated by [Jazzy](https://github.com/realm/jazzy)) - -#### Getting Started - -- [Installation](#installation) -- [Demo Application](#demo-application) -- [Database Connections](#database-connections): Connect to SQLite databases - -#### SQLite and SQL - -- [SQLite API](#sqlite-api): The low-level SQLite API • [executing updates](#executing-updates) • [fetch queries](#fetch-queries) • [SQL Interpolation] - -#### Records and the Query Interface - -- [Records](#records): Fetching and persistence methods for your custom structs and class hierarchies. -- [Query Interface](#the-query-interface): A swift way to generate SQL • [table creation](#database-schema) • [requests](#requests) - -#### Application Tools - -- [Migrations](#migrations): Transform your database as your application evolves. -- [Full-Text Search](#full-text-search): Perform efficient and customizable full-text searches. -- [Joined Queries Support](#joined-queries-support): Consume complex joined queries. -- [Database Changes Observation](#database-changes-observation): Observe database changes and transactions. -- [Encryption](#encryption): Encrypt your database with SQLCipher. -- [Backup](#backup): Dump the content of a database to another. - -#### Good to Know - -- [Avoiding SQL Injection](#avoiding-sql-injection) -- [Error Handling](#error-handling) -- [Unicode](#unicode) -- [Memory Management](#memory-management) -- [Data Protection](#data-protection) -- [Concurrency](#concurrency) -- [Performance](#performance) - -#### General Guides & Good Practices - -- :bulb: [Good Practices for Designing Record Types](Documentation/GoodPracticesForDesigningRecordTypes.md) -- :bulb: [Migrating From GRDB 2 to GRDB 3](Documentation/GRDB2MigrationGuide.md) -- :bulb: [Issues tagged "best practices"](https://github.com/groue/GRDB.swift/issues?q=is%3Aissue+label%3A%22best+practices%22) -- :question: [Issues tagged "question"](https://github.com/groue/GRDB.swift/issues?utf8=✓&q=is%3Aissue%20label%3Aquestion) -- :blue_book: [Why Adopt GRDB?](Documentation/WhyAdoptGRDB.md) -- :blue_book: [How to build an iOS application with SQLite and GRDB.swift](https://medium.com/@gwendal.roue/how-to-build-an-ios-application-with-sqlite-and-grdb-swift-d023a06c29b3) -- :blue_book: [Four different ways to handle SQLite concurrency](https://medium.com/@gwendal.roue/four-different-ways-to-handle-sqlite-concurrency-db3bcc74d00e) -- :blue_book: [Unexpected SQLite with Swift](https://hackernoon.com/unexpected-sqlite-with-swift-ddc6343bcbfc) - - -**[FAQ](#faq)** - -**[Sample Code](#sample-code)** - - -Installation -============ - -**The installation procedures below have GRDB use the version of SQLite that ships with the target operating system.** - -See [Encryption](#encryption) for the installation procedure of GRDB with SQLCipher. - -See [Custom SQLite builds](Documentation/CustomSQLiteBuilds.md) for the installation procedure of GRDB with a customized build of SQLite 3.27.2. - -See [Enabling FTS5 Support](#enabling-fts5-support) for the installation procedure of GRDB with support for the FTS5 full-text engine. - - -## CocoaPods - -[CocoaPods](http://cocoapods.org/) is a dependency manager for Xcode projects. To use GRDB with CocoaPods (version 1.2 or higher), specify in your `Podfile`: - -```ruby -use_frameworks! -pod 'GRDB.swift' -``` - - -## Swift Package Manager - -The [Swift Package Manager](https://swift.org/package-manager/) automates the distribution of Swift code. To use GRDB with SPM, add a dependency to your `Package.swift` file: - -```swift -let package = Package( - dependencies: [ - .package(url: "https://github.com/groue/GRDB.swift.git", from: "4.0.1") - ] -) -``` - -Note that Linux is not currently supported. - - -## Carthage - -[Carthage](https://github.com/Carthage/Carthage) is **unsupported**. For some context about this decision, see [#433](https://github.com/groue/GRDB.swift/issues/433). - - -## Manually - -1. [Download](https://github.com/groue/GRDB.swift/releases/tag/v4.0.1) a copy of GRDB, or clone its repository and make sure you use the latest tagged version with the `git checkout v4.0.1` command. - -2. Embed the `GRDB.xcodeproj` project in your own project. - -3. Add the `GRDBOSX`, `GRDBiOS`, or `GRDBWatchOS` target in the **Target Dependencies** section of the **Build Phases** tab of your application target (extension target for WatchOS). - -4. Add the `GRDB.framework` from the targetted platform to the **Embedded Binaries** section of the **General** tab of your application target (extension target for WatchOS). - -> :bulb: **Tip**: see the [Demo Application](DemoApps/GRDBDemoiOS/README.md) for an example of such integration. - - -Demo Application -================ - -The repository comes with a [demo application](DemoApps/GRDBDemoiOS/README.md) that shows you: - -- how to setup a database in an iOS app -- how to define a simple [Codable Record](#codable-records) -- how to track database changes with [ValueObservation] and [FetchedRecordsController]. - - -Database Connections -==================== - -GRDB provides two classes for accessing SQLite databases: `DatabaseQueue` and `DatabasePool`: - -```swift -import GRDB - -// Pick one: -let dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite") -let dbPool = try DatabasePool(path: "/path/to/database.sqlite") -``` - -The differences are: - -- Database pools allow concurrent database accesses (this can improve the performance of multithreaded applications). -- Database pools open your SQLite database in the [WAL mode](https://www.sqlite.org/wal.html) (unless read-only). -- Database queues support [in-memory databases](https://www.sqlite.org/inmemorydb.html). - -**If you are not sure, choose DatabaseQueue.** You will always be able to switch to DatabasePool later. - -- [Database Queues](#database-queues) -- [Database Pools](#database-pools) - - -## Database Queues - -**Open a database queue** with the path to a database file: - -```swift -import GRDB - -let dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite") -let inMemoryDBQueue = DatabaseQueue() -``` - -SQLite creates the database file if it does not already exist. The connection is closed when the database queue gets deallocated. - -**A database queue can be used from any thread.** The `write` and `read` methods are synchronous, and block the current thread until your database statements are executed in a protected dispatch queue: - -```swift -// Modify the database: -try dbQueue.write { db in - try db.create(table: "place") { ... } - try Place(...).insert(db) -} - -// Read values: -try dbQueue.read { db in - let places = try Place.fetchAll(db) - let placeCount = try Place.fetchCount(db) -} -``` - -Database access methods can return values: - -```swift -let placeCount = try dbQueue.read { db in - try Place.fetchCount(db) -} - -let newPlaceCount = try dbQueue.write { db -> Int in - try Place(...).insert(db) - return try Place.fetchCount(db) -} -``` - -**A database queue serializes accesses to the database**, which means that there is never more than one thread that uses the database. - -- When you don't need to modify the database, prefer the `read` method. It prevents any modification to the database. - -- The `write` method wraps your database statements in a transaction that commits if and only if no error occurs. On the first unhandled error, all changes are reverted, the whole transaction is rollbacked, and the error is rethrown. - - When precise transaction handling is required, see [Transactions and Savepoints](#transactions-and-savepoints). - -**A database queue needs your application to follow rules in order to deliver its safety guarantees.** Please refer to the [Concurrency](#concurrency) chapter. - -> :bulb: **Tip**: see the [Demo Application](DemoApps/GRDBDemoiOS/README.md) for a sample code that sets up a database queue on iOS. - - -### DatabaseQueue Configuration - -```swift -var config = Configuration() -config.readonly = true -config.foreignKeysEnabled = true // Default is already true -config.trace = { print($0) } // Prints all SQL statements -config.label = "MyDatabase" // Useful when your app opens multiple databases - -let dbQueue = try DatabaseQueue( - path: "/path/to/database.sqlite", - configuration: config) -``` - -See [Configuration](http://groue.github.io/GRDB.swift/docs/4.0/Structs/Configuration.html) for more details. - - -## Database Pools - -**A database pool allows concurrent database accesses.** - -```swift -import GRDB -let dbPool = try DatabasePool(path: "/path/to/database.sqlite") -``` - -SQLite creates the database file if it does not already exist. The connection is closed when the database pool gets deallocated. - -> :point_up: **Note**: unless read-only, a database pool opens your database in the SQLite "WAL mode". The WAL mode does not fit all situations. Please have a look at https://www.sqlite.org/wal.html. - -**A database pool can be used from any thread.** The `write` and `read` methods are synchronous, and block the current thread until your database statements are executed in a protected dispatch queue: - -```swift -// Modify the database: -try dbPool.write { db in - try db.create(table: "place") { ... } - try Place(...).insert(db) -} - -// Read values: -try dbPool.read { db in - let places = try Place.fetchAll(db) - let placeCount = try Place.fetchCount(db) -} -``` - -Database access methods can return values: - -```swift -let placeCount = try dbPool.read { db in - try Place.fetchCount(db) -} - -let newPlaceCount = try dbPool.write { db -> Int in - try Place(...).insert(db) - return try Place.fetchCount(db) -} -``` - -**Database pools allow several threads to access the database at the same time:** - -- When you don't need to modify the database, prefer the `read` method, because several threads can perform reads in parallel. - - Reads are generally non-blocking, unless the maximum number of concurrent reads has been reached. In this case, a read has to wait for another read to complete. That maximum number can be [configured](#databasepool-configuration). - -- Reads are guaranteed an immutable view of the last committed state of the database, regardless of concurrent writes. This kind of isolation is called [snapshot isolation](https://sqlite.org/isolation.html). - -- Unlike reads, writes are serialized. There is never more than a single thread that is writing into the database. - -- The `write` method wraps your database statements in a transaction that commits if and only if no error occurs. On the first unhandled error, all changes are reverted, the whole transaction is rollbacked, and the error is rethrown. - - When precise transaction handling is required, see [Transactions and Savepoints](#transactions-and-savepoints). - -- Database pools can take [snapshots](#database-snapshots) of the database. - -**A database pool needs your application to follow rules in order to deliver its safety guarantees.** See the [Concurrency](#concurrency) chapter for more details about database pools, how they differ from database queues, and advanced use cases. - -> :bulb: **Tip**: see the [Demo Application](DemoApps/GRDBDemoiOS/README.md) for a sample code that sets up a database queue on iOS, and just replace DatabaseQueue with DatabasePool. - - -### DatabasePool Configuration - -```swift -var config = Configuration() -config.readonly = true -config.foreignKeysEnabled = true // Default is already true -config.trace = { print($0) } // Prints all SQL statements -config.label = "MyDatabase" // Useful when your app opens multiple databases -config.maximumReaderCount = 10 // The default is 5 - -let dbPool = try DatabasePool( - path: "/path/to/database.sqlite", - configuration: config) -``` - -See [Configuration](http://groue.github.io/GRDB.swift/docs/4.0/Structs/Configuration.html) for more details. - - -Database pools are more memory-hungry than database queues. See [Memory Management](#memory-management) for more information. - - -SQLite API -========== - -**In this section of the documentation, we will talk SQL.** Jump to the [query interface](#the-query-interface) if SQL is not your cup of tea. - -- [Executing Updates](#executing-updates) -- [Fetch Queries](#fetch-queries) - - [Fetching Methods](#fetching-methods) - - [Row Queries](#row-queries) - - [Value Queries](#value-queries) -- [Values](#values) - - [Data](#data-and-memory-savings) - - [Date and DateComponents](#date-and-datecomponents) - - [NSNumber and NSDecimalNumber](#nsnumber-and-nsdecimalnumber) - - [Swift enums](#swift-enums) - - [Custom Value Types](#custom-value-types) -- [Transactions and Savepoints](#transactions-and-savepoints) -- [SQL Interpolation] - -Advanced topics: - -- [Prepared Statements](#prepared-statements) -- [Custom SQL Functions and Aggregates](#custom-sql-functions-and-aggregates) -- [Database Schema Introspection](#database-schema-introspection) -- [Row Adapters](#row-adapters) -- [Raw SQLite Pointers](#raw-sqlite-pointers) - - -## Executing Updates - -Once granted with a [database connection](#database-connections), the `execute` method executes the SQL statements that do not return any database row, such as `CREATE TABLE`, `INSERT`, `DELETE`, `ALTER`, etc. - -For example: - -```swift -try dbQueue.write { db in - try db.execute(sql: """ - CREATE TABLE player ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - score INT) - """) - - try db.execute( - sql: "INSERT INTO player (name, score) VALUES (?, ?)", - arguments: ["Barbara", 1000]) - - try db.execute( - sql: "UPDATE player SET score = :score WHERE id = :id", - arguments: ["score": 1000, "id": 1]) - } -} -``` - -The `?` and colon-prefixed keys like `:score` in the SQL query are the **statements arguments**. You pass arguments with arrays or dictionaries, as in the example above. See [Values](#values) for more information on supported arguments types (Bool, Int, String, Date, Swift enums, etc.), and [StatementArguments](http://groue.github.io/GRDB.swift/docs/4.0/Structs/StatementArguments.html) for a detailed documentation of SQLite arguments. - -In Swift 5, you can embed query arguments right into your SQL queries, with the `literal` argument label, as in the example below. See [SQL Interpolation] for more details. - -```swift -// Swift 5 -try dbQueue.write { db in - try db.execute(literal: """ - INSERT INTO player (name, score) - VALUES (\("O'Brien"), \(550)) - """) -} -``` - -**Never ever embed values directly in your raw SQL strings**. See [Avoiding SQL Injection](#avoiding-sql-injection) for more information: - -```swift -// WRONG: don't embed values in raw SQL strings -let id = 123 -let name = textField.text -try db.execute( - sql: "UPDATE player SET name = '\(name)' WHERE id = \(id)") - -// CORRECT: use SQL Interpolation (Swift 5) -try db.execute( - literal: "UPDATE player SET name = \(name) WHERE id = \(id)") - -// CORRECT: use arguments dictionary -try db.execute( - sql: "UPDATE player SET name = :name WHERE id = :id", - arguments: ["name": name, "id": id]) - -// CORRECT: use arguments array -try db.execute( - sql: "UPDATE player SET name = ? WHERE id = ?", - arguments: [name, id]) -``` - -**Join multiple statements with a semicolon**: - -```swift -try db.execute(sql: """ - INSERT INTO player (name, score) VALUES (?, ?); - INSERT INTO player (name, score) VALUES (?, ?); - """, arguments: ["Arthur", 750, "Barbara", 1000]) - -// Swift 5 -try db.execute(literal: """ - INSERT INTO player (name, score) VALUES (\("Arthur"), \(750)); - INSERT INTO player (name, score) VALUES (\("Barbara"), \(1000)); - """) -``` - -When you want to make sure that a single statement is executed, use [Prepared Statements](#prepared-statements). - -**After an INSERT statement**, you can get the row ID of the inserted row: - -```swift -try db.execute( - sql: "INSERT INTO player (name, score) VALUES (?, ?)", - arguments: ["Arthur", 1000]) -let playerId = db.lastInsertedRowID -``` - -Don't miss [Records](#records), that provide classic **persistence methods**: - -```swift -var player = Player(name: "Arthur", score: 1000) -try player.insert(db) -let playerId = player.id -``` - - -## Fetch Queries - -[Database connections](#database-connections) let you fetch database rows, plain values, and custom models aka "records". - -**Rows** are the raw results of SQL queries: - -```swift -try dbQueue.read { db in - if let row = try Row.fetchOne(db, sql: "SELECT * FROM wine WHERE id = ?", arguments: [1]) { - let name: String = row["name"] - let color: Color = row["color"] - print(name, color) - } -} -``` - - -**Values** are the Bool, Int, String, Date, Swift enums, etc. stored in row columns: - -```swift -try dbQueue.read { db in - let urls = try URL.fetchCursor(db, sql: "SELECT url FROM wine") - while let url = try urls.next() { - print(url) - } -} -``` - - -**Records** are your application objects that can initialize themselves from rows: - -```swift -let wines = try dbQueue.read { db in - try Wine.fetchAll(db, sql: "SELECT * FROM wine") -} -``` - -- [Fetching Methods](#fetching-methods) and [Cursors](#cursors) -- [Row Queries](#row-queries) -- [Value Queries](#value-queries) -- [Records](#records) - - -### Fetching Methods - -**Throughout GRDB**, you can always fetch *cursors*, *arrays*, or *single values* of any fetchable type (database [row](#row-queries), simple [value](#value-queries), or custom [record](#records)): - -```swift -try Row.fetchCursor(...) // A Cursor of Row -try Row.fetchAll(...) // [Row] -try Row.fetchOne(...) // Row? -``` - -- `fetchCursor` returns a **[cursor](#cursors)** over fetched values: - - ```swift - let rows = try Row.fetchCursor(db, sql: "SELECT ...") // A Cursor of Row - ``` - -- `fetchAll` returns an **array**: - - ```swift - let players = try Player.fetchAll(db, sql: "SELECT ...") // [Player] - ``` - -- `fetchOne` returns a **single optional value**, and consumes a single database row (if any). - - ```swift - let count = try Int.fetchOne(db, sql: "SELECT COUNT(*) ...") // Int? - ``` - - -### Cursors - -**Whenever you consume several rows from the database, you can fetch an Array, or a Cursor**. - -The `fetchAll()` method returns a regular Swift array, that you iterate like all other arrays: - -```swift -try dbQueue.read { db in - // [Player] - let players = try Player.fetchAll(db, sql: "SELECT ...") - for player in players { - // use player - } -} -``` - -Unlike arrays, cursors returned by `fetchCursor()` load their results step after step: - -```swift -try dbQueue.read { db in - // Cursor of Player - let players = try Player.fetchCursor(db, sql: "SELECT ...") - while let player = try players.next() { - // use player - } -} -``` - -Both arrays and cursors can iterate over database results. How do you choose one or the other? Look at the differences: - -- **Cursors can not be used on any thread**: you must consume a cursor on the dispatch queue it was created in. Particularly, don't extract a cursor out of a database access method: - - ```swift - // Wrong - let cursor = try dbQueue.read { db in - try Player.fetchCursor(db, ...) - } - while let player = try cursor.next() { ... } - ``` - - Conversely, arrays may be consumed on any thread: - - ```swift - // OK - let array = try dbQueue.read { db in - try Player.fetchAll(db, ...) - } - for player in array { ... } - ``` - -- **Cursors can be iterated only one time.** Arrays can be iterated many times. - -- **Cursors iterate database results in a lazy fashion**, and don't consume much memory. Arrays contain copies of database values, and may take a lot of memory when there are many fetched results. - -- **Cursors are granted with direct access to SQLite,** unlike arrays that have to take the time to copy database values. If you look after extra performance, you may prefer cursors over arrays. - -- **Cursors adopt the [Cursor](http://groue.github.io/GRDB.swift/docs/4.0/Protocols/Cursor.html) protocol, which looks a lot like standard [lazy sequences](https://developer.apple.com/reference/swift/lazysequenceprotocol) of Swift.** As such, cursors come with many convenience methods: `compactMap`, `contains`, `dropFirst`, `dropLast`, `drop(while:)`, `enumerated`, `filter`, `first`, `flatMap`, `forEach`, `joined`, `joined(separator:)`, `max`, `max(by:)`, `min`, `min(by:)`, `map`, `prefix`, `prefix(while:)`, `reduce`, `reduce(into:)`, `suffix`: - - ```swift - // Prints all Github links - try URL - .fetchCursor(db, sql: "SELECT url FROM link") - .filter { url in url.host == "github.com" } - .forEach { url in print(url) } - - // An efficient cursor of coordinates: - let locations = try Row. - .fetchCursor(db, sql: "SELECT latitude, longitude FROM place") - .map { row in - CLLocationCoordinate2D(latitude: row[0], longitude: row[1]) - } - - // Turn cursors into arrays or sets: - let array = try Array(cursor) - let set = try Set(cursor) - ``` - -- **Cursors are not Swift sequences.** That's because Swift sequences can't handle iteration errors, when reading SQLite results may fail at any time. SQL functions may throw errors. On iOS, [data protection](#data-protection) may block access to the database file in the background. On macOS, your application users may mess with the file system. - -- **Cursors require a little care**: - - - Don't modify the results during a cursor iteration: - - ```swift - // Undefined behavior - while let player = try players.next() { - try db.execute(sql: "DELETE ...") - } - ``` - - - Don't turn a cursor of `Row` into an array. You would not get the distinct rows you expect. To get a array of rows, use `Row.fetchAll(...)`. Generally speaking, make sure you copy a row whenever you extract it from a cursor for later use: `row.copy()`. - -If you don't see, or don't care about the difference, use arrays. If you care about memory and performance, use cursors when appropriate. - - -### Row Queries - -- [Fetching Rows](#fetching-rows) -- [Column Values](#column-values) -- [DatabaseValue](#databasevalue) -- [Rows as Dictionaries](#rows-as-dictionaries) - - -#### Fetching Rows - -Fetch **cursors** of rows, **arrays**, or **single** rows (see [fetching methods](#fetching-methods)): - -```swift -try dbQueue.read { db in - try Row.fetchCursor(db, sql: "SELECT ...", arguments: ...) // A Cursor of Row - try Row.fetchAll(db, sql: "SELECT ...", arguments: ...) // [Row] - try Row.fetchOne(db, sql: "SELECT ...", arguments: ...) // Row? - - let rows = try Row.fetchCursor(db, sql: "SELECT * FROM wine") - while let row = try rows.next() { - let name: String = row["name"] - let color: Color = row["color"] - print(name, color) - } -} - -let rows = try dbQueue.read { db in - try Row.fetchAll(db, sql: "SELECT * FROM player") -} -``` - -Arguments are optional arrays or dictionaries that fill the positional `?` and colon-prefixed keys like `:name` in the query: - -```swift -let rows = try Row.fetchAll(db, - sql: "SELECT * FROM player WHERE name = ?", - arguments: ["Arthur"]) - -let rows = try Row.fetchAll(db, - sql: "SELECT * FROM player WHERE name = :name", - arguments: ["name": "Arthur"]) -``` - -See [Values](#values) for more information on supported arguments types (Bool, Int, String, Date, Swift enums, etc.), and [StatementArguments](http://groue.github.io/GRDB.swift/docs/4.0/Structs/StatementArguments.html) for a detailed documentation of SQLite arguments. - -Unlike row arrays that contain copies of the database rows, row cursors are close to the SQLite metal, and require a little care: - -> :point_up: **Don't turn a cursor of `Row` into an array**. You would not get the distinct rows you expect. To get a array of rows, use `Row.fetchAll(...)`. Generally speaking, make sure you copy a row whenever you extract it from a cursor for later use: `row.copy()`. - - -#### Column Values - -**Read column values** by index or column name: - -```swift -let name: String = row[0] // 0 is the leftmost column -let name: String = row["name"] // Leftmost matching column - lookup is case-insensitive -let name: String = row[Column("name")] // Using query interface's Column -``` - -Make sure to ask for an optional when the value may be NULL: - -```swift -let name: String? = row["name"] -``` - -The `row[]` subscript returns the type you ask for. See [Values](#values) for more information on supported value types: - -```swift -let bookCount: Int = row["bookCount"] -let bookCount64: Int64 = row["bookCount"] -let hasBooks: Bool = row["bookCount"] // false when 0 - -let string: String = row["date"] // "2015-09-11 18:14:15.123" -let date: Date = row["date"] // Date -self.date = row["date"] // Depends on the type of the property. -``` - -You can also use the `as` type casting operator: - -```swift -row[...] as Int -row[...] as Int? -``` - -> :warning: **Warning**: avoid the `as!` and `as?` operators: -> -> ```swift -> if let int = row[...] as? Int { ... } // BAD - doesn't work -> if let int = row[...] as Int? { ... } // GOOD -> ``` - -Generally speaking, you can extract the type you need, provided it can be converted from the underlying SQLite value: - -- **Successful conversions include:** - - - All numeric SQLite values to all numeric Swift types, and Bool (zero is the only false boolean). - - Text SQLite values to Swift String. - - Blob SQLite values to Foundation Data. - - See [Values](#values) for more information on supported types (Bool, Int, String, Date, Swift enums, etc.) - -- **NULL returns nil.** - - ```swift - let row = try Row.fetchOne(db, sql: "SELECT NULL")! - row[0] as Int? // nil - row[0] as Int // fatal error: could not convert NULL to Int. - ``` - - There is one exception, though: the [DatabaseValue](#databasevalue) type: - - ```swift - row[0] as DatabaseValue // DatabaseValue.null - ``` - -- **Missing columns return nil.** - - ```swift - let row = try Row.fetchOne(db, sql: "SELECT 'foo' AS foo")! - row["missing"] as String? // nil - row["missing"] as String // fatal error: no such column: missing - ``` - - You can explicitly check for a column presence with the `hasColumn` method. - -- **Invalid conversions throw a fatal error.** - - ```swift - let row = try Row.fetchOne(db, sql: "SELECT 'Mom’s birthday'")! - row[0] as String // "Mom’s birthday" - row[0] as Date? // fatal error: could not convert "Mom’s birthday" to Date. - row[0] as Date // fatal error: could not convert "Mom’s birthday" to Date. - - let row = try Row.fetchOne(db, sql: "SELECT 256")! - row[0] as Int // 256 - row[0] as UInt8? // fatal error: could not convert 256 to UInt8. - row[0] as UInt8 // fatal error: could not convert 256 to UInt8. - ``` - - Those conversion fatal errors can be avoided with the [DatabaseValue](#databasevalue) type: - - ```swift - let row = try Row.fetchOne(db, sql: "SELECT 'Mom’s birthday'")! - let dbValue: DatabaseValue = row[0] - if dbValue.isNull { - // Handle NULL - } else if let date = Date.fromDatabaseValue(dbValue) { - // Handle valid date - } else { - // Handle invalid date - } - ``` - - This extra verbosity is the consequence of having to deal with an untrusted database: you may consider fixing the content of your database instead. See [Fatal Errors](#fatal-errors) for more information. - -- **SQLite has a weak type system, and provides [convenience conversions](https://www.sqlite.org/c3ref/column_blob.html) that can turn String to Int, Double to Blob, etc.** - - GRDB will sometimes let those conversions go through: - - ```swift - let rows = try Row.fetchCursor(db, sql: "SELECT '20 small cigars'") - while let row = try rows.next() { - row[0] as Int // 20 - } - ``` - - Don't freak out: those conversions did not prevent SQLite from becoming the immensely successful database engine you want to use. And GRDB adds safety checks described just above. You can also prevent those convenience conversions altogether by using the [DatabaseValue](#databasevalue) type. - - -#### DatabaseValue - -**DatabaseValue is an intermediate type between SQLite and your values, which gives information about the raw value stored in the database.** - -You get DatabaseValue just like other value types: - -```swift -let dbValue: DatabaseValue = row[0] -let dbValue: DatabaseValue? = row["name"] // nil if and only if column does not exist - -// Check for NULL: -dbValue.isNull // Bool - -// The stored value: -dbValue.storage.value // Int64, Double, String, Data, or nil - -// All the five storage classes supported by SQLite: -switch dbValue.storage { -case .null: print("NULL") -case .int64(let int64): print("Int64: \(int64)") -case .double(let double): print("Double: \(double)") -case .string(let string): print("String: \(string)") -case .blob(let data): print("Data: \(data)") -} -``` - -You can extract regular [values](#values) (Bool, Int, String, Date, Swift enums, etc.) from DatabaseValue with the [DatabaseValueConvertible.fromDatabaseValue()](#custom-value-types) method: - -```swift -let dbValue: DatabaseValue = row["bookCount"] -let bookCount = Int.fromDatabaseValue(dbValue) // Int? -let bookCount64 = Int64.fromDatabaseValue(dbValue) // Int64? -let hasBooks = Bool.fromDatabaseValue(dbValue) // Bool?, false when 0 - -let dbValue: DatabaseValue = row["date"] -let string = String.fromDatabaseValue(dbValue) // "2015-09-11 18:14:15.123" -let date = Date.fromDatabaseValue(dbValue) // Date? -``` - -`fromDatabaseValue` returns nil for invalid conversions: - -```swift -let row = try Row.fetchOne(db, sql: "SELECT 'Mom’s birthday'")! -let dbValue: DatabaseValue = row[0] -let string = String.fromDatabaseValue(dbValue) // "Mom’s birthday" -let int = Int.fromDatabaseValue(dbValue) // nil -let date = Date.fromDatabaseValue(dbValue) // nil -``` - - -#### Rows as Dictionaries - -Row adopts the standard [RandomAccessCollection](https://developer.apple.com/documentation/swift/randomaccesscollection) protocol, and can be seen as a dictionary of [DatabaseValue](#databasevalue): - -```swift -// All the (columnName, dbValue) tuples, from left to right: -for (columnName, dbValue) in row { - ... -} -``` - -**You can build rows from dictionaries** (standard Swift dictionaries and NSDictionary). See [Values](#values) for more information on supported types: - -```swift -let row: Row = ["name": "foo", "date": nil] -let row = Row(["name": "foo", "date": nil]) -let row = Row(/* [AnyHashable: Any] */) // nil if invalid dictionary -``` - -Yet rows are not real dictionaries: they may contain duplicate columns: - -```swift -let row = try Row.fetchOne(db, sql: "SELECT 1 AS foo, 2 AS foo")! -row.columnNames // ["foo", "foo"] -row.databaseValues // [1, 2] -row["foo"] // 1 (leftmost matching column) -for (columnName, dbValue) in row { ... } // ("foo", 1), ("foo", 2) -``` - -**When you build a dictionary from a row**, you have to disambiguate identical columns, and choose how to present database values. For example: - -- A `[String: DatabaseValue]` dictionary that keeps leftmost value in case of duplicated column name: - - ```swift - let dict = Dictionary(row, uniquingKeysWith: { (left, _) in left }) - ``` - -- A `[String: AnyObject]` dictionary which keeps rightmost value in case of duplicated column name. This dictionary is identical to FMResultSet's resultDictionary from FMDB. It contains NSNull values for null columns, and can be shared with Objective-C: - - ```swift - let dict = Dictionary( - row.map { (column, dbValue) in - (column, dbValue.storage.value as AnyObject) - }, - uniquingKeysWith: { (_, right) in right }) - ``` - -- A `[String: Any]` dictionary that can feed, for example, JSONSerialization: - - ```swift - let dict = Dictionary( - row.map { (column, dbValue) in - (column, dbValue.storage.value) - }, - uniquingKeysWith: { (left, _) in left }) - ``` - -See the documentation of [`Dictionary.init(_:uniquingKeysWith:)`](https://developer.apple.com/documentation/swift/dictionary/2892961-init) for more information. - - -### Value Queries - -Instead of rows, you can directly fetch **[values](#values)**. Like rows, fetch them as **cursors**, **arrays**, or **single** values (see [fetching methods](#fetching-methods)). Values are extracted from the leftmost column of the SQL queries: - -```swift -try dbQueue.read { db in - try Int.fetchCursor(db, sql: "SELECT ...", arguments: ...) // A Cursor of Int - try Int.fetchAll(db, sql: "SELECT ...", arguments: ...) // [Int] - try Int.fetchOne(db, sql: "SELECT ...", arguments: ...) // Int? - - // When database may contain NULL: - try Optional.fetchCursor(db, sql: "SELECT ...", arguments: ...) // A Cursor of Int? - try Optional.fetchAll(db, sql: "SELECT ...", arguments: ...) // [Int?] -} - -let playerCount = try dbQueue.read { db in - try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM player")! -} -``` - -`fetchOne` returns an optional value which is nil in two cases: either the SELECT statement yielded no row, or one row with a NULL value. - -There are many supported value types (Bool, Int, String, Date, Swift enums, etc.). See [Values](#values) for more information: - -```swift -let count = try Int.fetchOne(db, sql: "SELECT COUNT(*) FROM player")! // Int -let urls = try URL.fetchAll(db, sql: "SELECT url FROM link") // [URL] -``` - - -## Values - -GRDB ships with built-in support for the following value types: - -- **Swift Standard Library**: Bool, Double, Float, all signed and unsigned integer types, String, [Swift enums](#swift-enums). - -- **Foundation**: [Data](#data-and-memory-savings), [Date](#date-and-datecomponents), [DateComponents](#date-and-datecomponents), NSNull, [NSNumber](#nsnumber-and-nsdecimalnumber), NSString, URL, [UUID](#uuid). - -- **CoreGraphics**: CGFloat. - -- **[DatabaseValue](#databasevalue)**, the type which gives information about the raw value stored in the database. - -- **Full-Text Patterns**: [FTS3Pattern](#fts3pattern) and [FTS5Pattern](#fts5pattern). - -- Generally speaking, all types that adopt the [DatabaseValueConvertible](#custom-value-types) protocol. - -Values can be used as [statement arguments](http://groue.github.io/GRDB.swift/docs/4.0/Structs/StatementArguments.html): - -```swift -let url: URL = ... -let verified: Bool = ... -try db.execute( - sql: "INSERT INTO link (url, verified) VALUES (?, ?)", - arguments: [url, verified]) -``` - -Values can be [extracted from rows](#column-values): - -```swift -let rows = try Row.fetchCursor(db, sql: "SELECT * FROM link") -while let row = try rows.next() { - let url: URL = row["url"] - let verified: Bool = row["verified"] -} -``` - -Values can be [directly fetched](#value-queries): - -```swift -let urls = try URL.fetchAll(db, sql: "SELECT url FROM link") // [URL] -``` - -Use values in [Records](#records): - -```swift -struct Link: FetchableRecord { - var url: URL - var isVerified: Bool - - init(row: Row) { - url = row["url"] - isVerified = row["verified"] - } -} -``` - -Use values in the [query interface](#the-query-interface): - -```swift -let url: URL = ... -let link = try Link.filter(Column("url") == url).fetchOne(db) -``` - - -### Data (and Memory Savings) - -**Data** suits the BLOB SQLite columns. It can be stored and fetched from the database just like other [values](#values): - -```swift -let rows = try Row.fetchCursor(db, sql: "SELECT data, ...") -while let row = try rows.next() { - let data: Data = row["data"] -} -``` - -At each step of the request iteration, the `row[]` subscript creates *two copies* of the database bytes: one fetched by SQLite, and another, stored in the Swift Data value. - -**You have the opportunity to save memory** by not copying the data fetched by SQLite: - -```swift -while let row = try rows.next() { - let data = row.dataNoCopy(named: "data") // Data? -} -``` - -The non-copied data does not live longer than the iteration step: make sure that you do not use it past this point. - - -### Date and DateComponents - -[**Date**](#date) and [**DateComponents**](#datecomponents) can be stored and fetched from the database. - -Here is how GRDB supports the various [date formats](https://www.sqlite.org/lang_datefunc.html) supported by SQLite: - -| SQLite format | Date | DateComponents | -|:---------------------------- |:------------:|:--------------:| -| YYYY-MM-DD | Read ¹ | Read/Write | -| YYYY-MM-DD HH:MM | Read ¹ | Read/Write | -| YYYY-MM-DD HH:MM:SS | Read ¹ | Read/Write | -| YYYY-MM-DD HH:MM:SS.SSS | Read/Write ¹ | Read/Write | -| YYYY-MM-DD**T**HH:MM | Read ¹ | Read | -| YYYY-MM-DD**T**HH:MM:SS | Read ¹ | Read | -| YYYY-MM-DD**T**HH:MM:SS.SSS | Read ¹ | Read | -| HH:MM | | Read/Write | -| HH:MM:SS | | Read/Write | -| HH:MM:SS.SSS | | Read/Write | -| Timestamps since unix epoch | Read ² | | -| `now` | | | - -¹ Dates are stored and read in the UTC time zone. Missing components are assumed to be zero. - -² GRDB 2+ interprets numerical values as timestamps that fuel `Date(timeIntervalSince1970:)`. Previous GRDB versions used to interpret numbers as [julian days](https://en.wikipedia.org/wiki/Julian_day). Julian days are still supported, with the `Date(julianDay:)` initializer. - - -#### Date - -**Date** can be stored and fetched from the database just like other [values](#values): - -```swift -try db.execute( - sql: "INSERT INTO player (creationDate, ...) VALUES (?, ...)", - arguments: [Date(), ...]) - -let row = try Row.fetchOne(db, ...)! -let creationDate: Date = row["creationDate"] -``` - -Dates are stored using the format "YYYY-MM-DD HH:MM:SS.SSS" in the UTC time zone. It is precise to the millisecond. - -> :point_up: **Note**: this format was chosen because it is the only format that is: -> -> - Comparable (`ORDER BY date` works) -> - Comparable with the SQLite keyword CURRENT_TIMESTAMP (`WHERE date > CURRENT_TIMESTAMP` works) -> - Able to feed [SQLite date & time functions](https://www.sqlite.org/lang_datefunc.html) -> - Precise enough - -When the default format does not fit your needs, customize date conversions. For example: - -```swift -try db.execute( - sql: "INSERT INTO player (creationDate, ...) VALUES (?, ...)", - arguments: [Date().timeIntervalSinceReferenceDate, ...]) - -let row = try Row.fetchOne(db, ...)! -let creationDate = Date(timeIntervalSinceReferenceDate: row["creationDate"]) -``` - -See [Codable Records] for more date customization options. - - -#### DateComponents - -DateComponents is indirectly supported, through the **DatabaseDateComponents** helper type. - -DatabaseDateComponents reads date components from all [date formats supported by SQLite](https://www.sqlite.org/lang_datefunc.html), and stores them in the format of your choice, from HH:MM to YYYY-MM-DD HH:MM:SS.SSS. - -DatabaseDateComponents can be stored and fetched from the database just like other [values](#values): - -```swift -let components = DateComponents() -components.year = 1973 -components.month = 9 -components.day = 18 - -// Store "1973-09-18" -let dbComponents = DatabaseDateComponents(components, format: .YMD) -try db.execute( - sql: "INSERT INTO player (birthDate, ...) VALUES (?, ...)", - arguments: [dbComponents, ...]) - -// Read "1973-09-18" -let row = try Row.fetchOne(db, sql: "SELECT birthDate ...")! -let dbComponents: DatabaseDateComponents = row["birthDate"] -dbComponents.format // .YMD (the actual format found in the database) -dbComponents.dateComponents // DateComponents -``` - - -### NSNumber and NSDecimalNumber - -**NSNumber** can be stored and fetched from the database just like other [values](#values). Floating point NSNumbers are stored as Double. Integer and boolean, as Int64. Integers that don't fit Int64 won't be stored: you'll get a fatal error instead. Be cautious when an NSNumber contains an UInt64, for example. - -NSDecimalNumber deserves a longer discussion: - -**SQLite has no support for decimal numbers.** Given the table below, SQLite will actually store integers or doubles: - -```sql -CREATE TABLE transfer ( - amount DECIMAL(10,5) -- will store integer or double, actually -) -``` - -This means that computations will not be exact: - -```swift -try db.execute(sql: "INSERT INTO transfer (amount) VALUES (0.1)") -try db.execute(sql: "INSERT INTO transfer (amount) VALUES (0.2)") -let sum = try NSDecimalNumber.fetchOne(db, sql: "SELECT SUM(amount) FROM transfer")! - -// Yikes! 0.3000000000000000512 -print(sum) -``` - -Don't blame SQLite or GRDB, and instead store your decimal numbers differently. - -A classic technique is to store *integers* instead, since SQLite performs exact computations of integers. For example, don't store Euros, but store cents instead: - -```swift -// Write -let amount = NSDecimalNumber(string: "0.10") -let integerAmount = amount.multiplying(byPowerOf10: 2).int64Value -try db.execute(sql: "INSERT INTO transfer (amount) VALUES (?)", arguments: [integerAmount]) - -// Read -let integerAmount = try Int64.fetchOne(db, sql: "SELECT SUM(amount) FROM transfer")! -let amount = NSDecimalNumber(value: integerAmount).multiplying(byPowerOf10: -2) // 0.10 -``` - - -### UUID - -**UUID** can be stored and fetched from the database just like other [values](#values). - -GRDB stores uuids as 16-bytes data blobs, and decodes them from both 16-bytes data blobs and strings such as "E621E1F8-C36C-495A-93FC-0C247A3E6E5F". - - -### Swift Enums - -**Swift enums** and generally all types that adopt the [RawRepresentable](https://developer.apple.com/library/tvos/documentation/Swift/Reference/Swift_RawRepresentable_Protocol/index.html) protocol can be stored and fetched from the database just like their raw [values](#values): - -```swift -enum Color : Int { - case red, white, rose -} - -enum Grape : String { - case chardonnay, merlot, riesling -} - -// Declare empty DatabaseValueConvertible adoption -extension Color : DatabaseValueConvertible { } -extension Grape : DatabaseValueConvertible { } - -// Store -try db.execute( - sql: "INSERT INTO wine (grape, color) VALUES (?, ?)", - arguments: [Grape.merlot, Color.red]) - -// Read -let rows = try Row.fetchCursor(db, sql: "SELECT * FROM wine") -while let row = try rows.next() { - let grape: Grape = row["grape"] - let color: Color = row["color"] -} -``` - -**When a database value does not match any enum case**, you get a fatal error. This fatal error can be avoided with the [DatabaseValue](#databasevalue) type: - -```swift -let row = try Row.fetchOne(db, sql: "SELECT 'syrah'")! - -row[0] as String // "syrah" -row[0] as Grape? // fatal error: could not convert "syrah" to Grape. -row[0] as Grape // fatal error: could not convert "syrah" to Grape. - -let dbValue: DatabaseValue = row[0] -if dbValue.isNull { - // Handle NULL -} else if let grape = Grape.fromDatabaseValue(dbValue) { - // Handle valid grape -} else { - // Handle unknown grape -} -``` - - -### Custom Value Types - -Conversion to and from the database is based on the `DatabaseValueConvertible` protocol: - -```swift -protocol DatabaseValueConvertible { - /// Returns a value that can be stored in the database. - var databaseValue: DatabaseValue { get } - - /// Returns a value initialized from dbValue, if possible. - static func fromDatabaseValue(_ dbValue: DatabaseValue) -> Self? -} -``` - -All types that adopt this protocol can be used like all other [values](#values) (Bool, Int, String, Date, Swift enums, etc.) - -The `databaseValue` property returns [DatabaseValue](#databasevalue), a type that wraps the five values supported by SQLite: NULL, Int64, Double, String and Data. Since DatabaseValue has no public initializer, use `DatabaseValue.null`, or another type that already adopts the protocol: `1.databaseValue`, `"foo".databaseValue`, etc. Conversion to DatabaseValue *must not* fail. - -The `fromDatabaseValue()` factory method returns an instance of your custom type if the database value contains a suitable value. If the database value does not contain a suitable value, such as "foo" for Date, `fromDatabaseValue` *must* return nil (GRDB will interpret this nil result as a conversion error, and react accordingly). - - -## Transactions and Savepoints - -- [Transactions and Safety](#transactions-and-safety) -- [Explicit Transactions](#explicit-transactions) -- [Savepoints](#savepoints) -- [Transaction Kinds](#transaction-kinds) - - -### Transactions and Safety - -**A transaction** is a fundamental tool of SQLite that guarantees [data consistency](https://www.sqlite.org/transactional.html) as well as [proper isolation](https://sqlite.org/isolation.html) between application threads and database connections. - -GRDB generally opens transactions for you, as a way to enforce its [concurrency guarantees](#concurrency), and provide maximal security for both your application data and application logic: - -```swift -// BEGIN TRANSACTION -// INSERT INTO credit ... -// INSERT INTO debit ... -// COMMIT -try dbQueue.write { db in - try Credit(destinationAccout, amount).insert(db) - try Debit(sourceAccount, amount).insert(db) -} - -// BEGIN TRANSACTION -// INSERT INTO credit ... -// INSERT INTO debit ... -// COMMIT -try dbPool.write { db in - try Credit(destinationAccout, amount).insert(db) - try Debit(sourceAccount, amount).insert(db) -} -``` - -Yet you may need to exactly control when transactions take place: - - -### Explicit Transactions - -`DatabaseQueue.inDatabase()` and `DatabasePool.writeWithoutTransaction()` execute your database statements outside of any transaction: - -```swift -// INSERT INTO credit ... -// INSERT INTO debit ... -try dbQueue.inDatabase { db in - try Credit(destinationAccout, amount).insert(db) - try Debit(sourceAccount, amount).insert(db) -} - -// INSERT INTO credit ... -// INSERT INTO debit ... -try dbPool.writeWithoutTransaction { db in - try Credit(destinationAccout, amount).insert(db) - try Debit(sourceAccount, amount).insert(db) -} -``` - -**Writing outside of any transaction is dangerous,** for two reasons: - -- In our credit/debit example, you may successfully insert a credit, but fail inserting the debit, and end up with unbalanced accounts (oops). - - ```swift - // UNSAFE DATABASE INTEGRITY - try dbQueue.inDatabase { db in // or dbPool.writeWithoutTransaction - try Credit(destinationAccout, amount).insert(db) // may succeed - try Debit(sourceAccount, amount).insert(db) // may fail - } - ``` - - Transactions avoid this kind of bug. - -- [Database pool](#database-pools) concurrent reads can see an inconsistent state of the database: - - ```swift - // UNSAFE CONCURRENCY - try dbPool.writeWithoutTransaction { db in - try Credit(destinationAccout, amount).insert(db) - // <- Concurrent dbPool.read sees a partial db update here - try Debit(sourceAccount, amount).insert(db) - } - ``` - - Transactions avoid this kind of bug, too. - -To open explicit transactions, use one of the `Database.inTransaction`, `DatabaseQueue.inTransaction`, or `DatabasePool.writeInTransaction` methods: - -```swift -// BEGIN TRANSACTION -// INSERT INTO credit ... -// INSERT INTO debit ... -// COMMIT -try dbQueue.inDatabase { db in // or dbPool.writeWithoutTransaction - try db.inTransaction { - try Credit(destinationAccout, amount).insert(db) - try Debit(sourceAccount, amount).insert(db) - return .commit - } -} - -// BEGIN TRANSACTION -// INSERT INTO credit ... -// INSERT INTO debit ... -// COMMIT -try dbQueue.inTransaction { db in // or dbPool.writeInTransaction - try Credit(destinationAccout, amount).insert(db) - try Debit(sourceAccount, amount).insert(db) - return .commit -} -``` - -If an error is thrown from the transaction block, the transaction is rollbacked and the error is rethrown by the `inTransaction` method. If you return `.rollback` instead of `.commit`, the transaction is also rollbacked, but no error is thrown. - -You can also perform manual transaction management: - -```swift -try dbQueue.inDatabase { db in // or dbPool.writeWithoutTransaction - try db.beginTransaction() - ... - try db.commit() - - try db.execute(sql: "BEGIN TRANSACTION") - ... - try db.execute(sql: "ROLLBACK") -} -``` - -Transactions can't be left opened unless you set the [allowsUnsafeTransactions](http://groue.github.io/GRDB.swift/docs/4.0/Structs/Configuration.html) configuration flag: - -```swift -// fatal error: A transaction has been left opened at the end of a database access -try dbQueue.inDatabase { db in - try db.execute(sql: "BEGIN TRANSACTION") - // <- no commit or rollback -} -``` - -You can ask if a transaction is currently opened: - -```swift -func myCriticalMethod(_ db: Database) throws { - precondition(db.isInsideTransaction, "This method requires a transaction") - try ... -} -``` - -Yet, you have a better option than checking for transactions: critical database sections should use savepoints, described below: - -```swift -func myCriticalMethod(_ db: Database) throws { - try db.inSavepoint { - // Here the database is guaranteed to be inside a transaction. - try ... - } -} -``` - - -### Savepoints - -**Statements grouped in a savepoint can be rollbacked without invalidating a whole transaction:** - -```swift -try dbQueue.write { db in - // Makes sure both inserts succeed, or none: - try db.inSavepoint { - try Credit(destinationAccout, amount).insert(db) - try Debit(sourceAccount, amount).insert(db) - return .commit - } - - // Other savepoints, etc... -} -``` - -If an error is thrown from the savepoint block, the savepoint is rollbacked and the error is rethrown by the `inSavepoint` method. If you return `.rollback` instead of `.commit`, the savepoint is also rollbacked, but no error is thrown. - -**Unlike transactions, savepoints can be nested.** They implicitly open a transaction if no one was opened when the savepoint begins. As such, they behave just like nested transactions. Yet the database changes are only written to disk when the outermost transaction is committed: - -```swift -try dbQueue.inDatabase { db in - try db.inSavepoint { - ... - try db.inSavepoint { - ... - return .commit - } - ... - return .commit // writes changes to disk - } -} -``` - -SQLite savepoints are more than nested transactions, though. For advanced uses, use [SQLite savepoint documentation](https://www.sqlite.org/lang_savepoint.html). - - -### Transaction Kinds - -SQLite supports [three kinds of transactions](https://www.sqlite.org/lang_transaction.html): deferred (the default), immediate, and exclusive. - -The transaction kind can be changed in the database configuration, or for each transaction: - -```swift -// 1) Default configuration: -let dbQueue = try DatabaseQueue(path: "...") - -// BEGIN DEFERED TRANSACTION ... -dbQueue.write { db in ... } - -// BEGIN EXCLUSIVE TRANSACTION ... -dbQueue.inTransaction(.exclusive) { db in ... } - -// 2) Customized default transaction kind: -var config = Configuration() -config.defaultTransactionKind = .immediate -let dbQueue = try DatabaseQueue(path: "...", configuration: config) - -// BEGIN IMMEDIATE TRANSACTION ... -dbQueue.write { db in ... } - -// BEGIN EXCLUSIVE TRANSACTION ... -dbQueue.inTransaction(.exclusive) { db in ... } -``` - - -## Prepared Statements - -**Prepared Statements** let you prepare an SQL query and execute it later, several times if you need, with different arguments. - -There are two kinds of prepared statements: **select statements**, and **update statements**: - -```swift -try dbQueue.write { db in - let updateSQL = "INSERT INTO player (name, score) VALUES (:name, :score)" - let updateStatement = try db.makeUpdateStatement(sql: updateSQL) - - let selectSQL = "SELECT * FROM player WHERE name = ?" - let selectStatement = try db.makeSelectStatement(sql: selectSQL) -} -``` - -The `?` and colon-prefixed keys like `:name` in the SQL query are the statement arguments. You set them with arrays or dictionaries (arguments are actually of type [StatementArguments](http://groue.github.io/GRDB.swift/docs/4.0/Structs/StatementArguments.html), which happens to adopt the ExpressibleByArrayLiteral and ExpressibleByDictionaryLiteral protocols). - -```swift -updateStatement.arguments = ["name": "Arthur", "score": 1000] -selectStatement.arguments = ["Arthur"] -``` - -After arguments are set, you can execute the prepared statement: - -```swift -try updateStatement.execute() -``` - -Select statements can be used wherever a raw SQL query string would fit (see [fetch queries](#fetch-queries)): - -```swift -let rows = try Row.fetchCursor(selectStatement) // A Cursor of Row -let players = try Player.fetchAll(selectStatement) // [Player] -let player = try Player.fetchOne(selectStatement) // Player? -``` - -You can set the arguments at the moment of the statement execution: - -```swift -try updateStatement.execute(arguments: ["name": "Arthur", "score": 1000]) -let player = try Player.fetchOne(selectStatement, arguments: ["Arthur"]) -``` - -> :point_up: **Note**: it is a programmer error to reuse a prepared statement that has failed: GRDB may crash if you do so. - -See [row queries](#row-queries), [value queries](#value-queries), and [Records](#records) for more information. - - -### Prepared Statements Cache - -When the same query will be used several times in the lifetime of your application, you may feel a natural desire to cache prepared statements. - -**Don't cache statements yourself.** - -> :point_up: **Note**: This is because you don't have the necessary tools. Statements are tied to specific SQLite connections and dispatch queues which you don't manage yourself, especially when you use [database pools](#database-pools). A change in the database schema [may, or may not](https://www.sqlite.org/compile.html#max_schema_retry) invalidate a statement. On systems earlier than OSX 10.10 that don't have the [sqlite3_close_v2 function](https://www.sqlite.org/c3ref/close.html), SQLite connections won't close properly if statements have been kept alive. - -Instead, use the `cachedUpdateStatement` and `cachedSelectStatement` methods. GRDB does all the hard caching and [memory management](#memory-management) stuff for you: - -```swift -let updateStatement = try db.cachedUpdateStatement(sql: sql) -let selectStatement = try db.cachedSelectStatement(sql: sql) -``` - -Should a cached prepared statement throw an error, don't reuse it (it is a programmer error). Instead, reload it from the cache. - - -## Custom SQL Functions and Aggregates - -**SQLite lets you define SQL functions and aggregates.** - -A custom SQL function or aggregate extends SQLite: - -```sql -SELECT reverse(name) FROM player; -- custom function -SELECT maxLength(name) FROM player; -- custom aggregate -``` - -- [Custom SQL Functions](#custom-sql-functions) -- [Custom Aggregates](#custom-aggregates) - - -### Custom SQL Functions - -```swift -let reverse = DatabaseFunction("reverse", argumentCount: 1, pure: true) { (values: [DatabaseValue]) in - // Extract string value, if any... - guard let string = String.fromDatabaseValue(values[0]) else { - return nil - } - // ... and return reversed string: - return String(string.reversed()) -} -dbQueue.add(function: reverse) // Or dbPool.add(function: ...) - -try dbQueue.read { db in - // "oof" - try String.fetchOne(db, sql: "SELECT reverse('foo')")! -} -``` - -The *function* argument takes an array of [DatabaseValue](#databasevalue), and returns any valid [value](#values) (Bool, Int, String, Date, Swift enums, etc.) The number of database values is guaranteed to be *argumentCount*. - -SQLite has the opportunity to perform additional optimizations when functions are "pure", which means that their result only depends on their arguments. So make sure to set the *pure* argument to true when possible. - - -**Functions can take a variable number of arguments:** - -When you don't provide any explicit *argumentCount*, the function can take any number of arguments: - -```swift -let averageOf = DatabaseFunction("averageOf", pure: true) { (values: [DatabaseValue]) in - let doubles = values.compactMap { Double.fromDatabaseValue($0) } - return doubles.reduce(0, +) / Double(doubles.count) -} -dbQueue.add(function: averageOf) - -try dbQueue.read { db in - // 2.0 - try Double.fetchOne(db, sql: "SELECT averageOf(1, 2, 3)")! -} -``` - - -**Functions can throw:** - -```swift -let sqrt = DatabaseFunction("sqrt", argumentCount: 1, pure: true) { (values: [DatabaseValue]) in - guard let double = Double.fromDatabaseValue(values[0]) else { - return nil - } - guard double >= 0 else { - throw DatabaseError(message: "invalid negative number") - } - return sqrt(double) -} -dbQueue.add(function: sqrt) - -// SQLite error 1 with statement `SELECT sqrt(-1)`: invalid negative number -try dbQueue.read { db in - try Double.fetchOne(db, sql: "SELECT sqrt(-1)")! -} -``` - - -**Use custom functions in the [query interface](#the-query-interface):** - -```swift -// SELECT reverseString("name") FROM player -Player.select(reverseString.apply(nameColumn)) -``` - - -**GRDB ships with built-in SQL functions that perform unicode-aware string transformations.** See [Unicode](#unicode). - - -### Custom Aggregates - -Before registering a custom aggregate, you need to define a type that adopts the `DatabaseAggregate` protocol: - -```swift -protocol DatabaseAggregate { - // Initializes an aggregate - init() - - // Called at each step of the aggregation - mutating func step(_ dbValues: [DatabaseValue]) throws - - // Returns the final result - func finalize() throws -> DatabaseValueConvertible? -} -``` - -For example: - -```swift -struct MaxLength : DatabaseAggregate { - var maxLength: Int = 0 - - mutating func step(_ dbValues: [DatabaseValue]) { - // At each step, extract string value, if any... - guard let string = String.fromDatabaseValue(dbValues[0]) else { - return - } - // ... and update the result - let length = string.count - if length > maxLength { - maxLength = length - } - } - - func finalize() -> DatabaseValueConvertible? { - return maxLength - } -} - -let maxLength = DatabaseFunction( - "maxLength", - argumentCount: 1, - pure: true, - aggregate: MaxLength.self) - -dbQueue.add(function: maxLength) // Or dbPool.add(function: ...) - -try dbQueue.read { db in - // Some Int - try Int.fetchOne(db, sql: "SELECT maxLength(name) FROM player")! -} -``` - -The `step` method of the aggregate takes an array of [DatabaseValue](#databasevalue). This array contains as many values as the *argumentCount* parameter (or any number of values, when *argumentCount* is omitted). - -The `finalize` method of the aggregate returns the final aggregated [value](#values) (Bool, Int, String, Date, Swift enums, etc.). - -SQLite has the opportunity to perform additional optimizations when aggregates are "pure", which means that their result only depends on their inputs. So make sure to set the *pure* argument to true when possible. - - -**Use custom aggregates in the [query interface](#the-query-interface):** - -```swift -// SELECT maxLength("name") FROM player -let request = Player.select(maxLength.apply(nameColumn)) -try Int.fetchOne(db, request) // Int? -``` - - -## Database Schema Introspection - -GRDB comes with a set of schema introspection methods: - -```swift -try dbQueue.read { db in - // Bool, true if the table exists - try db.tableExists("player") - - // [ColumnInfo], the columns in the table - try db.columns(in: "player") - - // PrimaryKeyInfo - try db.primaryKey("player") - - // [ForeignKeyInfo], the foreign keys defined on the table - try db.foreignKeys(on: "player") - - // [IndexInfo], the indexes defined on the table - try db.indexes(on: "player") - - // Bool, true if column(s) is a unique key (primary key or unique index) - try db.table("player", hasUniqueKey: ["email"]) -} - -// Bool, true if argument is the name of an internal SQLite table -Database.isSQLiteInternalTable(...) - -// Bool, true if argument is the name of an internal GRDB table -Database.isGRDBInternalTable(...) -``` - - -## Row Adapters - -**Row adapters let you present database rows in the way expected by the row consumers.** - -They basically help two incompatible row interfaces to work together. For example, a row consumer expects a column named "consumed", but the produced row has a column named "produced". - -In this case, the `ColumnMapping` row adapter comes in handy: - -```swift -// Fetch a 'produced' column, and consume a 'consumed' column: -let adapter = ColumnMapping(["consumed": "produced"]) -let row = try Row.fetchOne(db, sql: "SELECT 'Hello' AS produced", adapter: adapter)! -row["consumed"] // "Hello" -row["produced"] // nil -``` - -Row adapters are values that adopt the [RowAdapter](http://groue.github.io/GRDB.swift/docs/4.0/Protocols/RowAdapter.html) protocol. You can implement your own custom adapters ([**:fire: EXPERIMENTAL**](#what-are-experimental-features)), or use one of the four built-in adapters, described below. - -To see how row adapters can be used, see [Joined Queries Support](#joined-queries-support). - - -### ColumnMapping - -ColumnMapping renames columns. Build one with a dictionary whose keys are adapted column names, and values the column names in the raw row: - -```swift -// [newName:"Hello"] -let adapter = ColumnMapping(["newName": "oldName"]) -let row = try Row.fetchOne(db, sql: "SELECT 'Hello' AS oldName", adapter: adapter)! -``` - -### SuffixRowAdapter - -`SuffixRowAdapter` hides the first columns in a row: - -```swift -// [b:1 c:2] -let adapter = SuffixRowAdapter(fromIndex: 1) -let row = try Row.fetchOne(db, sql: "SELECT 0 AS a, 1 AS b, 2 AS c", adapter: adapter)! -``` - -### RangeRowAdapter - -`RangeRowAdapter` only exposes a range of columns. - -```swift -// [b:1] -let adapter = RangeRowAdapter(1..<2) -let row = try Row.fetchOne(db, sql: "SELECT 0 AS a, 1 AS b, 2 AS c", adapter: adapter)! -``` - -### EmptyRowAdapter - -`EmptyRowAdapter` hides all columns. - -```swift -let adapter = EmptyRowAdapter() -let row = try Row.fetchOne(db, sql: "SELECT 0 AS a, 1 AS b, 2 AS c", adapter: adapter)! -row.isEmpty // true -``` - -This limit adapter may turn out useful in some narrow use cases. You'll be happy to find it when you need it. - - -### ScopeAdapter - -`ScopeAdapter` defines *row scopes*: - -```swift -let adapter = ScopeAdapter([ - "left": RangeRowAdapter(0..<2), - "right": RangeRowAdapter(2..<4)]) -let row = try Row.fetchOne(db, sql: "SELECT 0 AS a, 1 AS b, 2 AS c, 3 AS d", adapter: adapter)! -``` - -ScopeAdapter does not change the columns and values of the fetched row. Instead, it defines *scopes*, which you access through the `Row.scopes` property: - -```swift -row // [a:0 b:1 c:2 d:3] -row.scopes["left"] // [a:0 b:1] -row.scopes["right"] // [c:2 d:3] -row.scopes["missing"] // nil -``` - -Scopes can be nested: - -```swift -let adapter = ScopeAdapter([ - "left": ScopeAdapter([ - "left": RangeRowAdapter(0..<1), - "right": RangeRowAdapter(1..<2)]), - "right": ScopeAdapter([ - "left": RangeRowAdapter(2..<3), - "right": RangeRowAdapter(3..<4)]) - ]) -let row = try Row.fetchOne(db, sql: "SELECT 0 AS a, 1 AS b, 2 AS c, 3 AS d", adapter: adapter)! - -let leftRow = row.scopes["left"]! -leftRow.scopes["left"] // [a:0] -leftRow.scopes["right"] // [b:1] - -let rightRow = row.scopes["right"]! -rightRow.scopes["left"] // [c:2] -rightRow.scopes["right"] // [d:3] -``` - -Any adapter can be extended with scopes: - -```swift -let baseAdapter = RangeRowAdapter(0..<2) -let adapter = ScopeAdapter(base: baseAdapter, scopes: [ - "remainder": SuffixRowAdapter(fromIndex: 2)]) -let row = try Row.fetchOne(db, sql: "SELECT 0 AS a, 1 AS b, 2 AS c, 3 AS d", adapter: adapter)! - -row // [a:0 b:1] -row.scopes["remainder"] // [c:2 d:3] -``` - - -## Raw SQLite Pointers - -**If not all SQLite APIs are exposed in GRDB, you can still use the [SQLite C Interface](https://www.sqlite.org/c3ref/intro.html) and call [SQLite C functions](https://www.sqlite.org/c3ref/funclist.html).** - -Those functions are embedded right into the [GRDBCustom](Documentation/CustomSQLiteBuilds.md) module. Otherwise, you'll need to import `SQLite3`, `SQLCipher`, or `CSQLite`, depending on the GRDB flavor you are using: - -```swift -// Swift Package Manager -import CSQLite - -// SQLCipher -import SQLCipher - -// System SQLite -import SQLite3 - -let sqliteVersion = String(cString: sqlite3_libversion()) -``` - -Raw pointers to database connections and statements are available through the `Database.sqliteConnection` and `Statement.sqliteStatement` properties: - -```swift -try dbQueue.read { db in - // The raw pointer to a database connection: - let sqliteConnection = db.sqliteConnection - - // The raw pointer to a statement: - let statement = try db.makeSelectStatement(sql: "SELECT ...") - let sqliteStatement = statement.sqliteStatement -} -``` - -> :point_up: **Notes** -> -> - Those pointers are owned by GRDB: don't close connections or finalize statements created by GRDB. -> - GRDB opens SQLite connections in the "[multi-thread mode](https://www.sqlite.org/threadsafe.html)", which (oddly) means that **they are not thread-safe**. Make sure you touch raw databases and statements inside their dedicated dispatch queues. -> - Use the raw SQLite C Interface at your own risk. GRDB won't prevent you from shooting yourself in the foot. - -Before jumping in the low-level wagon, here is the list of all SQLite APIs used by GRDB: - -- `sqlite3_aggregate_context`, `sqlite3_create_function_v2`, `sqlite3_result_blob`, `sqlite3_result_double`, `sqlite3_result_error`, `sqlite3_result_error_code`, `sqlite3_result_int64`, `sqlite3_result_null`, `sqlite3_result_text`, `sqlite3_user_data`, `sqlite3_value_blob`, `sqlite3_value_bytes`, `sqlite3_value_double`, `sqlite3_value_int64`, `sqlite3_value_text`, `sqlite3_value_type`: see [Custom SQL Functions and Aggregates](#custom-sql-functions-and-aggregates) -- `sqlite3_backup_finish`, `sqlite3_backup_init`, `sqlite3_backup_step`: see [Backup](#backup) -- `sqlite3_bind_blob`, `sqlite3_bind_double`, `sqlite3_bind_int64`, `sqlite3_bind_null`, `sqlite3_bind_parameter_count`, `sqlite3_bind_parameter_name`, `sqlite3_bind_text`, `sqlite3_clear_bindings`, `sqlite3_column_blob`, `sqlite3_column_bytes`, `sqlite3_column_count`, `sqlite3_column_double`, `sqlite3_column_int64`, `sqlite3_column_name`, `sqlite3_column_text`, `sqlite3_column_type`, `sqlite3_exec`, `sqlite3_finalize`, `sqlite3_prepare_v2`, `sqlite3_reset`, `sqlite3_step`: see [Executing Updates](#executing-updates), [Fetch Queries](#fetch-queries), [Prepared Statements](#prepared-statements), [Values](#values) -- `sqlite3_busy_handler`, `sqlite3_busy_timeout`: see [Configuration.busyMode](http://groue.github.io/GRDB.swift/docs/4.0/Structs/Configuration.html) -- `sqlite3_changes`, `sqlite3_total_changes`: see [Database.changesCount and Database.totalChangesCount](http://groue.github.io/GRDB.swift/docs/4.0/Classes/Database.html) -- `sqlite3_close`, `sqlite3_close_v2`, `sqlite3_next_stmt`, `sqlite3_open_v2`: see [Database Connections](#database-connections) -- `sqlite3_commit_hook`, `sqlite3_rollback_hook`, `sqlite3_update_hook`: see [TransactionObserver Protocol](#transactionobserver-protocol), [DatabaseRegionObservation], [ValueObservation], [FetchedRecordsController] -- `sqlite3_config`: see [Error Log](#error-log) -- `sqlite3_create_collation_v2`: see [String Comparison](#string-comparison) -- `sqlite3_db_release_memory`: see [Memory Management](#memory-management) -- `sqlite3_errcode`, `sqlite3_errmsg`, `sqlite3_errstr`, `sqlite3_extended_result_codes`: see [Error Handling](#error-handling) -- `sqlite3_key`, `sqlite3_rekey`: see [Encryption](#encryption) -- `sqlite3_last_insert_rowid`: see [Executing Updates](#executing-updates) -- `sqlite3_preupdate_count`, `sqlite3_preupdate_depth`, `sqlite3_preupdate_hook`, `sqlite3_preupdate_new`, `sqlite3_preupdate_old`: see [Support for SQLite Pre-Update Hooks](#support-for-sqlite-pre-update-hooks) -- `sqlite3_set_authorizer`: **reserved by GRDB** -- `sqlite3_sql`: see [Statement.sql](http://groue.github.io/GRDB.swift/docs/4.0/Classes/Statement.html) -- `sqlite3_trace`: see [Configuration.trace](http://groue.github.io/GRDB.swift/docs/4.0/Structs/Configuration.html) -- `sqlite3_wal_checkpoint_v2`: see [DatabasePool.checkpoint](http://groue.github.io/GRDB.swift/docs/4.0/Classes/DatabasePool.html) - - -Records -======= - -**On top of the [SQLite API](#sqlite-api), GRDB provides protocols and a class** that help manipulating database rows as regular objects named "records": - -```swift -try dbQueue.write { db in - if var place = try Place.fetchOne(db, key: 1) { - place.isFavorite = true - try place.update(db) - } -} -``` - -Of course, you need to open a [database connection](#database-connections), and [create database tables](#database-schema) first. - -To define your custom records, you subclass the ready-made `Record` class, or you extend your structs and classes with protocols that come with focused sets of features: fetching methods, persistence methods, record comparison... - -Extending structs with record protocols is more "swifty". Subclassing the Record class is more "classic". You can choose either way. See some [examples of record definitions](#examples-of-record-definitions), and the [list of record methods](#list-of-record-methods) for an overview. - -> :point_up: **Note**: if you are familiar with Core Data's NSManagedObject or Realm's Object, you may experience a cultural shock: GRDB records are not uniqued, do not auto-update, and do not lazy-load. This is both a purpose, and a consequence of protocol-oriented programming. You should read [How to build an iOS application with SQLite and GRDB.swift](https://medium.com/@gwendal.roue/how-to-build-an-ios-application-with-sqlite-and-grdb-swift-d023a06c29b3) for a general introduction. -> -> :bulb: **Tip**: after you have read this chapter, check the [Good Practices for Designing Record Types](Documentation/GoodPracticesForDesigningRecordTypes.md) Guide. -> -> :bulb: **Tip**: see the [Demo Application](DemoApps/GRDBDemoiOS/README.md) for a sample app that uses records. - -**Overview** - -- [Inserting Records](#inserting-records) -- [Fetching Records](#fetching-records) -- [Updating Records](#updating-records) -- [Deleting Records](#deleting-records) -- [Counting Records](#counting-records) - -**Protocols and the Record Class** - -- [Record Protocols Overview](#record-protocols-overview) -- [FetchableRecord Protocol](#fetchablerecord-protocol) -- [TableRecord Protocol](#tablerecord-protocol) -- [PersistableRecord Protocol](#persistablerecord-protocol) - - [Persistence Methods](#persistence-methods) - - [Customizing the Persistence Methods] -- [Codable Records] -- [Record Class](#record-class) -- [Record Comparison] -- [Record Customization Options] - -**Records in a Glance** - -- [Examples of Record Definitions](#examples-of-record-definitions) -- [List of Record Methods](#list-of-record-methods) - - -### Inserting Records - -To insert a record in the database, call the `insert` method: - -```swift -let player = Player(name: "Arthur", email: "arthur@example.com") -try player.insert(db) -``` - -:point_right: `insert` is available for subclasses of the [Record](#record-class) class, and types that adopt the [PersistableRecord] protocol. - - -### Fetching Records - -To fetch records from the database, call a [fetching method](#fetching-methods): - -```swift -let arthur = try Player.fetchOne(db, // Player? - sql: "SELECT * FROM players WHERE name = ?", - arguments: ["Arthur"]) - -let bestPlayers = try Player // [Player] - .order(Column("score").desc) - .limit(10) - .fetchAll(db) - -let spain = try Country.fetchOne(db, key: "ES") // Country? -``` - -:point_right: Fetching from raw SQL is available for subclasses of the [Record](#record-class) class, and types that adopt the [FetchableRecord] protocol. - -:point_right: Fetching without SQL, using the [query interface](#the-query-interface), is available for subclasses of the [Record](#record-class) class, and types that adopt both [FetchableRecord] and [TableRecord] protocol. - - -### Updating Records - -To update a record in the database, call the `update` method: - -```swift -if let player = try Player.fetchOne(db, key: 1) - player.score = 1000 - try player.update(db) -} -``` - -It is possible to [avoid useless updates](#record-comparison): - -```swift -if var player = try Player.fetchOne(db, key: 1) { - // does not hit the database if score has not changed - try player.updateChanges(db) { - $0.score = 1000 - } -} -``` - -For batch updates, execute an [SQL query](#executing-updates): - -```swift -try db.execute(sql: "UPDATE player SET synchronized = 1") -``` - -:point_right: update methods are available for subclasses of the [Record](#record-class) class, and types that adopt the [PersistableRecord] protocol. - - -### Deleting Records - -To delete a record in the database, call the `delete` method: - -```swift -if let player = try Player.fetchOne(db, key: 1) { - try player.delete(db) -} -``` - -You can also delete by primary key, or any unique index: - -```swift -try Player.deleteOne(db, key: 1) -try Player.deleteOne(db, key: ["email": "arthur@example.com"]) -try Country.deleteAll(db, keys: ["FR", "US"]) -``` - -For batch deletes, execute an [SQL query](#executing-updates), or see the [query interface](#the-query-interface): - -```swift -try Player - .filter(Column("email") == nil) - .deleteAll(db) -``` - -:point_right: delete methods are available for subclasses of the [Record](#record-class) class, and types that adopt the [PersistableRecord] protocol. - - -### Counting Records - -To count records, call the `fetchCount` method: - -```swift -let playerCount: Int = try Player.fetchCount(db) - -let playerWithEmailCount: Int = try Player - .filter(Column("email") == nil) - .fetchCount(db) -``` - -:point_right: `fetchCount` is available for subclasses of the [Record](#record-class) class, and types that adopt the [TableRecord] protocol. - - -Details follow: - -- [Record Protocols Overview](#record-protocols-overview) -- [FetchableRecord Protocol](#fetchablerecord-protocol) -- [TableRecord Protocol](#tablerecord-protocol) -- [PersistableRecord Protocol](#persistablerecord-protocol) -- [Codable Records] -- [Record Class](#record-class) -- [Record Comparison] -- [Record Customization Options] -- [Examples of Record Definitions](#examples-of-record-definitions) -- [List of Record Methods](#list-of-record-methods) - - -## Record Protocols Overview - -**GRDB ships with three record protocols**. Your own types will adopt one or several of them, according to the abilities you want to extend your types with. - -- [FetchableRecord] is able to **decode database rows**. - - It is always possible to decode rows without this protocol: - - ```swift - struct Place { ... } - try dbQueue.read { db in - let rows = try Row.fetchAll(db, sql: "SELECT * FROM place") - let places: [Place] = rows.map { row in - return Place( - id: row["id"], - title: row["title"], - coordinate: CLLocationCoordinate2D( - latitude: row["latitude"], - longitude: row["longitude"])) - ) - } - } - ``` - - But FetchableRecord lets you write code that is easier to read, and more efficient as well, both in terms of performance and memory usage: - - ```swift - struct Place: FetchableRecord { ... } - try dbQueue.read { db in - let places = try Place.fetchAll(db, sql: "SELECT * FROM place") - } - ``` - - > :bulb: **Tip**: FetchableRecord can derive its implementation from the standard Decodable protocol. See [Codable Records] for more information. - - FetchableRecord can decode database rows, but it is not able to build SQL requests for you. For that, you also need TableRecord: - -- [TableRecord] is able to **generate SQL queries**: - - ```swift - struct Place: TableRecord { ... } - // SELECT * FROM place ORDER BY title - let request = Place.order(Column("title")) - ``` - - When a type adopts both TableRecord and FetchableRecord, it can load from those requests: - - ```swift - struct Place: TableRecord, FetchableRecord { ... } - try dbQueue.read { db in - let places = try Place.order(Column("title")).fetchAll(db) - let paris = try Place.fetchOne(key: 1) - } - ``` - -- [PersistableRecord] is able to **write**: it can create, update, and delete rows in the database: - - ```swift - struct Place : PersistableRecord { ... } - try dbQueue.write { db in - try Place.delete(db, key: 1) - try Place(...).insert(db) - } - ``` - - A persistable record can also [compare](#record-comparison) itself against other records, and avoid useless database updates. - - > :bulb: **Tip**: PersistableRecord can derive its implementation from the standard Encodable protocol. See [Codable Records] for more information. - - -## FetchableRecord Protocol - -**The FetchableRecord protocol grants fetching methods to any type** that can be built from a database row: - -```swift -protocol FetchableRecord { - /// Row initializer - init(row: Row) -} -``` - -**To use FetchableRecord**, subclass the [Record](#record-class) class, or adopt it explicitly. For example: - -```swift -struct Place { - var id: Int64? - var title: String - var coordinate: CLLocationCoordinate2D -} - -extension Place : FetchableRecord { - init(row: Row) { - id = row["id"] - title = row["title"] - coordinate = CLLocationCoordinate2D( - latitude: row["latitude"], - longitude: row["longitude"]) - } -} -``` - -Rows also accept column enums: - -```swift -extension Place : FetchableRecord { - enum Columns: String, ColumnExpression { - case id, title, latitude, longitude - } - - init(row: Row) { - id = row[Columns.id] - title = row[Columns.title] - coordinate = CLLocationCoordinate2D( - latitude: row[Columns.latitude], - longitude: row[Columns.longitude]) - } -} -``` - -See [column values](#column-values) for more information about the `row[]` subscript. - -When your record type adopts the standard Decodable protocol, you don't have to provide the implementation for `init(row:)`. See [Codable Records] for more information: - -```swift -// That's all -struct Player: Decodable, FetchableRecord { - var id: Int64 - var name: String - var score: Int -} -``` - -FetchableRecord allows adopting types to be fetched from SQL queries: - -```swift -try Place.fetchCursor(db, sql: "SELECT ...", arguments:...) // A Cursor of Place -try Place.fetchAll(db, sql: "SELECT ...", arguments:...) // [Place] -try Place.fetchOne(db, sql: "SELECT ...", arguments:...) // Place? -``` - -See [fetching methods](#fetching-methods) for information about the `fetchCursor`, `fetchAll` and `fetchOne` methods. See [StatementArguments](http://groue.github.io/GRDB.swift/docs/4.0/Structs/StatementArguments.html) for more information about the query arguments. - -> :point_up: **Note**: for performance reasons, the same row argument to `init(row:)` is reused during the iteration of a fetch query. If you want to keep the row for later use, make sure to store a copy: `self.row = row.copy()`. - -> :point_up: **Note**: The `FetchableRecord.init(row:)` initializer fits the needs of most applications. But some application are more demanding than others. When FetchableRecord does not exactly provide the support you need, have a look at the [Beyond FetchableRecord] chapter. - - -## TableRecord Protocol - -**The TableRecord protocol** generates SQL for you. To use TableRecord, subclass the [Record](#record-class) class, or adopt it explicitly: - -```swift -protocol TableRecord { - static var databaseTableName: String { get } - static var databaseSelection: [SQLSelectable] { get } -} -``` - -The `databaseSelection` type property is optional, and documented in the [Columns Selected by a Request] chapter. - -The `databaseTableName` type property is the name of a database table. By default, it is derived from the type name: - -```swift -struct Place: TableRecord { } -print(Place.databaseTableName) // prints "place" -``` - -For example: - -- Place: `place` -- Country: `country` -- PostalAddress: `postalAddress` -- HTTPRequest: `httpRequest` -- TOEFL: `toefl` - -You can still provide a custom table name: - -```swift -struct Place: TableRecord { - static let databaseTableName = "location" -} -print(Place.databaseTableName) // prints "location" -``` - -Subclasses of the [Record](#record-class) class must always override their superclass's `databaseTableName` property: - -```swift -class Place: Record { - override class var databaseTableName: String { - return "place" - } -} -print(Place.databaseTableName) // prints "place" -``` - -When a type adopts both TableRecord and [FetchableRecord](#fetchablerecord-protocol), it can be fetched using the [query interface](#the-query-interface): - -```swift -// SELECT * FROM place WHERE name = 'Paris' -let paris = try Place.filter(nameColumn == "Paris").fetchOne(db) -``` - -TableRecord can also fetch records by primary key: - -```swift -try Player.fetchOne(db, key: 1) // Player? -try Player.fetchAll(db, keys: [1, 2, 3]) // [Player] - -try Country.fetchOne(db, key: "FR") // Country? -try Country.fetchAll(db, keys: ["FR", "US"]) // [Country] -``` - -When the table has no explicit primary key, GRDB uses the [hidden "rowid" column](#the-implicit-rowid-primary-key): - -```swift -// SELECT * FROM document WHERE rowid = 1 -try Document.fetchOne(db, key: 1) // Document? -``` - -For multiple-column primary keys and unique keys defined by unique indexes, provide a dictionary: - -```swift -// SELECT * FROM citizenship WHERE citizenId = 1 AND countryCode = 'FR' -try Citizenship.fetchOne(db, key: ["citizenId": 1, "countryCode": "FR"]) // Citizenship? -``` - - -## PersistableRecord Protocol - -**GRDB record types can create, update, and delete rows in the database.** - -Those abilities are granted by three protocols: - -```swift -// Defines how a record encodes itself into the database -protocol EncodableRecord { - /// Defines the values persisted in the database - func encode(to container: inout PersistenceContainer) -} - -// Adds persistence methods -protocol MutablePersistableRecord: TableRecord, EncodableRecord { - /// Optional method that lets your adopting type store its rowID upon - /// successful insertion. Don't call it directly: it is called for you. - mutating func didInsert(with rowID: Int64, for column: String?) -} - -// Adds immutability -protocol PersistableRecord: MutablePersistableRecord { - /// Non-mutating version of the optional didInsert(with:for:) - func didInsert(with rowID: Int64, for column: String?) -} -``` - -Yes, three protocols instead of one. Here is how you pick one or the other: - -- **If your type is a class**, choose `PersistableRecord`. On top of that, implement `didInsert(with:for:)` if the database table has an auto-incremented primary key. - -- **If your type is a struct, and the database table has an auto-incremented primary key**, choose `MutablePersistableRecord`, and implement `didInsert(with:for:)`. - -- **Otherwise**, choose `PersistableRecord`, and ignore `didInsert(with:for:)`. - -The `encode(to:)` method defines which [values](#values) (Bool, Int, String, Date, Swift enums, etc.) are assigned to database columns. - -The optional `didInsert` method lets the adopting type store its rowID after successful insertion, and is only useful for tables that have an auto-incremented primary key. It is called from a protected dispatch queue, and serialized with all database updates. - -**To use the persistable protocols**, subclass the [Record](#record-class) class, or adopt one of them explicitly. For example: - -```swift -extension Place : MutablePersistableRecord { - /// The values persisted in the database - func encode(to container: inout PersistenceContainer) { - container["id"] = id - container["title"] = title - container["latitude"] = coordinate.latitude - container["longitude"] = coordinate.longitude - } - - // Update id upon successful insertion: - mutating func didInsert(with rowID: Int64, for column: String?) { - id = rowID - } -} - -var paris = Place( - id: nil, - title: "Paris", - coordinate: CLLocationCoordinate2D(latitude: 48.8534100, longitude: 2.3488000)) - -try paris.insert(db) -paris.id // some value -``` - -Persistence containers also accept column enums: - -```swift -extension Place : MutablePersistableRecord { - enum Columns: String, ColumnExpression { - case id, title, latitude, longitude - } - - func encode(to container: inout PersistenceContainer) { - container[Columns.id] = id - container[Columns.title] = title - container[Columns.latitude] = coordinate.latitude - container[Columns.longitude] = coordinate.longitude - } -} -``` - -When your record type adopts the standard Encodable protocol, you don't have to provide the implementation for `encode(to:)`. See [Codable Records] for more information: - -```swift -// That's all -struct Player: Encodable, MutablePersistableRecord { - var id: Int64? - var name: String - var score: Int - - mutating func didInsert(with rowID: Int64, for column: String?) { - id = rowID - } -} -``` - - -### Persistence Methods - -[Record](#record-class) subclasses and types that adopt [PersistableRecord] are given default implementations for methods that insert, update, and delete: - -```swift -// Instance methods -try place.save(db) // INSERT or UPDATE -try place.insert(db) // INSERT -try place.update(db) // UPDATE -try place.update(db, columns: ...) // UPDATE -try place.updateChanges(db, from: ...) // Maybe UPDATE -try place.updateChanges(db) { ... } // Maybe UPDATE -try place.updateChanges(db) // Maybe UPDATE (Record class only) -try place.delete(db) // DELETE -try place.exists(db) - -// Type methods -try Place.deleteAll(db) // DELETE -try Place.deleteAll(db, keys:...) // DELETE -try Place.deleteOne(db, key:...) // DELETE -``` - -- `insert`, `update`, `save` and `delete` can throw a [DatabaseError](#error-handling). - -- `update` and `updateChanges` can also throw a [PersistenceError](#persistenceerror), should the update fail because there is no matching row in the database. - - When saving an object that may or may not already exist in the database, prefer the `save` method: - -- `save` makes sure your values are stored in the database. - - It performs an UPDATE if the record has a non-null primary key, and then, if no row was modified, an INSERT. It directly perfoms an INSERT if the record has no primary key, or a null primary key. - - Despite the fact that it may execute two SQL statements, `save` behaves as an atomic operation: GRDB won't allow any concurrent thread to sneak in (see [concurrency](#concurrency)). - -- `delete` returns whether a database row was deleted or not. - -**All primary keys are supported**, including composite primary keys that span several columns, and the [implicit rowid primary key](#the-implicit-rowid-primary-key). - - -### Customizing the Persistence Methods - -Your custom type may want to perform extra work when the persistence methods are invoked. - -For example, it may want to have its UUID automatically set before inserting. Or it may want to validate its values before saving. - -When you subclass [Record](#record-class), you simply have to override the customized method, and call `super`: - -```swift -class Player : Record { - var uuid: UUID? - - override func insert(_ db: Database) throws { - if uuid == nil { - uuid = UUID() - } - try super.insert(db) - } -} -``` - -If you use the raw [PersistableRecord] protocol, use one of the *special methods* `performInsert`, `performUpdate`, `performSave`, `performDelete`, or `performExists`: - -```swift -struct Link : PersistableRecord { - var url: URL - - func insert(_ db: Database) throws { - try validate() - try performInsert(db) - } - - func update(_ db: Database, columns: Set) throws { - try validate() - try performUpdate(db, columns: columns) - } - - func validate() throws { - if url.host == nil { - throw ValidationError("url must be absolute.") - } - } -} -``` - -> :point_up: **Note**: the special methods `performInsert`, `performUpdate`, etc. are reserved for your custom implementations. Do not use them elsewhere. Do not provide another implementation for those methods. -> -> :point_up: **Note**: it is recommended that you do not implement your own version of the `save` method. Its default implementation forwards the job to `update` or `insert`: these are the methods that may need customization, not `save`. - - -## Codable Records - -Record types that adopt an archival protocol ([Codable, Encodable or Decodable](https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types)) get free database support just by declaring conformance to the desired [record protocols](#record-protocols-overview): - -```swift -// Declare a record... -struct Player: Codable, FetchableRecord, PersistableRecord { - var name: String - var score: Int -} - -// ...and there you go: -try dbQueue.write { db in - try Player(name: "Arthur", score: 100).insert(db) - let players = try Player.fetchAll(db) -} -``` - -Codable records encode and decode their properties according to their own implementation of the Encodable and Decodable protocols. Yet databases have specific requirements: - -- Properties are always coded according to their preferred database representation, when they have one (all [values](#values) that adopt the [DatabaseValueConvertible](#custom-value-types) protocol). -- You can customize the encoding and decoding of dates and uuids. -- Complex properties (arrays, dictionaries, nested structs, etc.) are stored as JSON. - -For more information about Codable records, see: - -- [JSON Columns] -- [Date and UUID Coding Strategies] -- [The userInfo Dictionary] -- [Tip: Derive Columns from Coding Keys](#tip-derive-columns-from-coding-keys) - -> :bulb: **Tip**: see the [Demo Application](DemoApps/GRDBDemoiOS/README.md) for a sample app that uses Codable records. - - -### JSON Columns - -When a [Codable record](#codable-records) contains a property that is not a simple [value](#values) (Bool, Int, String, Date, Swift enums, etc.), that value is encoded and decoded as a **JSON string**. For example: - -```swift -enum AchievementColor: String, Codable { - case bronze, silver, gold -} - -struct Achievement: Codable { - var name: String - var color: AchievementColor -} - -struct Player: Codable, FetchableRecord, PersistableRecord { - var name: String - var score: Int - var achievements: [Achievement] // stored in a JSON column -} - -try! dbQueue.write { db in - // INSERT INTO player (name, score, achievements) - // VALUES ( - // 'Arthur', - // 100, - // '[{"color":"gold","name":"Use Codable Records"}]') - let achievement = Achievement(name: "Use Codable Records", color: .gold) - let player = Player(name: "Arthur", score: 100, achievements: [achievement]) - try player.insert(db) -} -``` - -GRDB uses the standard [JSONDecoder](https://developer.apple.com/documentation/foundation/jsondecoder) and [JSONEncoder](https://developer.apple.com/documentation/foundation/jsonencoder) from Foundation. By default, Data values are handled with the `.base64` strategy, Date with the `.millisecondsSince1970` strategy, and non conforming floats with the `.throw` strategy. - -You can customize the JSON format by implementing those methods: - -```swift -protocol FetchableRecord { - static func databaseJSONDecoder(for column: String) -> JSONDecoder -} - -protocol MutablePersistableRecord { - static func databaseJSONEncoder(for column: String) -> JSONEncoder -} -``` - -> :bulb: **Tip**: Make sure you set the JSONEncoder `sortedKeys` option, available from iOS 11.0+, macOS 10.13+, and watchOS 4.0+. This option makes sure that the JSON output is stable. This stability is required for [Record Comparison] to work as expected, and database observation tools such as [ValueObservation] to accurately recognize changed records. - - -### Date and UUID Coding Strategies - -By default, [Codable Records] encode and decode their Date and UUID properties as described in the general [Date and DateComponents](#date-and-datecomponents) and [UUID](#uuid) chapters. - -To sum up: dates encode themselves in the "YYYY-MM-DD HH:MM:SS.SSS" format, in the UTC time zone, and decode a variety of date formats and timestamps. UUIDs encode themselves as 16-bytes data blobs, and decode both 16-bytes data blobs and strings such as "E621E1F8-C36C-495A-93FC-0C247A3E6E5F". - -Those behaviors can be overridden: - -```swift -protocol FetchableRecord { - static var databaseDateDecodingStrategy: DatabaseDateDecodingStrategy { get } -} - -protocol MutablePersistableRecord { - static var databaseDateEncodingStrategy: DatabaseDateEncodingStrategy { get } - static var databaseUUIDEncodingStrategy: DatabaseUUIDEncodingStrategy { get } -} -``` - -See [DatabaseDateDecodingStrategy](https://groue.github.io/GRDB.swift/docs/4.0/Enums/DatabaseDateDecodingStrategy.html), [DatabaseDateEncodingStrategy](https://groue.github.io/GRDB.swift/docs/4.0/Enums/DatabaseDateEncodingStrategy.html), and [DatabaseUUIDEncodingStrategy](https://groue.github.io/GRDB.swift/docs/4.0/Enums/DatabaseUUIDEncodingStrategy.html) to learn about all available strategies. - -> :point_up: **Note**: there is no customization of uuid decoding, because UUID can already decode all its encoded variants (16-bytes blobs, and uuid strings). - - -### The userInfo Dictionary - -Your [Codable Records] can be stored in the database, but they may also have other purposes. In this case, you may need to customize their implementations of `Decodable.init(from:)` and `Encodable.encode(to:)`, depending on the context. - -The standard way to provide such context is the `userInfo` dictionary. Implement those properties: - -```swift -protocol FetchableRecord { - static var databaseDecodingUserInfo: [CodingUserInfoKey: Any] { get } -} - -protocol MutablePersistableRecord { - static var databaseEncodingUserInfo: [CodingUserInfoKey: Any] { get } -} -``` - -For example, here is a Player type that customizes its decoding: - -```swift -// A key that holds a decoder's name -let decoderName = CodingUserInfoKey(rawValue: "decoderName")! - -struct Player: FetchableRecord, Decodable { - init(from decoder: Decoder) throws { - // Print the decoder name - let decoderName = decoder.userInfo[decoderName] as? String - print("Decoded from \(decoderName ?? "unknown decoder")") - ... - } -} -``` - -You can have a specific decoding from JSON... - -```swift -// prints "Decoded from JSON" -let decoder = JSONDecoder() -decoder.userInfo = [decoderName: "JSON"] -let player = try decoder.decode(Player.self, from: jsonData) -``` - -... and another one from database rows: - -```swift -extension Player: FetchableRecord { - static let databaseDecodingUserInfo: [CodingUserInfoKey: Any] = [decoderName: "database row"] -} - -// prints "Decoded from database row" -let player = try Player.fetchOne(db, ...) -``` - -> :point_up: **Note**: make sure the `databaseDecodingUserInfo` and `databaseEncodingUserInfo` properties are explicitly declared as `[CodingUserInfoKey: Any]`. If they are not, the Swift compiler may silently miss the protocol requirement, resulting in sticky empty userInfo. - - -### Tip: Derive Columns from Coding Keys - -Codable types are granted with a [CodingKeys](https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types) enum. You can use them to safely define database columns: - -```swift -struct Player: Codable { - var id: Int64 - var name: String - var score: Int -} - -extension Player: FetchableRecord, PersistableRecord { - enum Columns { - static let id = Column(CodingKeys.id) - static let name = Column(CodingKeys.name) - static let score = Column(CodingKeys.score) - } -} -``` - -Those columns let you build requests with the [query interface](#the-query-interface): - -```swift -extension Player { - static func filter(name: String) -> QueryInterfaceRequest { - return filter(Columns.name == name) - } - - static var maximumScore: QueryInterfaceRequest { - return select(max(Columns.score), as: Int.self) - } -} -``` - -Those requests can both fetch... - -```swift -// Fetch values -try dbQueue.read { db in - // SELECT * FROM player WHERE name = 'Arthur' - let arthur = try Player.filter(name: "Arthur").fetchOne(db) // Player? - - // SELECT MAX(score) FROM player - let maxScore = try Player.maximumScore.fetchOne(db) // Int? -} -``` - -... and feed database observation tools such as [ValueObservation]: - -```swift -// Observe changes -try ValueObservation - .trackingOne(Player.maximumScore) - .start(in: dbQueue) { (maxScore: Int?) in - print("The maximum score has changed") - } -``` - - -## Record Class - -**Record** is a class that is designed to be subclassed. It inherits its features from the [FetchableRecord, TableRecord, and PersistableRecord](#record-protocols-overview) protocols. On top of that, Record instances can compare against previous versions of themselves in order to [avoid useless updates](#record-comparison). - -Record subclasses define their custom database relationship by overriding database methods. For example: - -```swift -class Place: Record { - var id: Int64? - var title: String - var isFavorite: Bool - var coordinate: CLLocationCoordinate2D - - init(id: Int64?, title: String, isFavorite: Bool, coordinate: CLLocationCoordinate2D) { - self.id = id - self.title = title - self.isFavorite = isFavorite - self.coordinate = coordinate - super.init() - } - - /// The table name - override class var databaseTableName: String { - return "place" - } - - /// The table columns - enum Columns: String, ColumnExpression { - case id, title, favorite, latitude, longitude - } - - /// Creates a record from a database row - required init(row: Row) { - id = row[Columns.id] - title = row[Columns.title] - isFavorite = row[Columns.favorite] - coordinate = CLLocationCoordinate2D( - latitude: row[Columns.latitude], - longitude: row[Columns.longitude]) - super.init(row: row) - } - - /// The values persisted in the database - override func encode(to container: inout PersistenceContainer) { - container[Columns.id] = id - container[Columns.title] = title - container[Columns.favorite] = isFavorite - container[Columns.latitude] = coordinate.latitude - container[Columns.longitude] = coordinate.longitude - } - - /// Update record ID after a successful insertion - override func didInsert(with rowID: Int64, for column: String?) { - id = rowID - } -} -``` - - -## Record Comparison - -**Records that adopt the [EncodableRecord] protocol can compare against other records, or against previous versions of themselves.** - -This helps avoiding costly UPDATE statements when a record has not been edited. - -- [The `updateChanges` Methods](#the-updatechanges-methods) -- [The `databaseEquals` Method](#the-databaseequals-method) -- [The `databaseChanges` and `hasDatabaseChanges` Methods](#the-databasechanges-and-hasdatabasechanges-methods) - - -### The `updateChanges` Methods - -The `updateChanges` methods perform a database update of the changed columns only (and does nothing if record has no change). - -- `updateChanges(_:from:)` - - This method lets you compare two records: - - ```swift - if let oldPlayer = try Player.fetchOne(db, key: 42) { - var newPlayer = oldPlayer - newPlayer.score = 100 - if try newPlayer.updateChanges(db, from: oldPlayer) { - print("player was modified, and updated in the database") - } else { - print("player was not modified, and database was not hit") - } - } - ``` - -- `updateChanges(_:with:)` - - This method lets you update a record in place: - - ```swift - if var player = try Player.fetchOne(db, key: 42) { - let modified = try player.updateChanges(db) { - $0.score = 100 - } - if modified { - print("player was modified, and updated in the database") - } else { - print("player was not modified, and database was not hit") - } - } - ``` - -- `updateChanges(_:)` (Record class only) - - Instances of the [Record](#record-class) class are able to compare against themselves, and know if they have changes that have not been saved since the last fetch or saving: - - ```swift - // Record class only - if let player = try Player.fetchOne(db, key: 42) { - player.score = 100 - if try player.updateChanges(db) { - print("player was modified, and updated in the database") - } else { - print("player was not modified, and database was not hit") - } - } - ``` - - -### The `databaseEquals` Method - -This method returns whether two records have the same database representation: - -```swift -let oldPlayer: Player = ... -var newPlayer: Player = ... -if newPlayer.databaseEquals(oldPlayer) == false { - try newPlayer.save(db) -} -``` - -> :point_up: **Note**: The comparison is performed on the database representation of records. As long as your record type adopts the EncodableRecord protocol, you don't need to care about Equatable. - - -### The `databaseChanges` and `hasDatabaseChanges` Methods - -`databaseChanges(from:)` returns a dictionary of differences between two records: - -```swift -let oldPlayer = Player(id: 1, name: "Arthur", score: 100) -let newPlayer = Player(id: 1, name: "Arthur", score: 1000) -for (column, oldValue) in newPlayer.databaseChanges(from: oldPlayer) { - print("\(column) was \(oldValue)") -} -// prints "score was 100" -``` - -The [Record](#record-class) class is able to compare against itself: - -```swift -// Record class only -let player = Player(id: 1, name: "Arthur", score: 100) -try player.insert(db) -player.score = 1000 -for (column, oldValue) in player.databaseChanges { - print("\(column) was \(oldValue)") -} -// prints "score was 100" -``` - -[Record](#record-class) instances also have a `hasDatabaseChanges` property: - -```swift -// Record class only -player.score = 1000 -if player.hasDatabaseChanges { - try player.save(db) -} -``` - -`Record.hasDatabaseChanges` is false after a Record instance has been fetched or saved into the database. Subsequent modifications may set it, or not: `hasDatabaseChanges` is based on value comparison. **Setting a property to the same value does not set the changed flag**: - -```swift -let player = Player(name: "Barbara", score: 750) -player.hasDatabaseChanges // true - -try player.insert(db) -player.hasDatabaseChanges // false - -player.name = "Barbara" -player.hasDatabaseChanges // false - -player.score = 1000 -player.hasDatabaseChanges // true -player.databaseChanges // ["score": 750] -``` - -For an efficient algorithm which synchronizes the content of a database table with a JSON payload, check [JSONSynchronization.playground](Playgrounds/JSONSynchronization.playground/Contents.swift). - - -## Record Customization Options - -GRDB records come with many default behaviors, that are designed to fit most situations. Many of those defaults can be customized for your specific needs: - -- [Customizing the Persistence Methods]: define what happens when you call a persistance method such as `player.insert(db)` -- [Conflict Resolution]: Run `INSERT OR REPLACE` queries, and generally define what happens when a persistence method violates a unique index. -- [The Implicit RowID Primary Key]: all about the special `rowid` column. -- [Columns Selected by a Request]: define which columns are selected by requests such as `Player.fetchAll(db)`. -- [Beyond FetchableRecord]: the FetchableRecord protocol is not the end of the story. - -[Codable Records] have a few extra options: - -- [JSON Columns]: control the format of JSON columns. -- [Date and UUID Coding Strategies]: control the format of Date and UUID properties in your Codable records. -- [The userInfo Dictionary]: adapt your Codable implementation for the database. - - -### Conflict Resolution - -**Insertions and updates can create conflicts**: for example, a query may attempt to insert a duplicate row that violates a unique index. - -Those conflicts normally end with an error. Yet SQLite let you alter the default behavior, and handle conflicts with specific policies. For example, the `INSERT OR REPLACE` statement handles conflicts with the "replace" policy which replaces the conflicting row instead of throwing an error. - -The [five different policies](https://www.sqlite.org/lang_conflict.html) are: abort (the default), replace, rollback, fail, and ignore. - -**SQLite let you specify conflict policies at two different places:** - -- In the definition of the database table: - - ```swift - // CREATE TABLE player ( - // id INTEGER PRIMARY KEY AUTOINCREMENT, - // email TEXT UNIQUE ON CONFLICT REPLACE - // ) - try db.create(table: "player") { t in - t.autoIncrementedPrimaryKey("id") - t.column("email", .text).unique(onConflict: .replace) // <-- - } - - // Despite the unique index on email, both inserts succeed. - // The second insert replaces the first row: - try db.execute(sql: "INSERT INTO player (email) VALUES (?)", arguments: ["arthur@example.com"]) - try db.execute(sql: "INSERT INTO player (email) VALUES (?)", arguments: ["arthur@example.com"]) - ``` - -- In each modification query: - - ```swift - // CREATE TABLE player ( - // id INTEGER PRIMARY KEY AUTOINCREMENT, - // email TEXT UNIQUE - // ) - try db.create(table: "player") { t in - t.autoIncrementedPrimaryKey("id") - t.column("email", .text).unique() - } - - // Again, despite the unique index on email, both inserts succeed. - try db.execute(sql: "INSERT OR REPLACE INTO player (email) VALUES (?)", arguments: ["arthur@example.com"]) - try db.execute(sql: "INSERT OR REPLACE INTO player (email) VALUES (?)", arguments: ["arthur@example.com"]) - ``` - -When you want to handle conflicts at the query level, specify a custom `persistenceConflictPolicy` in your type that adopts the PersistableRecord protocol. It will alter the INSERT and UPDATE queries run by the `insert`, `update` and `save` [persistence methods](#persistence-methods): - -```swift -protocol MutablePersistableRecord { - /// The policy that handles SQLite conflicts when records are - /// inserted or updated. - /// - /// This property is optional: its default value uses the ABORT - /// policy for both insertions and updates, so that GRDB generate - /// regular INSERT and UPDATE queries. - static var persistenceConflictPolicy: PersistenceConflictPolicy { get } -} - -struct Player : MutablePersistableRecord { - static let persistenceConflictPolicy = PersistenceConflictPolicy( - insert: .replace, - update: .replace) -} - -// INSERT OR REPLACE INTO player (...) VALUES (...) -try player.insert(db) -``` - -> :point_up: **Note**: the `ignore` policy does not play well at all with the `didInsert` method which notifies the rowID of inserted records. Choose your poison: -> -> - if you specify the `ignore` policy in the database table definition, don't implement the `didInsert` method: it will be called with some random id in case of failed insert. -> - if you specify the `ignore` policy at the query level, the `didInsert` method is never called. -> -> :point_up: **Note**: The `replace` policy may have to delete rows so that inserts and updates can succeed. Those deletions are not reported to [transaction observers](#transactionobserver-protocol) (this might change in a future release of SQLite). - - -### The Implicit RowID Primary Key - -**All SQLite tables have a primary key.** Even when the primary key is not explicit: - -```swift -// No explicit primary key -try db.create(table: "event") { t in - t.column("message", .text) - t.column("date", .datetime) -} - -// No way to define an explicit primary key -try db.create(virtualTable: "book", using: FTS4()) { t in - t.column("title") - t.column("author") - t.column("body") -} -``` - -The implicit primary key is stored in the hidden column `rowid`. Hidden means that `SELECT *` does not select it, and yet it can be selected and queried: `SELECT *, rowid ... WHERE rowid = 1`. - -Some GRDB methods will automatically use this hidden column when a table has no explicit primary key: - -```swift -// SELECT * FROM event WHERE rowid = 1 -let event = try Event.fetchOne(db, key: 1) - -// DELETE FROM book WHERE rowid = 1 -try Book.deleteOne(db, key: 1) -``` - - -#### Exposing the RowID Column - -**By default, a record type that wraps a table without any explicit primary key doesn't know about the hidden rowid column.** - -Without primary key, records don't have any identity, and the [persistence method](#persistence-methods) can behave in undesired fashion: `update()` throws errors, `save()` always performs insertions and may break constraints, `exists()` is always false. - -When SQLite won't let you provide an explicit primary key (as in [full-text](#full-text-search) tables, for example), you may want to make your record type fully aware of the hidden rowid column: - -1. Have the `databaseSelection` static property (from the [TableRecord] protocol) return the hidden rowid column: - - ```swift - struct Event : TableRecord { - static let databaseSelection: [SQLSelectable] = [AllColumns(), Column.rowID] - } - - // When you subclass Record, you need an override: - class Book : Record { - override class var databaseSelection: [SQLSelectable] { - return [AllColums(), Column.rowID] - } - } - ``` - - GRDB will then select the `rowid` column by default: - - ```swift - // SELECT *, rowid FROM event - let events = try Event.fetchAll(db) - ``` - -2. Have `init(row:)` from the [FetchableRecord] protocol consume the "rowid" column: - - ```swift - struct Event : FetchableRecord { - var id: Int64? - - init(row: Row) { - id = row[Column.rowID] - } - } - ``` - - Your fetched records will then know their ids: - - ```swift - let event = try Event.fetchOne(db)! - event.id // some value - ``` - -3. Encode the rowid in `encode(to:)`, and keep it in the `didInsert(with:for:)` method (both from the [PersistableRecord and MutablePersistableRecord](#persistablerecord-protocol) protocols): - - ```swift - struct Event : MutablePersistableRecord { - var id: Int64? - - func encode(to container: inout PersistenceContainer) { - container[Column.rowID] = id - container["message"] = message - container["date"] = date - } - - mutating func didInsert(with rowID: Int64, for column: String?) { - id = rowID - } - } - ``` - - You will then be able to track your record ids, update them, or check for their existence: - - ```swift - let event = Event(message: "foo", date: Date()) - - // Insertion sets the record id: - try event.insert(db) - event.id // some value - - // Record can be updated: - event.message = "bar" - try event.update(db) - - // Record knows if it exists: - event.exists(db) // true - ``` - - -### Beyond FetchableRecord - -**Some GRDB users eventually discover that the [FetchableRecord] protocol does not fit all situations.** Use cases that are not well handled by FetchableRecord include: - -- Your application needs polymorphic row decoding: it decodes some type or another, depending on the values contained in a database row. - -- Your application needs to decode rows with a context: each decoded value should be initialized with some extra value that does not come from the database. - -- Your application needs a record type that supports untrusted databases, and may fail at decoding database rows (throw an error when a row contains invalid values). - -Since those use cases are not well handled by FetchableRecord, don't try to implement them on top of this protocol: you'll just fight the framework. - -Instead, please have a look at the [CustomizedDecodingOfDatabaseRows](Playgrounds/CustomizedDecodingOfDatabaseRows.playground/Contents.swift) playground. You'll run some sample code, and learn how to escape FetchableRecord when you need. And remember that leaving FetchableRecord will not deprive you of [query interface requests](#requests) and generally all SQL generation features of the [TableRecord] and [PersistableRecord] protocols. - - -## Examples of Record Definitions - -We will show below how to declare a record type for the following database table: - -```swift -try dbQueue.write { db in - try db.create(table: "place") { t in - t.autoIncrementedPrimaryKey("id") - t.column("title", .text).notNull() - t.column("favorite", .boolean).notNull().defaults(to: false) - t.column("longitude", .double).notNull() - t.column("latitude", .double).notNull() - } -} -``` - -Each one of the three examples below is correct. You will pick one or the other depending on your personal preferences and the requirements of your application: - -
- Define a Codable struct, and adopt the record protocols you need - -This is the shortest way to define a record type. - -See the [Record Protocols Overview](#record-protocols-overview), and [Codable Records] for more information. - -```swift -struct Place: Codable { - var id: Int64? - var title: String - var favorite: Bool - var latitude: CLLocationDegrees - var longitude: CLLocationDegrees - - var coordinate: CLLocationCoordinate2D { - get { - return CLLocationCoordinate2D( - latitude: latitude, - longitude: longitude) - } - set { - latitude = newValue.latitude - longitude = newValue.longitude - } - } -} - -// SQL generation -extension Place: TableRecord { } - -// Fetching methods -extension Place: FetchableRecord { } - -// Persistence methods -extension Place: MutablePersistableRecord { - /// Update record ID after a successful insertion - mutating func didInsert(with rowID: Int64, for column: String?) { - id = rowID - } -} -``` - -
- -
- Define a plain struct, and adopt the record protocols you need - -See the [Record Protocols Overview](#record-protocols-overview) for more information. - -```swift -struct Place { - var id: Int64? - var title: String - var isFavorite: Bool - var coordinate: CLLocationCoordinate2D -} - -// SQL generation -extension Place: TableRecord { - /// The table columns - enum Columns: String, ColumnExpression { - case id, title, favorite, latitude, longitude - } -} - -// Fetching methods -extension Place: FetchableRecord { - /// Creates a record from a database row - init(row: Row) { - id = row[Columns.id] - title = row[Columns.title] - isFavorite = row[Columns.favorite] - coordinate = CLLocationCoordinate2D( - latitude: row[Columns.latitude], - longitude: row[Columns.longitude]) - } -} - -// Persistence methods -extension Place: MutablePersistableRecord { - /// The values persisted in the database - func encode(to container: inout PersistenceContainer) { - container[Columns.id] = id - container[Columns.title] = title - container[Columns.favorite] = isFavorite - container[Columns.latitude] = coordinate.latitude - container[Columns.longitude] = coordinate.longitude - } - - /// Update record ID after a successful insertion - mutating func didInsert(with rowID: Int64, for column: String?) { - id = rowID - } -} -``` - -
- -
- Subclass the Record class - -See the [Record class](#record-class) for more information. - -```swift -class Place: Record { - var id: Int64? - var title: String - var isFavorite: Bool - var coordinate: CLLocationCoordinate2D - - init(id: Int64?, title: String, isFavorite: Bool, coordinate: CLLocationCoordinate2D) { - self.id = id - self.title = title - self.isFavorite = isFavorite - self.coordinate = coordinate - super.init() - } - - /// The table name - override class var databaseTableName: String { - return "place" - } - - /// The table columns - enum Columns: String, ColumnExpression { - case id, title, favorite, latitude, longitude - } - - /// Creates a record from a database row - required init(row: Row) { - id = row[Columns.id] - title = row[Columns.title] - isFavorite = row[Columns.favorite] - coordinate = CLLocationCoordinate2D( - latitude: row[Columns.latitude], - longitude: row[Columns.longitude]) - super.init(row: row) - } - - /// The values persisted in the database - override func encode(to container: inout PersistenceContainer) { - container[Columns.id] = id - container[Columns.title] = title - container[Columns.favorite] = isFavorite - container[Columns.latitude] = coordinate.latitude - container[Columns.longitude] = coordinate.longitude - } - - /// Update record ID after a successful insertion - override func didInsert(with rowID: Int64, for column: String?) { - id = rowID - } -} -``` - -
- - -## List of Record Methods - -This is the list of record methods, along with their required protocols. The [Record](#record-class) class adopts all these protocols, and adds a few extra methods. - -| Method | Protocols | Notes | -| ------ | --------- | :---: | -| **Core Methods** | | | -| `init(row:)` | [FetchableRecord] | | -| `Type.databaseTableName` | [TableRecord] | | -| `Type.databaseSelection` | [TableRecord] | [*](#columns-selected-by-a-request) | -| `Type.persistenceConflictPolicy` | [PersistableRecord] | [*](#conflict-resolution) | -| `record.encode(to:)` | [PersistableRecord] | | -| `record.didInsert(with:for:)` | [PersistableRecord] | | -| **Insert and Update Records** | | | -| `record.insert(db)` | [PersistableRecord] | | -| `record.save(db)` | [PersistableRecord] | | -| `record.update(db)` | [PersistableRecord] | | -| `record.update(db, columns:...)` | [PersistableRecord] | | -| `record.updateChanges(db, from:...)` | [PersistableRecord] | [*](#record-comparison) | -| `record.updateChanges(db) { ... }` | [PersistableRecord] | [*](#record-comparison) | -| `record.updateChanges(db)` | [Record](#record-class) | [*](#record-comparison) | -| **Delete Records** | | | -| `record.delete(db)` | [PersistableRecord] | | -| `Type.deleteOne(db, key:...)` | [PersistableRecord] | ¹ | -| `Type.deleteAll(db)` | [PersistableRecord] | | -| `Type.deleteAll(db, keys:...)` | [PersistableRecord] | ¹ | -| `Type.filter(...).deleteAll(db)` | [PersistableRecord] | ² | -| **Check Record Existence** | | | -| `record.exists(db)` | [PersistableRecord] | | -| **Convert Record to Dictionary** | | | -| `record.databaseDictionary` | [PersistableRecord] | | -| **Count Records** | | | -| `Type.fetchCount(db)` | [TableRecord] | | -| `Type.filter(...).fetchCount(db)` | [TableRecord] | ² | -| **Fetch Record [Cursors](#cursors)** | | | -| `Type.fetchCursor(db)` | [FetchableRecord] & [TableRecord] | | -| `Type.fetchCursor(db, keys:...)` | [FetchableRecord] & [TableRecord] | ¹ | -| `Type.fetchCursor(db, sql: sql)` | [FetchableRecord] | ³ | -| `Type.fetchCursor(statement)` | [FetchableRecord] | | -| `Type.filter(...).fetchCursor(db)` | [FetchableRecord] & [TableRecord] | ² | -| **Fetch Record Arrays** | | | -| `Type.fetchAll(db)` | [FetchableRecord] & [TableRecord] | | -| `Type.fetchAll(db, keys:...)` | [FetchableRecord] & [TableRecord] | ¹ | -| `Type.fetchAll(db, sql: sql)` | [FetchableRecord] | ³ | -| `Type.fetchAll(statement)` | [FetchableRecord] | | -| `Type.filter(...).fetchAll(db)` | [FetchableRecord] & [TableRecord] | ² | -| **Fetch Individual Records** | | | -| `Type.fetchOne(db)` | [FetchableRecord] & [TableRecord] | | -| `Type.fetchOne(db, key:...)` | [FetchableRecord] & [TableRecord] | ¹ | -| `Type.fetchOne(db, sql: sql)` | [FetchableRecord] | ³ | -| `Type.fetchOne(statement)` | [FetchableRecord] | | -| `Type.filter(...).fetchOne(db)` | [FetchableRecord] & [TableRecord] | ² | -| **[Record Comparison]** | | | -| `record.databaseEquals(...)` | [PersistableRecord] | | -| `record.databaseChanges(from:...)` | [PersistableRecord] | | -| `record.updateChanges(db, from:...)` | [PersistableRecord] | | -| `record.updateChanges(db) { ... }` | [PersistableRecord] | | -| `record.hasDatabaseChanges` | [Record](#record-class) | | -| `record.databaseChanges` | [Record](#record-class) | | -| `record.updateChanges(db)` | [Record](#record-class) | | - -¹ All unique keys are supported: primary keys (single-column, composite, [implicit RowID](#the-implicit-rowid-primary-key)) and unique indexes: - -```swift -try Player.fetchOne(db, key: 1) // Player? -try Player.fetchOne(db, key: ["email": "arthur@example.com"]) // Player? -try Country.fetchAll(db, keys: ["FR", "US"]) // [Country] -``` - -² See [Fetch Requests](#requests): - -```swift -let request = Player.filter(emailColumn != nil).order(nameColumn) -let players = try request.fetchAll(db) // [Player] -let count = try request.fetchCount(db) // Int -``` - -³ See [SQL queries](#fetch-queries): - -```swift -let player = try Player.fetchOne(db, sql: "SELECT * FROM player WHERE id = ?", arguments: [1]) // Player? -``` - - See [Prepared Statements](#prepared-statements): - -```swift -let statement = try db.makeSelectStatement(sql: "SELECT * FROM player WHERE id = ?") -let player = try Player.fetchOne(statement, arguments: [1]) // Player? -``` - - -The Query Interface -=================== - -**The query interface lets you write pure Swift instead of SQL:** - -```swift -try dbQueue.write { db in - // Update database schema - try db.create(table: "wine") { t in ... } - - // Fetch records - let wines = try Wine.filter(origin == "Burgundy").order(price).fetchAll(db) - - // Count - let count = try Wine.filter(color == Color.red).fetchCount(db) - - // Delete - try Wine.filter(corked == true).deleteAll(db) -} -``` - -You need to open a [database connection](#database-connections) before you can query the database. - -Please bear in mind that the query interface can not generate all possible SQL queries. You may also *prefer* writing SQL, and this is just OK. From little snippets to full queries, your SQL skills are welcome: - -```swift -try dbQueue.write { db in - // Update database schema (with SQL) - try db.execute(sql: "CREATE TABLE wine (...)") - - // Fetch records (with SQL) - let wines = try Wine.fetchAll(db, - sql: "SELECT * FROM wine WHERE origin = ? ORDER BY price", - arguments: ["Burgundy"]) - - // Count (with an SQL snippet) - let count = try Wine - .filter(sql: "color = ?", arguments: [Color.red]) - .fetchCount(db) - - // Delete (with SQL) - try db.execute(sql: "DELETE FROM wine WHERE corked") -} -``` - -So don't miss the [SQL API](#sqlite-api). - -- [Database Schema](#database-schema) -- [Requests](#requests) -- [Expressions](#expressions) - - [SQL Operators](#sql-operators) - - [SQL Functions](#sql-functions) -- [Fetching from Requests] -- [Fetching by Key](#fetching-by-key) -- [Fetching Aggregated Values](#fetching-aggregated-values) -- [Delete Requests](#delete-requests) -- [Custom Requests](#custom-requests) -- [Associations and Joins](Documentation/AssociationsBasics.md) - - -## Database Schema - -Once granted with a [database connection](#database-connections), you can setup your database schema without writing SQL: - -- [Create Tables](#create-tables) -- [Modify Tables](#modify-tables) -- [Drop Tables](#drop-tables) -- [Create Indexes](#create-indexes) - - -### Create Tables - -```swift -// CREATE TABLE place ( -// id INTEGER PRIMARY KEY AUTOINCREMENT, -// title TEXT, -// favorite BOOLEAN NOT NULL DEFAULT 0, -// latitude DOUBLE NOT NULL, -// longitude DOUBLE NOT NULL -// ) -try db.create(table: "place") { t in - t.autoIncrementedPrimaryKey("id") - t.column("title", .text) - t.column("favorite", .boolean).notNull().defaults(to: false) - t.column("longitude", .double).notNull() - t.column("latitude", .double).notNull() -} -``` - -The `create(table:)` method covers nearly all SQLite table creation features. For virtual tables, see [Full-Text Search](#full-text-search), or use raw SQL. - -SQLite itself has many reference documents about table creation: [CREATE TABLE](https://www.sqlite.org/lang_createtable.html), [Datatypes In SQLite Version 3](https://www.sqlite.org/datatype3.html), [SQLite Foreign Key Support](https://www.sqlite.org/foreignkeys.html), [ON CONFLICT](https://www.sqlite.org/lang_conflict.html), [The WITHOUT ROWID Optimization](https://www.sqlite.org/withoutrowid.html). - -**Configure table creation**: - -```swift -// CREATE TABLE example ( ... ) -try db.create(table: "example") { t in ... } - -// CREATE TEMPORARY TABLE example IF NOT EXISTS ( -try db.create(table: "example", temporary: true, ifNotExists: true) { t in -``` - -> :bulb: **Tip**: database table names should be singular, and camel-cased. Make them look like Swift identifiers: `place`, `country`, `postalAddress`, 'httpRequest'. -> -> This will help you using [Associations] when you need them. Database table names that follow another naming convention are totally OK, but you will need to perform extra configuration. - -**Add regular columns** with their name and eventual type (text, integer, double, numeric, boolean, blob, date and datetime) - see [SQLite data types](https://www.sqlite.org/datatype3.html): - -```swift -// CREATE TABLE example ( -// a, -// name TEXT, -// creationDate DATETIME, -try db.create(table: "example") { t in - t.column("a") - t.column("name", .text) - t.column("creationDate", .datetime) -``` - -Define **not null** columns, and set **default** values: - -```swift - // email TEXT NOT NULL, - t.column("email", .text).notNull() - - // name TEXT NOT NULL DEFAULT 'Anonymous', - t.column("name", .text).notNull().defaults(to: "Anonymous") -``` - -Use an individual column as **primary**, **unique**, or **foreign key**. When defining a foreign key, the referenced column is the primary key of the referenced table (unless you specify otherwise): - -```swift - // id INTEGER PRIMARY KEY AUTOINCREMENT, - t.autoIncrementedPrimaryKey("id") - - // uuid TEXT PRIMARY KEY, - t.column("uuid", .text).primaryKey() - - // email TEXT UNIQUE, - t.column("email", .text).unique() - - // countryCode TEXT REFERENCES country(code) ON DELETE CASCADE, - t.column("countryCode", .text).references("country", onDelete: .cascade) -``` - -> :bulb: **Tip**: when you need an integer primary key that automatically generates unique values, it is highly recommended that you use the `autoIncrementedPrimaryKey` method: -> -> ```swift -> try db.create(table: "example") { t in -> t.autoIncrementedPrimaryKey("id") -> ... -> } -> ``` -> -> The reason for this recommendation is that auto-incremented primary keys prevent the reuse of ids. This prevents your app or [database observation tools](#database-changes-observation) to think that a row was updated, when it was actually deleted, then replaced. Depending on your application needs, this may be acceptable. But usually it is not. - -**Create an index** on the column: - -```swift - t.column("score", .integer).indexed() -``` - -For extra index options, see [Create Indexes](#create-indexes) below. - -**Perform integrity checks** on individual columns, and SQLite will only let conforming rows in. In the example below, the `$0` closure variable is a column which lets you build any SQL [expression](#expressions). - -```swift - // name TEXT CHECK (LENGTH(name) > 0) - // score INTEGER CHECK (score > 0) - t.column("name", .text).check { length($0) > 0 } - t.column("score", .integer).check(sql: "score > 0") -``` - -Other **table constraints** can involve several columns: - -```swift - // PRIMARY KEY (a, b), - t.primaryKey(["a", "b"]) - - // UNIQUE (a, b) ON CONFLICT REPLACE, - t.uniqueKey(["a", "b"], onConfict: .replace) - - // FOREIGN KEY (a, b) REFERENCES parents(c, d), - t.foreignKey(["a", "b"], references: "parents") - - // CHECK (a + b < 10), - t.check(Column("a") + Column("b") < 10) - - // CHECK (a + b < 10) - t.check(sql: "a + b < 10") -} -``` - -### Modify Tables - -SQLite lets you rename tables, and add columns to existing tables: - -```swift -// ALTER TABLE referer RENAME TO referrer -try db.rename(table: "referer", to: "referrer") - -// ALTER TABLE player ADD COLUMN url TEXT -try db.alter(table: "player") { t in - t.add(column: "url", .text) -} -``` - -> :point_up: **Note**: SQLite restricts the possible table alterations, and may require you to recreate dependent triggers or views. See the documentation of the [ALTER TABLE](https://www.sqlite.org/lang_altertable.html) for details. See [Advanced Database Schema Changes](#advanced-database-schema-changes) for a way to lift restrictions. - - -### Drop Tables - -Drop tables with the `drop(table:)` method: - -```swift -try db.drop(table: "obsolete") -``` - -### Create Indexes - -Create indexes with the `create(index:)` method: - -```swift -// CREATE UNIQUE INDEX byEmail ON users(email) -try db.create(index: "byEmail", on: "users", columns: ["email"], unique: true) -``` - -Relevant SQLite documentation: - -- [CREATE INDEX](https://www.sqlite.org/lang_createindex.html) -- [Indexes On Expressions](https://www.sqlite.org/expridx.html) -- [Partial Indexes](https://www.sqlite.org/partialindex.html) - - -## Requests - -**The query interface requests** let you fetch values from the database: - -```swift -let request = Player.filter(emailColumn != nil).order(nameColumn) -let players = try request.fetchAll(db) // [Player] -let count = try request.fetchCount(db) // Int -``` - -All requests start from **a type** that adopts the `TableRecord` protocol, such as a `Record` subclass (see [Records](#records)): - -```swift -class Player : Record { ... } -``` - -Declare the table **columns** that you want to use for filtering, or sorting: - -```swift -let idColumn = Column("id") -let nameColumn = Column("name") -``` - -You can also declare column enums, if you prefer: - -```swift -// Columns.id and Columns.name can be used just as -// idColumn and nameColumn declared above. -enum Columns: String, ColumnExpression { - case id - case name -} -``` - -You can now build requests with the following methods: `all`, `none`, `select`, `distinct`, `filter`, `matching`, `group`, `having`, `order`, `reversed`, `limit`, `joining`, `including`. All those methods return another request, which you can further refine by applying another method: `Player.select(...).filter(...).order(...)`. - -- `all()`, `none()`: the requests for all rows, or no row. - - ```swift - // SELECT * FROM player - Player.all() - ``` - - The hidden `rowid` column can be selected as well [when you need it](#the-implicit-rowid-primary-key). - -- `select(...)` and `select(..., as:)` define the selected columns. See [Columns Selected by a Request]. - - ```swift - // SELECT name FROM player - Player.select(nameColumn, as: String.self) - ``` - -- `annotated(with: ...)` extends the selection with [association aggregates](Documentation/AssociationsBasics.md#association-aggregates). - - ```swift - // SELECT team.*, COUNT(DISTINCT player.rowid) AS playerCount - // FROM team - // LEFT JOIN player ON player.teamId = team.id - // GROUP BY team.id - Team.annotated(with: Team.players.count) - ``` - -- `distinct()` performs uniquing. - - ```swift - // SELECT DISTINCT name FROM player - Player.select(nameColumn, as: String.self).distinct() - ``` - -- `filter(expression)` applies conditions. - - ```swift - // SELECT * FROM player WHERE id IN (1, 2, 3) - Player.filter([1,2,3].contains(idColumn)) - - // SELECT * FROM player WHERE (name IS NOT NULL) AND (height > 1.75) - Player.filter(nameColumn != nil && heightColumn > 1.75) - ``` - -- `filter(key:)` and `filter(keys:)` apply conditions on primary keys and unique keys: - - ```swift - // SELECT * FROM player WHERE id = 1 - Player.filter(key: 1) - - // SELECT * FROM country WHERE isoCode IN ('FR', 'US') - Country.filter(keys: ["FR", "US"]) - - // SELECT * FROM citizenship WHERE citizenId = 1 AND countryCode = 'FR' - Citizenship.filter(key: ["citizenId": 1, "countryCode": "FR"]) - - // SELECT * FROM player WHERE email = 'arthur@example.com' - Player.filter(key: ["email": "arthur@example.com"]) - ``` - -- `matching(pattern)` performs [full-text search](#full-text-search). - - ```swift - // SELECT * FROM document WHERE document MATCH 'sqlite database' - let pattern = FTS3Pattern(matchingAllTokensIn: "SQLite database") - Document.matching(pattern) - ``` - - When the pattern is nil, no row will match. - -- `group(expression, ...)` groups rows. - - ```swift - // SELECT name, MAX(score) FROM player GROUP BY name - Player - .select(nameColumn, max(scoreColumn)) - .group(nameColumn) - ``` - -- `having(expression)` applies conditions on grouped rows. - - ```swift - // SELECT team, MAX(score) FROM player GROUP BY team HAVING MIN(score) >= 1000 - Player - .select(teamColumn, max(scoreColumn)) - .group(teamColumn) - .having(min(scoreColumn) >= 1000) - ``` - -- `having(aggregate)` applies conditions on grouped rows, according to an [association aggregate](Documentation/AssociationsBasics.md#association-aggregates). - - ```swift - // SELECT team.* - // FROM team - // LEFT JOIN player ON player.teamId = team.id - // GROUP BY team.id - // HAVING COUNT(DISTINCT player.rowid) >= 5 - Team.having(Team.players.count >= 5) - ``` - -- `order(ordering, ...)` sorts. - - ```swift - // SELECT * FROM player ORDER BY name - Player.order(nameColumn) - - // SELECT * FROM player ORDER BY score DESC, name - Player.order(scoreColumn.desc, nameColumn) - ``` - - Each `order` call clears any previous ordering: - - ```swift - // SELECT * FROM player ORDER BY name - Player.order(scoreColumn).order(nameColumn) - ``` - -- `orderByPrimaryKey()` sorts by primary key: - - ```swift - // SELECT * FROM player ORDER BY id - Player.orderByPrimaryKey() - - // SELECT * FROM country ORDER BY code - Country.orderByPrimaryKey() - - // SELECT * FROM citizenship ORDER BY citizenId, countryCode - Citizenship.orderByPrimaryKey() - ``` - -- `reversed()` reverses the eventual orderings. - - ```swift - // SELECT * FROM player ORDER BY score ASC, name DESC - Player.order(scoreColumn.desc, nameColumn).reversed() - ``` - - If no ordering was already specified, this method has no effect: - - ```swift - // SELECT * FROM player - Player.all().reversed() - ``` - -- `limit(limit, offset: offset)` limits and pages results. - - ```swift - // SELECT * FROM player LIMIT 5 - Player.limit(5) - - // SELECT * FROM player LIMIT 5 OFFSET 10 - Player.limit(5, offset: 10) - ``` - -- `joining(...)` and `including(...)` fetch and join records through [Associations]. - - ```swift - // SELECT player.*, team.* - // FROM player - // JOIN team ON team.id = player.teamId - Player.including(required: Player.team) - ``` - -You can refine requests by chaining those methods: - -```swift -// SELECT * FROM player WHERE (email IS NOT NULL) ORDER BY name -Player.order(nameColumn).filter(emailColumn != nil) -``` - -The `select`, `order`, `group`, and `limit` methods ignore and replace previously applied selection, orderings, grouping, and limits. On the opposite, `filter`, `matching`, and `having` methods extend the query: - -```swift -Player // SELECT * FROM player - .filter(nameColumn != nil) // WHERE (name IS NOT NULL) - .filter(emailColumn != nil) // AND (email IS NOT NULL) - .order(nameColumn) // - ignored - - .reversed() // - ignored - - .order(scoreColumn) // ORDER BY score - .limit(20, offset: 40) // - ignored - - .limit(10) // LIMIT 10 -``` - - -Raw SQL snippets are also accepted, with eventual [arguments](http://groue.github.io/GRDB.swift/docs/4.0/Structs/StatementArguments.html): - -```swift -// SELECT DATE(creationDate), COUNT(*) FROM player WHERE name = 'Arthur' GROUP BY date(creationDate) -Player - .select(sql: "DATE(creationDate), COUNT(*)") - .filter(sql: "name = ?", arguments: ["Arthur"]) - .group(sql: "DATE(creationDate)") -``` - - -### Columns Selected by a Request - -By default, query interface requests select all columns: - -```swift -// SELECT * FROM player -let request = Player.all() -``` - -**The selection can be changed for each individual requests, or for all requests built from a given type.** - -The `select(...)` and `select(..., as:)` methods change the selection of a single request (see [Fetching from Requests] for detailed information): - -```swift -let request = Player.select(max(Column("score"))) -let maxScore: Int? = try Int.fetchOne(db, request) -``` - -The default selection for a record type is controlled by the `databaseSelection` property: - -```swift -struct RestrictedPlayer : TableRecord { - static let databaseTableName = "player" - static let databaseSelection: [SQLSelectable] = [Column("id"), Column("name")] -} - -struct ExtendedPlayer : TableRecord { - static let databaseTableName = "player" - static let databaseSelection: [SQLSelectable] = [AllColumns(), Column.rowID] -} - -// SELECT id, name FROM player -let request = RestrictedPlayer.all() - -// SELECT *, rowid FROM player -let request = ExtendedPlayer.all() -``` - -> :point_up: **Note**: make sure the `databaseSelection` property is explicitly declared as `[SQLSelectable]`. If it is not, the Swift compiler may silently miss the protocol requirement, resulting in sticky `SELECT *` requests. To verify your setup, see the [How do I print a request as SQL?](#how-do-i-print-a-request-as-sql) FAQ. - - -## Expressions - -Feed [requests](#requests) with SQL expressions built from your Swift code: - - -### SQL Operators - -- `=`, `<>`, `<`, `<=`, `>`, `>=`, `IS`, `IS NOT` - - Comparison operators are based on the Swift operators `==`, `!=`, `===`, `!==`, `<`, `<=`, `>`, `>=`: - - ```swift - // SELECT * FROM player WHERE (name = 'Arthur') - Player.filter(nameColumn == "Arthur") - - // SELECT * FROM player WHERE (name IS NULL) - Player.filter(nameColumn == nil) - - // SELECT * FROM player WHERE (score IS 1000) - Player.filter(scoreColumn === 1000) - - // SELECT * FROM rectangle WHERE width < height - Rectangle.filter(widthColumn < heightColumn) - ``` - - > :point_up: **Note**: SQLite string comparison, by default, is case-sensitive and not Unicode-aware. See [string comparison](#string-comparison) if you need more control. - -- `*`, `/`, `+`, `-` - - SQLite arithmetic operators are derived from their Swift equivalent: - - ```swift - // SELECT ((temperature * 1.8) + 32) AS farenheit FROM planet - Planet.select((temperatureColumn * 1.8 + 32).aliased("farenheit")) - ``` - - > :point_up: **Note**: an expression like `nameColumn + "rrr"` will be interpreted by SQLite as a numerical addition (with funny results), not as a string concatenation. - -- `AND`, `OR`, `NOT` - - The SQL logical operators are derived from the Swift `&&`, `||` and `!`: - - ```swift - // SELECT * FROM player WHERE ((NOT verified) OR (score < 1000)) - Player.filter(!verifiedColumn || scoreColumn < 1000) - ``` - - When you want to join a sequence of expressions with `AND` or `OR` operators, use `joined(operator:)`: - - ```swift - // SELECT * FROM player WHERE (verified AND (score >= 1000) AND (name IS NOT NULL)) - let conditions = [ - verifiedColumn, - scoreColumn >= 1000, - nameColumn != nil] - Player.filter(conditions.joined(operator: .and)) - ``` - - When the sequence is empty, `joined(operator: .and)` returns true, and `joined(operator: .or)` returns false: - - ```swift - // SELECT * FROM player WHERE 1 - Player.filter([].joined(operator: .and)) - - // SELECT * FROM player WHERE 0 - Player.filter([].joined(operator: .or)) - ``` - -- `BETWEEN`, `IN`, `NOT IN` - - To check inclusion in a Swift sequence (array, set, range…), call the `contains` method: - - ```swift - // SELECT * FROM player WHERE id IN (1, 2, 3) - Player.filter([1, 2, 3].contains(idColumn)) - - // SELECT * FROM player WHERE id NOT IN (1, 2, 3) - Player.filter(![1, 2, 3].contains(idColumn)) - - // SELECT * FROM player WHERE score BETWEEN 0 AND 1000 - Player.filter((0...1000).contains(scoreColumn)) - - // SELECT * FROM player WHERE (score >= 0) AND (score < 1000) - Player.filter((0..<1000).contains(scoreColumn)) - - // SELECT * FROM player WHERE initial BETWEEN 'A' AND 'N' - Player.filter(("A"..."N").contains(initialColumn)) - - // SELECT * FROM player WHERE (initial >= 'A') AND (initial < 'N') - Player.filter(("A"..<"N").contains(initialColumn)) - ``` - - > :point_up: **Note**: SQLite string comparison, by default, is case-sensitive and not Unicode-aware. See [string comparison](#string-comparison) if you need more control. - -- `LIKE` - - The SQLite LIKE operator is available as the `like` method: - - ```swift - // SELECT * FROM player WHERE (email LIKE '%@example.com') - Player.filter(emailColumn.like("%@example.com")) - ``` - - > :point_up: **Note**: the SQLite LIKE operator is case-insensitive but not Unicode-aware. For example, the expression `'a' LIKE 'A'` is true but `'æ' LIKE 'Æ'` is false. - -- `MATCH` - - The full-text MATCH operator is available through [FTS3Pattern](#fts3pattern) (for FTS3 and FTS4 tables) and [FTS5Pattern](#fts5pattern) (for FTS5): - - FTS3 and FTS4: - - ```swift - let pattern = FTS3Pattern(matchingAllTokensIn: "SQLite database") - - // SELECT * FROM document WHERE document MATCH 'sqlite database' - Document.matching(pattern) - - // SELECT * FROM document WHERE content MATCH 'sqlite database' - Document.filter(contentColumn.match(pattern)) - ``` - - FTS5: - - ```swift - let pattern = FTS5Pattern(matchingAllTokensIn: "SQLite database") - - // SELECT * FROM document WHERE document MATCH 'sqlite database' - Document.matching(pattern) - ``` - - -### SQL Functions - -- `ABS`, `AVG`, `COUNT`, `LENGTH`, `MAX`, `MIN`, `SUM`: - - Those are based on the `abs`, `average`, `count`, `length`, `max`, `min` and `sum` Swift functions: - - ```swift - // SELECT MIN(score), MAX(score) FROM player - Player.select(min(scoreColumn), max(scoreColumn)) - - // SELECT COUNT(name) FROM player - Player.select(count(nameColumn)) - - // SELECT COUNT(DISTINCT name) FROM player - Player.select(count(distinct: nameColumn)) - ``` - -- `IFNULL` - - Use the Swift `??` operator: - - ```swift - // SELECT IFNULL(name, 'Anonymous') FROM player - Player.select(nameColumn ?? "Anonymous") - - // SELECT IFNULL(name, email) FROM player - Player.select(nameColumn ?? emailColumn) - ``` - -- `LOWER`, `UPPER` - - The query interface does not give access to those SQLite functions. Nothing against them, but they are not unicode aware. - - Instead, GRDB extends SQLite with SQL functions that call the Swift built-in string functions `capitalized`, `lowercased`, `uppercased`, `localizedCapitalized`, `localizedLowercased` and `localizedUppercased`: - - ```swift - Player.select(nameColumn.uppercased()) - ``` - - > :point_up: **Note**: When *comparing* strings, you'd rather use a [collation](#string-comparison): - > - > ```swift - > let name: String = ... - > - > // Not recommended - > nameColumn.uppercased() == name.uppercased() - > - > // Better - > nameColumn.collating(.caseInsensitiveCompare) == name - > ``` - -- Custom SQL functions and aggregates - - You can apply your own [custom SQL functions and aggregates](#custom-functions-): - - ```swift - let f = DatabaseFunction("f", ...) - - // SELECT f(name) FROM player - Player.select(f.apply(nameColumn)) - ``` - - -## Fetching from Requests - -Once you have a request, you can fetch the records at the origin of the request: - -```swift -// Some request based on `Player` -let request = Player.filter(...)... // QueryInterfaceRequest - -// Fetch players: -try request.fetchCursor(db) // A Cursor of Player -try request.fetchAll(db) // [Player] -try request.fetchOne(db) // Player? -``` - -For example: - -```swift -let allPlayers = try Player.fetchAll(db) // [Player] -let arthur = try Player.filter(nameColumn == "Arthur").fetchOne(db) // Player? -``` - -See [fetching methods](#fetching-methods) for information about the `fetchCursor`, `fetchAll` and `fetchOne` methods. - -**You sometimes want to fetch other values**. - -The simplest way is to use the request as an argument to a fetching method of the desired type: - -```swift -// Fetch an Int -let request = Player.select(max(scoreColumn)) -let maxScore = try Int.fetchOne(db, request) // Int? - -// Fetch a Row -let request = Player.select(min(scoreColumn), max(scoreColumn)) -let row = try Row.fetchOne(db, request)! // Row -let minScore = row[0] as Int? -let maxScore = row[1] as Int? -``` - -When you also want to use database observation tools such as [ValueObservation], you have to go one step further, and change the type of the request: - -- When you change the selection, prefer the `select(..., as:)` method: - - ```swift - // A request of Int - let request = Player.select(max(scoreColumn), as: Int.self) - - // Simple fetch - let maxScore = try dbQueue.read { db in - try request.fetchOne(db) // Int? - } - - // Observe with ValueObservation - try ValueObservation - .trackingOne(request) - .start(in: dbQueue) { (maxScore: Int?) in - print("The maximum score has changed") - } - ``` - -- Otherwise, use `asRequest(of:)`. Here is an example that uses [Associations]: - - ```swift - struct BookInfo: FetchableRecord, Decodable { - var book: Book - var author: Author - } - - // A request of BookInfo - let request = Book - .including(required: Book.author) - .asRequest(of: BookInfo.self) - - // Simple fetch - let bookInfos = try dbQueue.read { db in - try request.fetchAll(db) // [BookInfo] - } - - // Observe with ValueObservation - try ValueObservation - .trackingAll(request) - .start(in: dbQueue) { (bookInfos: [BookInfo]) in - print("Books have changed") - } - ``` - - -## Fetching By Key - -**Fetching records according to their primary key** is a very common task. It has a shortcut which accepts any single-column primary key: - -```swift -// SELECT * FROM player WHERE id = 1 -try Player.fetchOne(db, key: 1) // Player? - -// SELECT * FROM player WHERE id IN (1, 2, 3) -try Player.fetchAll(db, keys: [1, 2, 3]) // [Player] - -// SELECT * FROM country WHERE isoCode = 'FR' -try Country.fetchOne(db, key: "FR") // Country? - -// SELECT * FROM country WHERE isoCode IN ('FR', 'US') -try Country.fetchAll(db, keys: ["FR", "US"]) // [Country] -``` - -When the table has no explicit primary key, GRDB uses the [hidden "rowid" column](#the-implicit-rowid-primary-key): - -```swift -// SELECT * FROM document WHERE rowid = 1 -try Document.fetchOne(db, key: 1) // Document? -``` - -For multiple-column primary keys and unique keys defined by unique indexes, provide a dictionary: - -```swift -// SELECT * FROM citizenship WHERE citizenId = 1 AND countryCode = 'FR' -try Citizenship.fetchOne(db, key: ["citizenId": 1, "countryCode": "FR"]) // Citizenship? - -// SELECT * FROM player WHERE email = 'arthur@example.com' -try Player.fetchOne(db, key: ["email": "arthur@example.com"]) // Player? -``` - -**When you want to build a request and plan to fetch from it later**, use the `filter(key:)` and `filter(keys:)` methods: - -```swift -// SELECT * FROM player WHERE id = 1 -let request = Player.filter(key: 1) -let player = try request.fetchOne(db) // Player? - -// SELECT * FROM player WHERE id IN (1, 2, 3) -let request = Player.filter(keys: [1, 2, 3]) -let players = try request.fetchAll(db) // [Player] - -// SELECT * FROM country WHERE isoCode = 'FR' -let request = Country.filter(key: "FR") -let country = try request.fetchOne(db) // Country? - -// SELECT * FROM country WHERE isoCode IN ('FR', 'US') -let request = Country.filter(keys: ["FR", "US"]) -let countries = try request.fetchAll(db) // [Country] - -// SELECT * FROM citizenship WHERE citizenId = 1 AND countryCode = 'FR' -let request = Citizenship.filter(key: ["citizenId": 1, "countryCode": "FR"]) -let citizenship = request.fetchOne(db) // Citizenship? - -// SELECT * FROM player WHERE email = 'arthur@example.com' -let request = Player.filter(key: ["email": "arthur@example.com"]) -let player = try request.fetchOne(db) // Player? -``` - -Those requests can feed [ValueObservation]: - -```swift -try ValueObservation. - .trackingOne(Player.filter(key: 1)) - .start(in: dbQueue) { (player: Player?) in - print("Player 1 has changed") - } -``` - - -## Fetching Aggregated Values - -**Requests can count.** The `fetchCount()` method returns the number of rows that would be returned by a fetch request: - -```swift -// SELECT COUNT(*) FROM player -let count = try Player.fetchCount(db) // Int - -// SELECT COUNT(*) FROM player WHERE email IS NOT NULL -let count = try Player.filter(emailColumn != nil).fetchCount(db) - -// SELECT COUNT(DISTINCT name) FROM player -let count = try Player.select(nameColumn).distinct().fetchCount(db) - -// SELECT COUNT(*) FROM (SELECT DISTINCT name, score FROM player) -let count = try Player.select(nameColumn, scoreColumn).distinct().fetchCount(db) -``` - - -**Other aggregated values** can also be selected and fetched (see [SQL Functions](#sql-functions)): - -```swift -let request = Player.select(max(scoreColumn)) -let maxScore = try Int.fetchOne(db, request) // Int? - -let request = Player.select(min(scoreColumn), max(scoreColumn)) -let row = try Row.fetchOne(db, request)! // Row -let minScore = row[0] as Int? -let maxScore = row[1] as Int? -``` - - -## Delete Requests - -**Requests can delete records**, with the `deleteAll()` method: - -```swift -// DELETE FROM player WHERE email IS NULL -let request = Player.filter(emailColumn == nil) -try request.deleteAll(db) -``` - -> :point_up: **Note** Deletion methods are only available for records that adopts the [PersistableRecord] protocol. - -**Deleting records according to their primary key** is also quite common. It has a shortcut which accepts any single-column primary key: - -```swift -// DELETE FROM player WHERE id = 1 -try Player.deleteOne(db, key: 1) - -// DELETE FROM player WHERE id IN (1, 2, 3) -try Player.deleteAll(db, keys: [1, 2, 3]) - -// DELETE FROM country WHERE isoCode = 'FR' -try Country.deleteOne(db, key: "FR") - -// DELETE FROM country WHERE isoCode IN ('FR', 'US') -try Country.deleteAll(db, keys: ["FR", "US"]) -``` - -When the table has no explicit primary key, GRDB uses the [hidden "rowid" column](#the-implicit-rowid-primary-key): - -```swift -// DELETE FROM document WHERE rowid = 1 -try Document.deleteOne(db, key: 1) -``` - -For multiple-column primary keys and unique keys defined by unique indexes, provide a dictionary: - -```swift -// DELETE FROM citizenship WHERE citizenId = 1 AND countryCode = 'FR' -try Citizenship.deleteOne(db, key: ["citizenId": 1, "countryCode": "FR"]) - -// DELETE FROM player WHERE email = 'arthur@example.com' -Player.deleteOne(db, key: ["email": "arthur@example.com"]) -``` - - -## Custom Requests - -Until now, we have seen [requests](#requests) created from any type that adopts the [TableRecord] protocol: - -```swift -let request = Player.all() // QueryInterfaceRequest -``` - -Those requests of type `QueryInterfaceRequest` can fetch and count: - -```swift -try request.fetchCursor(db) // A Cursor of Player -try request.fetchAll(db) // [Player] -try request.fetchOne(db) // Player? -try request.fetchCount(db) // Int -``` - -**When the query interface can not generate the SQL you need**, you can still fallback to [raw SQL](#fetch-queries): - -```swift -// Custom SQL is always welcome -try Player.fetchAll(db, sql: "SELECT ...") // [Player] -``` - -But you may prefer to bring some elegance back in, and build custom requests: - -```swift -// No custom SQL in sight -try Player.customRequest().fetchAll(db) // [Player] -``` - -Custom requests can also feed [ValueObservation]: - -```swift -try ValueObservation. - .trackingAll(Player.customRequest(...)) - .start(in: dbQueue) { (players: [Player]) in - print("Players have changed") - } -``` - -- [FetchRequest Protocol](#fetchrequest-protocol) -- [Building Custom Requests](#building-custom-requests) -- [Fetching From Custom Requests](#fetching-from-custom-requests) - - -### FetchRequest Protocol - -**FetchRequest** is the protocol for all requests that run from a single select statement, and know how fetched rows should be interpreted: - -```swift -protocol FetchRequest: DatabaseRegionConvertible { - /// The type that tells how fetched rows should be decoded - associatedtype RowDecoder - - /// A tuple that contains a prepared statement, and an eventual row adapter. - func prepare(_ db: Database, forSingleResult singleResult: Bool) throws -> (SelectStatement, RowAdapter?) - - /// The number of rows fetched by the request. - func fetchCount(_ db: Database) throws -> Int -} -``` - -When the `RowDecoder` associated type is [Row](#fetching-rows), or a [value](#value-queries), or a type that conforms to [FetchableRecord], the request can fetch: see [Fetching From Custom Requests](#fetching-from-custom-requests) below. - -The `prepare(_:forSingleResult:)` method accepts a database connection, a `singleResult` hint, and returns a prepared statement and an optional row adapter. Conforming types can use the `singleResult` hint as an optimization opportunity, and return a [prepared statement](#prepared-statements) that fetches at most one row, with a `LIMIT` SQL clause, when possible. The optional row adapter helps presenting the fetched rows in the way expected by the row decoders (see [row adapters](#row-adapters)). - -The `fetchCount` method has a default implementation that builds a correct but naive SQL query from the statement returned by `prepare`: `SELECT COUNT(*) FROM (...)`. Adopting types can refine the counting SQL by customizing their `fetchCount` implementation. - -The base `DatabaseRegionConvertible` protocol is involved in [database observation](#database-changes-observation). For more information, see [DatabaseRegion], [DatabaseRegionObservation], and [ValueObservation]. - -The FetchRequest protocol is adopted, for example, by [query interface requests](#requests): - -```swift -// A FetchRequest whose RowDecoder associated type is Player: -let request = Player.all() -``` - - -### Building Custom Requests - -**To build custom requests**, you can use one of the built-in requests, derive requests from other requests, or create your own request type that adopts the [FetchRequest](#fetchrequest-protocol) protocol. - -- [SQLRequest](http://groue.github.io/GRDB.swift/docs/4.0/Structs/SQLRequest.html) is a fetch request built from raw SQL. For example: - - ```swift - extension Player { - static func filter(color: Color) -> SQLRequest { - return SQLRequest( - sql: "SELECT * FROM player WHERE color = ?" - arguments: [color]) - } - } - - // [Player] - try Player.filter(color: .red).fetchAll(db) - ``` - - In Swift 5, you can build SQLRequest with [SQL Interpolation]: - - ```swift - // Swift 5 - extension Player { - static func filter(color: Color) -> SQLRequest { - return "SELECT * FROM player WHERE color = \(color)" - } - } - ``` - -- The `asRequest(of:)` method changes the type fetched by the request. It is useful, for example, when you use [Associations]: - - ```swift - struct BookInfo: FetchableRecord, Decodable { - var book: Book - var author: Author - } - - let request = Book - .including(required: Book.author) - .asRequest(of: BookInfo.self) - - // [BookInfo] - try request.fetchAll(db) - ``` - -- The `adapted(_:)` method eases the consumption of complex rows with [row adapters](#row-adapters). See [Joined Queries Support](#joined-queries-support) for some sample code that uses this method. - -- [AnyFetchRequest](http://groue.github.io/GRDB.swift/docs/4.0/Structs/AnyFetchRequest.html): a [type-erased](http://chris.eidhof.nl/post/type-erasers-in-swift/) request. - - -### Fetching From Custom Requests - -A type adopting [FetchRequest](#fetchrequest-protocol) knows exactly what it has to do when its RowDecoder associated type can decode database rows ([Row](#fetching-rows) itself, [values](#value-queries), or [FetchableRecord]): - -```swift -let rowRequest = ... // Some FetchRequest that fetches Row -try request.fetchCursor(db) // A cursor of rows - -let playerRequest = ... // Some FetchRequest that fetches Player -try request.fetchAll(db) // [Player] - -let intRequest = ... // Some FetchRequest that fetches Int -try request.fetchOne(db) // Int? -``` - -For example: - -```swift -let playerRequest = SQLRequest( - sql: "SELECT * FROM player WHERE color = ?" - arguments: [color]) -try request.fetchAll(db) // [Player] -``` - -See [fetching methods](#fetching-methods) for information about the `fetchCursor`, `fetchAll` and `fetchOne` methods. - -The RowDecoder type associated with the FetchRequest does not have to be Row, DatabaseValueConvertible, or FetchableRecord. See the [Beyond FetchableRecord] chapter for more information. - - -## Migrations - -**Migrations** are a convenient way to alter your database schema over time in a consistent and easy way. - -Migrations run in order, once and only once. When a user upgrades your application, only non-applied migrations are run. - -Inside each migration, you typically [define and update your database tables](#database-schema) according to your evolving application needs: - -```swift -var migrator = DatabaseMigrator() - -// 1st migration -migrator.registerMigration("v1") { db in - try db.create(table: "author") { t in ... } - try db.create(table: "book") { t in ... } - try db.create(index: ...) -} - -// 2nd migration -migrator.registerMigration("v2") { db in - try db.alter(table: "author") { t in ... } -} - -// Migrations for future versions will be inserted here: -// -// // 3rd migration -// migrator.registerMigration("...") { db in -// ... -// } -``` - -**Each migration runs in a separate transaction.** Should one throw an error, its transaction is rollbacked, subsequent migrations do not run, and the error is eventually thrown by `migrator.migrate(dbQueue)`. - -**The memory of applied migrations is stored in the database itself** (in a reserved table). - -You migrate the database up to the latest version with the `migrate(_:)` method: - -```swift -try migrator.migrate(dbQueue) // or migrator.migrate(dbPool) -``` - -To migrate a database up to a specific version, use `migrate(_:upTo:)`: - -```swift -try migrator.migrate(dbQueue, upTo: "v2") -``` - -Migrations can only run forward: - -```swift -try migrator.migrate(dbQueue, upTo: "v2") -try migrator.migrate(dbQueue, upTo: "v1") -// fatal error: database is already migrated beyond migration "v1" -``` - -Check if a migration has been applied: - -```swift -let appliedMigrations = try migrator.appliedMigrations(in: dbQueue) -if appliedMigrations.contains("v2") { - // "v2" migration has been applied -} -``` - -### The `eraseDatabaseOnSchemaChange` Option - -A DatabaseMigrator can automatically wipe out the full database content, and recreate the whole database from scratch, if it detects that a migration has changed its definition: - -```swift -var migrator = DatabaseMigrator() -migrator.eraseDatabaseOnSchemaChange = true -``` - -Beware! This flag can destroy your precious users' data! - -Yet it may be useful in those two situations: - -1. During application development, as you are still designing migrations, and the schema changes often. - - In this case, it is recommended that this flag does not ship in the distributed application: - - ```swift - var migrator = DatabaseMigrator() - #if DEBUG - // Speed up development by nuking the database when migrations change - migrator.eraseDatabaseOnSchemaChange = true - #endif - ``` - -2. When the database content can easily be recreated, such as a cache for some downloaded data. - -The `eraseDatabaseOnSchemaChange` option triggers a recreation of the database if the migrator detects a *schema change*. A schema change is any difference in the `sqlite_master` table, which contains the SQL used to create database tables, indexes, triggers, and views. - - -### Advanced Database Schema Changes - -SQLite does not support many schema changes, and won't let you drop a table column with "ALTER TABLE ... DROP COLUMN ...", for example. - -Yet any kind of schema change is still possible. The SQLite documentation explains in detail how to do so: https://www.sqlite.org/lang_altertable.html#otheralter. This technique requires the temporary disabling of foreign key checks, and is supported by the `registerMigrationWithDeferredForeignKeyCheck` function: - -```swift -// Add a NOT NULL constraint on player.name: -migrator.registerMigrationWithDeferredForeignKeyCheck("AddNotNullCheckOnName") { db in - try db.create(table: "new_player") { t in - t.autoIncrementedPrimaryKey("id") - t.column("name", .text).notNull() - } - try db.execute(sql: "INSERT INTO new_player SELECT * FROM player") - try db.drop(table: "player") - try db.rename(table: "new_player", to: "player") -} -``` - -While your migration code runs with disabled foreign key checks, those are re-enabled and checked at the end of the migration, regardless of eventual errors. - - -## Full-Text Search - -**Full-Text Search is an efficient way to search a corpus of textual documents.** - -```swift -// Create full-text tables -try db.create(virtualTable: "book", using: FTS4()) { t in // or FTS3(), or FTS5() - t.column("author") - t.column("title") - t.column("body") -} - -// Populate full-text table with records or SQL -try Book(...).insert(db) -try db.execute( - sql: "INSERT INTO book (author, title, body) VALUES (?, ?, ?)", - arguments: [...]) - -// Build search patterns -let pattern = FTS3Pattern(matchingPhrase: "Moby-Dick") - -// Search with the query interface or SQL -let books = try Book.matching(pattern).fetchAll(db) -let books = try Book.fetchAll(db, - sql: "SELECT * FROM book WHERE book MATCH ?", - arguments: [pattern]) -``` - -- **[Choosing the Full-Text Engine](#choosing-the-full-text-engine)** -- **[Enabling FTS5 Support](#enabling-fts5-support)** -- **Create Full-Text Virtual Tables**: [FTS3/4](#create-fts3-and-fts4-virtual-tables), [FTS5](#create-fts5-virtual-tables) -- **Choosing a Tokenizer**: [FTS3/4](#fts3-and-fts4-tokenizers), [FTS5](#fts5-tokenizers) -- **Search Patterns**: [FTS3/4](#fts3pattern), [FTS5](#fts5pattern) -- **Sorting by Relevance**: [FTS5](#fts5-sorting-by-relevance) -- **External Content Full-Text Tables**: [FTS4/5](#external-content-full-text-tables) -- **Full-Text Record**s: [FTS3/4/5](#full-text-records) -- **Unicode Full-Text Gotchas**: [FTS3/4/5](#unicode-full-text-gotchas). Unicorns don't exist. -- **Custom Tokenizers**: [FTS5](Documentation/FTS5Tokenizers.md). Leverage extra full-text features such as synonyms or stop words. Avoid [unicode gotchas](#unicode-full-text-gotchas). -- **Sample Code**: [WWDC Companion](https://github.com/groue/WWDCCompanion), an iOS app that stores, displays, and lets the user search the WWDC 2016 sessions. - - - -### Choosing the Full-Text Engine - -**SQLite supports three full-text engines: [FTS3, FTS4](https://www.sqlite.org/fts3.html) and [FTS5](https://www.sqlite.org/fts5.html).** - -Generally speaking, FTS5 is better than FTS4 which improves on FTS3. But this does not really tell which engine to choose for your application. Instead, make your choice depend on: - -- **The full-text features needed by the application**: - - | Full-Text Needs | FTS3 | FTS4 | FTS5 | - | -------------------------------------------------------------------------- | :--: | :--: | :--: | - | :question: Queries | | | | - | **Words searches** (documents that contain "database") | X | X | X | - | **Prefix searches** (documents that contain a word starting with "data") | X | X | X | - | **Phrases searches** (documents that contain the phrase "SQLite database") | X | X | X | - | **Boolean searches** (documents that contain "SQLite" or "database") | X | X | X | - | **Proximity search** (documents that contain "SQLite" near "database") | X | X | X | - | :scissors: Tokenization | | | | - | **Ascii case insensitivity** (have "DATABASE" match "database") | X | X | X | - | **Unicode case insensitivity** (have "ÉLÉGANCE" match "élégance") | X | X | X | - | **Latin diacritics insensitivity** (have "elegance" match "élégance") | X | X | X | - | **English Stemming** (have "frustration" match "frustrated") | X | X | X | - | **English Stemming and Ascii case insensitivity** | X | X | X | - | **English Stemming and Unicode case insensitivity** | | | X | - | **English Stemming and Latin diacritics insensitivity** | | | X | - | **Synonyms** (have "1st" match "first") | ¹ | ¹ | X ² | - | **Pinyin and Romaji** (have "romaji" match "ローマ字") | ¹ | ¹ | X ² | - | **Stop words** (don't index, and don't match words like "and" and "the") | ¹ | ¹ | X ² | - | **Spell checking** (have "alamaba" match "alabama") | ¹ | ¹ | ¹ | - | :bowtie: Other Features | | | | - | **Ranking** (sort results by relevance) | ¹ | ¹ | X | - | **Snippets** (display a few words around a match) | X | X | X | - - ¹ Requires extra setup, possibly hard to implement. - - ² Requires a [custom tokenizer](Documentation/FTS5Tokenizers.md). - - For a full feature list, read the SQLite documentation. Some missing features can be achieved with extra application code. - -- **The speed versus disk space constraints.** Roughly speaking, FTS4 and FTS5 are faster than FTS3, but use more space. FTS4 only supports content compression. - -- **The location of the indexed text in your database schema.** Only FTS4 and FTS5 support "contentless" and "external content" tables. - -- **The SQLite library integrated in your application.** The version of SQLite that ships with iOS, macOS and watchOS supports FTS3 and FTS4 out of the box, but not always FTS5. To use FTS5, see [Enabling FTS5 Support](#enabling-fts5-support). - -- See [FST3 vs. FTS4](https://www.sqlite.org/fts3.html#differences_between_fts3_and_fts4) and [FTS5 vs. FTS3/4](https://www.sqlite.org/fts5.html#appendix_a) for more differences. - -> :point_up: **Note**: In case you were still wondering, it is recommended to read the SQLite documentation: [FTS3 & FTS4](https://www.sqlite.org/fts3.html) and [FTS5](https://www.sqlite.org/fts5.html). - - -### Create FTS3 and FTS4 Virtual Tables - -**FTS3 and FTS4 full-text tables store and index textual content.** - -Create tables with the `create(virtualTable:using:)` method: - -```swift -// CREATE VIRTUAL TABLE document USING fts3(content) -try db.create(virtualTable: "document", using: FTS3()) { t in - t.column("content") -} - -// CREATE VIRTUAL TABLE document USING fts4(content) -try db.create(virtualTable: "document", using: FTS4()) { t in - t.column("content") -} -``` - -**All columns in a full-text table contain text.** If you need to index a table that contains other kinds of values, you need an ["external content" full-text table](#external-content-full-text-tables). - -You can specify a [tokenizer](#fts3-and-fts4-tokenizers): - -```swift -// CREATE VIRTUAL TABLE book USING fts4( -// tokenize=porter, -// author, -// title, -// body -// ) -try db.create(virtualTable: "book", using: FTS4()) { t in - t.tokenizer = .porter - t.column("author") - t.column("title") - t.column("body") -} -``` - -FTS4 supports [options](https://www.sqlite.org/fts3.html#fts4_options): - -```swift -// CREATE VIRTUAL TABLE book USING fts4( -// content, -// uuid, -// content="", -// compress=zip, -// uncompress=unzip, -// prefix="2,4", -// notindexed=uuid, -// languageid=lid -// ) -try db.create(virtualTable: "document", using: FTS4()) { t in - t.content = "" - t.compress = "zip" - t.uncompress = "unzip" - t.prefixes = [2, 4] - t.column("content") - t.column("uuid").notIndexed() - t.column("lid").asLanguageId() -} -``` - -The `content` option is involved in "contentless" and "external content" full-text tables. GRDB can help you defining full-text tables that automatically synchronize with their content table. See [External Content Full-Text Tables](#external-content-full-text-tables). - - -See [SQLite documentation](https://www.sqlite.org/fts3.html) for more information. - - -### FTS3 and FTS4 Tokenizers - -**A tokenizer defines what "matching" means.** Depending on the tokenizer you choose, full-text searches won't return the same results. - -SQLite ships with three built-in FTS3/4 tokenizers: `simple`, `porter` and `unicode61` that use different algorithms to match queries with indexed content: - -```swift -try db.create(virtualTable: "book", using: FTS4()) { t in - // Pick one: - t.tokenizer = .simple // default - t.tokenizer = .porter - t.tokenizer = .unicode61(...) -} -``` - -See below some examples of matches: - -| content | query | simple | porter | unicode61 | -| ----------- | ---------- | :----: | :----: | :-------: | -| Foo | Foo | X | X | X | -| Foo | FOO | X | X | X | -| Jérôme | Jérôme | X ¹ | X ¹ | X ¹ | -| Jérôme | JÉRÔME | | | X ¹ | -| Jérôme | Jerome | | | X ¹ | -| Database | Databases | | X | | -| Frustration | Frustrated | | X | | - -¹ Don't miss [Unicode Full-Text Gotchas](#unicode-full-text-gotchas) - -- **simple** - - ```swift - try db.create(virtualTable: "book", using: FTS4()) { t in - t.tokenizer = .simple // default - } - ``` - - The default "simple" tokenizer is case-insensitive for ASCII characters. It matches "foo" with "FOO", but not "Jérôme" with "JÉRÔME". - - It does not provide stemming, and won't match "databases" with "database". - - It does not strip diacritics from latin script characters, and won't match "jérôme" with "jerome". - -- **porter** - - ```swift - try db.create(virtualTable: "book", using: FTS4()) { t in - t.tokenizer = .porter - } - ``` - - The "porter" tokenizer compares English words according to their roots: it matches "database" with "databases", and "frustration" with "frustrated". - - It does not strip diacritics from latin script characters, and won't match "jérôme" with "jerome". - -- **unicode61** - - ```swift - try db.create(virtualTable: "book", using: FTS4()) { t in - t.tokenizer = .unicode61() - t.tokenizer = .unicode61(diacritics: .keep) - } - ``` - - The "unicode61" tokenizer is case-insensitive for unicode characters. It matches "Jérôme" with "JÉRÔME". - - It strips diacritics from latin script characters by default, and matches "jérôme" with "jerome". This behavior can be disabled, as in the example above. - - It does not provide stemming, and won't match "databases" with "database". - -See [SQLite tokenizers](https://www.sqlite.org/fts3.html#tokenizer) for more information. - - -### FTS3Pattern - -**Full-text search in FTS3 and FTS4 tables is performed with search patterns:** - -- `database` matches all documents that contain "database" -- `data*` matches all documents that contain a word starting with "data" -- `SQLite database` matches all documents that contain both "SQLite" and "database" -- `SQLite OR database` matches all documents that contain "SQLite" or "database" -- `"SQLite database"` matches all documents that contain the "SQLite database" phrase - -**Not all search patterns are valid**: they must follow the [Full-Text Index Queries Grammar](https://www.sqlite.org/fts3.html#full_text_index_queries). - -The FTS3Pattern type helps you validating patterns, and building valid patterns from untrusted strings (such as strings typed by users): - -```swift -struct FTS3Pattern { - init(rawPattern: String) throws - init?(matchingAnyTokenIn string: String) - init?(matchingAllTokensIn string: String) - init?(matchingPhrase string: String) -} -``` - -The first initializer validates your raw patterns against the query grammar, and may throw a [DatabaseError](#databaseerror): - -```swift -// OK: FTS3Pattern -let pattern = try FTS3Pattern(rawPattern: "sqlite AND database") -// DatabaseError: malformed MATCH expression: [AND] -let pattern = try FTS3Pattern(rawPattern: "AND") -``` - -The three other initializers don't throw. They build a valid pattern from any string, **including strings provided by users of your application**. They let you find documents that match all given words, any given word, or a full phrase, depending on the needs of your application: - -```swift -let query = "SQLite database" -// Matches documents that contain "SQLite" or "database" -let pattern = FTS3Pattern(matchingAnyTokenIn: query) -// Matches documents that contain both "SQLite" and "database" -let pattern = FTS3Pattern(matchingAllTokensIn: query) -// Matches documents that contain "SQLite database" -let pattern = FTS3Pattern(matchingPhrase: query) -``` - -They return nil when no pattern could be built from the input string: - -```swift -let pattern = FTS3Pattern(matchingAnyTokenIn: "") // nil -let pattern = FTS3Pattern(matchingAnyTokenIn: "*") // nil -``` - -FTS3Pattern are regular [values](#values). You can use them as query [arguments](http://groue.github.io/GRDB.swift/docs/4.0/Structs/StatementArguments.html): - -```swift -let documents = try Document.fetchAll(db, - sql: "SELECT * FROM document WHERE content MATCH ?", - arguments: [pattern]) -``` - -Use them in the [query interface](#the-query-interface): - -```swift -// Search in all columns -let documents = try Document.matching(pattern).fetchAll(db) - -// Search in a specific column: -let documents = try Document.filter(Column("content").match(pattern)).fetchAll(db) -``` - - -### Enabling FTS5 Support - -When the FTS3 and FTS4 full-text engines don't suit your needs, you may want to use FTS5. See [Choosing the Full-Text Engine](#choosing-the-full-text-engine) to help you make a decision. - -The version of SQLite that ships with iOS, macOS and watchOS does not always support the FTS5 engine. To enable FTS5 support, you'll need to install GRDB with one of those installation techniques: - -1. Use the GRDB.swift CocoaPod with a custom compilation option, as below. It uses the system SQLite, which is compiled with FTS5 support, but only on iOS 11.4+ / macOS 10.13+ / watchOS 4.3+: - - ```ruby - pod 'GRDB.swift' - platform :ios, '11.4' # or above - - post_install do |installer| - installer.pods_project.targets.select { |target| target.name == "GRDB.swift" }.each do |target| - target.build_configurations.each do |config| - config.build_settings['OTHER_SWIFT_FLAGS'] = "$(inherited) -D SQLITE_ENABLE_FTS5" - end - end - end - ``` - - > :warning: **Warning**: make sure you use the right platform version! You will get runtime errors on devices with a lower version. - - > :point_up: **Note**: there used to be a GRDBPlus CocoaPod with pre-enabled FTS5 support. This CocoaPod is deprecated: please switch to the above technique. - -2. Use the GRDB.swift/SQLCipher CocoaPod subspec (see [encryption](#encryption)): - - ```ruby - pod 'GRDB.swift/SQLCipher' - ``` - -3. Use a [custom SQLite build] and activate the `SQLITE_ENABLE_FTS5` compilation option. - - -### Create FTS5 Virtual Tables - -**FTS5 full-text tables store and index textual content.** - -To use FTS5, you'll need a [custom SQLite build] that activates the `SQLITE_ENABLE_FTS5` compilation option. - -Create FTS5 tables with the `create(virtualTable:using:)` method: - -```swift -// CREATE VIRTUAL TABLE document USING fts5(content) -try db.create(virtualTable: "document", using: FTS5()) { t in - t.column("content") -} -``` - -**All columns in a full-text table contain text.** If you need to index a table that contains other kinds of values, you need an ["external content" full-text table](#external-content-full-text-tables). - -You can specify a [tokenizer](#fts5-tokenizers): - -```swift -// CREATE VIRTUAL TABLE book USING fts5( -// tokenize='porter', -// author, -// title, -// body -// ) -try db.create(virtualTable: "book", using: FTS5()) { t in - t.tokenizer = .porter() - t.column("author") - t.column("title") - t.column("body") -} -``` - -FTS5 supports [options](https://www.sqlite.org/fts5.html#fts5_table_creation_and_initialization): - -```swift -// CREATE VIRTUAL TABLE book USING fts5( -// content, -// uuid UNINDEXED, -// content='table', -// content_rowid='id', -// prefix='2 4', -// columnsize=0, -// detail=column -// ) -try db.create(virtualTable: "document", using: FTS5()) { t in - t.column("content") - t.column("uuid").notIndexed() - t.content = "table" - t.contentRowID = "id" - t.prefixes = [2, 4] - t.columnSize = 0 - t.detail = "column" -} -``` - -The `content` and `contentRowID` options are involved in "contentless" and "external content" full-text tables. GRDB can help you defining full-text tables that automatically synchronize with their content table. See [External Content Full-Text Tables](#external-content-full-text-tables). - -See [SQLite documentation](https://www.sqlite.org/fts5.html) for more information. - - -### FTS5 Tokenizers - -**A tokenizer defines what "matching" means.** Depending on the tokenizer you choose, full-text searches won't return the same results. - -SQLite ships with three built-in FTS5 tokenizers: `ascii`, `porter` and `unicode61` that use different algorithms to match queries with indexed content. - -```swift -try db.create(virtualTable: "book", using: FTS5()) { t in - // Pick one: - t.tokenizer = .unicode61() // default - t.tokenizer = .unicode61(...) - t.tokenizer = .ascii - t.tokenizer = .porter(...) -} -``` - -See below some examples of matches: - -| content | query | ascii | unicode61 | porter on ascii | porter on unicode61 | -| ----------- | ---------- | :----: | :-------: | :-------------: | :-----------------: | -| Foo | Foo | X | X | X | X | -| Foo | FOO | X | X | X | X | -| Jérôme | Jérôme | X ¹ | X ¹ | X ¹ | X ¹ | -| Jérôme | JÉRÔME | | X ¹ | | X ¹ | -| Jérôme | Jerome | | X ¹ | | X ¹ | -| Database | Databases | | | X | X | -| Frustration | Frustrated | | | X | X | - -¹ Don't miss [Unicode Full-Text Gotchas](#unicode-full-text-gotchas) - -- **unicode61** - - ```swift - try db.create(virtualTable: "book", using: FTS5()) { t in - t.tokenizer = .unicode61() - t.tokenizer = .unicode61(diacritics: .keep) - } - ``` - - The default "unicode61" tokenizer is case-insensitive for unicode characters. It matches "Jérôme" with "JÉRÔME". - - It strips diacritics from latin script characters by default, and matches "jérôme" with "jerome". This behavior can be disabled, as in the example above. - - It does not provide stemming, and won't match "databases" with "database". - -- **ascii** - - ```swift - try db.create(virtualTable: "book", using: FTS5()) { t in - t.tokenizer = .ascii - } - ``` - - The "ascii" tokenizer is case-insensitive for ASCII characters. It matches "foo" with "FOO", but not "Jérôme" with "JÉRÔME". - - It does not provide stemming, and won't match "databases" with "database". - - It does not strip diacritics from latin script characters, and won't match "jérôme" with "jerome". - -- **porter** - - ```swift - try db.create(virtualTable: "book", using: FTS5()) { t in - t.tokenizer = .porter() // porter wrapping unicode61 (the default) - t.tokenizer = .porter(.ascii) // porter wrapping ascii - t.tokenizer = .porter(.unicode61(diacritics: .keep)) // porter wrapping unicode61 without diacritics stripping - } - ``` - - The porter tokenizer is a wrapper tokenizer which compares English words according to their roots: it matches "database" with "databases", and "frustration" with "frustrated". - - It strips diacritics from latin script characters if it wraps unicode61, and does not if it wraps ascii (see the example above). - -See [SQLite tokenizers](https://www.sqlite.org/fts5.html#tokenizers) for more information, and [custom FTS5 tokenizers](Documentation/FTS5Tokenizers.md) in order to add your own tokenizers. - - -### FTS5Pattern - -**Full-text search in FTS5 tables is performed with search patterns:** - -- `database` matches all documents that contain "database" -- `data*` matches all documents that contain a word starting with "data" -- `SQLite database` matches all documents that contain both "SQLite" and "database" -- `SQLite OR database` matches all documents that contain "SQLite" or "database" -- `"SQLite database"` matches all documents that contain the "SQLite database" phrase - -**Not all search patterns are valid**: they must follow the [Full-Text Query Syntax](https://www.sqlite.org/fts5.html#full_text_query_syntax). - -The FTS5Pattern type helps you validating patterns, and building valid patterns from untrusted strings (such as strings typed by users): - -```swift -extension Database { - func makeFTS5Pattern(rawPattern: String, forTable table: String) throws -> FTS5Pattern -} - -struct FTS5Pattern { - init?(matchingAnyTokenIn string: String) - init?(matchingAllTokensIn string: String) - init?(matchingPhrase string: String) -} -``` - -The `Database.makeFTS5Pattern(rawPattern:forTable:)` method validates your raw patterns against the query grammar and the columns of the targeted table, and may throw a [DatabaseError](#databaseerror): - -```swift -// OK: FTS5Pattern -try db.makeFTS5Pattern(rawPattern: "sqlite", forTable: "book") -// DatabaseError: syntax error near \"AND\" -try db.makeFTS5Pattern(rawPattern: "AND", forTable: "book") -// DatabaseError: no such column: missing -try db.makeFTS5Pattern(rawPattern: "missing: sqlite", forTable: "book") -``` - -The FTS5Pattern initializers don't throw. They build a valid pattern from any string, **including strings provided by users of your application**. They let you find documents that match all given words, any given word, or a full phrase, depending on the needs of your application: - -```swift -let query = "SQLite database" -// Matches documents that contain "SQLite" or "database" -let pattern = FTS5Pattern(matchingAnyTokenIn: query) -// Matches documents that contain both "SQLite" and "database" -let pattern = FTS5Pattern(matchingAllTokensIn: query) -// Matches documents that contain "SQLite database" -let pattern = FTS5Pattern(matchingPhrase: query) -// Matches documents that start with "SQLite database" -let pattern = FTS5Pattern(matchingPrefixPhrase: query) -``` - -They return nil when no pattern could be built from the input string: - -```swift -let pattern = FTS5Pattern(matchingAnyTokenIn: "") // nil -let pattern = FTS5Pattern(matchingAnyTokenIn: "*") // nil -``` - -FTS5Pattern are regular [values](#values). You can use them as query [arguments](http://groue.github.io/GRDB.swift/docs/4.0/Structs/StatementArguments.html): - -```swift -let documents = try Document.fetchAll(db, - sql: "SELECT * FROM document WHERE document MATCH ?", - arguments: [pattern]) -``` - -Use them in the [query interface](#the-query-interface): - -```swift -let documents = try Document.matching(pattern).fetchAll(db) -``` - - -### FTS5: Sorting by Relevance - -**FTS5 can sort results by relevance** (most to least relevant): - -```swift -// SQL -let documents = try Document.fetchAll(db, - sql: "SELECT * FROM document WHERE document MATCH ? ORDER BY rank", - arguments: [pattern]) - -// Query Interface -let documents = try Document.matching(pattern).order(Column.rank).fetchAll(db) -``` - -For more information about the ranking algorithm, as well as extra options, read [Sorting by Auxiliary Function Results](https://www.sqlite.org/fts5.html#sorting_by_auxiliary_function_results) - -GRDB does not provide any ranking for FTS3 and FTS4. See SQLite's [Search Application Tips](https://www.sqlite.org/fts3.html#appendix_a) if you really need it. - - -### External Content Full-Text Tables - -**An external content table does not store the indexed text.** Instead, it indexes the text stored in another table. - -This is very handy when you want to index a table that can not be declared as a full-text table (because it contains non-textual values, for example). You just have to define an external content full-text table that refers to the regular table. - -The two tables must be kept up-to-date, so that the full-text index matches the content of the regular table. This synchronization happens automatically if you use the `synchronize(withTable:)` method in your full-text table definition: - -```swift -// A regular table -try db.create(table: "book") { t in - t.column("author", .text) - t.column("title", .text) - t.column("content", .text) - ... -} - -// A full-text table synchronized with the regular table -try db.create(virtualTable: "book_ft", using: FTS4()) { t in // or FTS5() - t.synchronize(withTable: "book") - t.column("author") - t.column("title") - t.column("content") -} -``` - -The eventual content already present in the regular table is indexed, and every insert, update or delete that happens in the regular table is automatically applied to the full-text index. - -For more information, see the SQLite documentation about external content tables: [FTS4](https://www.sqlite.org/fts3.html#_external_content_fts4_tables_), [FTS5](https://sqlite.org/fts5.html#external_content_tables). - -See also [WWDC Companion](https://github.com/groue/WWDCCompanion), a sample app that uses external content tables to store, display, and let the user search the WWDC sessions. - - -#### Deleting Synchronized Full-Text Tables - -Synchronization of full-text tables with their content table happens by the mean of SQL triggers. - -SQLite automatically deletes those triggers when the content (not full-text) table is dropped. - -However, those triggers remain after the full-text table has been dropped. Unless they are dropped too, they will prevent future insertion, updates, and deletions in the content table, and the creation of a new full-text table. - -To drop those triggers, use the `dropFTS4SynchronizationTriggers` or `dropFTS5SynchronizationTriggers` methods: - -```swift -// Create tables -try db.create(table: "book") { t in - ... -} -try db.create(virtualTable: "book_ft", using: FTS4()) { t in - t.synchronize(withTable: "book") - ... -} - -// Drop full-text table -try db.drop(table: "book_ft") -try db.dropFTS4SynchronizationTriggers(forTable: "book_ft") -``` - -> :warning: **Warning**: there was a bug in GRDB up to version 2.3.1 included, which created triggers with a wrong name. If it is possible that the full-text table was created by an old version of GRDB, then delete the synchronization triggers **twice**: once with the name of the deleted full-text table, and once with the name of the content table: -> -> ```swift -> // Drop full-text table -> try db.drop(table: "book_ft") -> try db.dropFTS4SynchronizationTriggers(forTable: "book_ft") -> try db.dropFTS4SynchronizationTriggers(forTable: "book") // Support for GRDB <= 2.3.1 -> ``` - - - -#### Querying External Content Full-Text Tables - -When you need to perform a full-text search, and the external content table contains all the data you need, you can simply query the full-text table. - -But if you need to load columns from the regular table, and in the same time perform a full-text search, then you will need to query both tables at the same time. - -That is because SQLite will throw an error when you try to perform a full-text search on a regular table: - -```swift -// SQLite error 1: unable to use function MATCH in the requested context -// SELECT * FROM book WHERE book MATCH '...' -let books = Book.matching(pattern).fetchAll(db) -``` - -The solution is to perform a joined request, using raw SQL: - -```swift -let sql = """ - SELECT book.* - FROM book - JOIN book_ft - ON book_ft.rowid = book.rowid - AND book_ft MATCH ? - """ -let books = Book.fetchAll(db, sql: sql, arguments: [pattern]) -``` - - -### Full-Text Records - -**You can define [record](#records) types around the full-text virtual tables.** - -However these tables don't have any explicit primary key. Instead, they use the [implicit rowid primary key](#the-implicit-rowid-primary-key): a special hidden column named `rowid`. - -You will have to [expose this hidden column](#exposing-the-rowid-column) in order to fetch, delete, and update full-text records by primary key. - - -### Unicode Full-Text Gotchas - -The SQLite built-in tokenizers for [FTS3, FTS4](#fts3-and-fts4-tokenizers) and [FTS5](#fts5-tokenizers) are generally unicode-aware, with a few caveats, and limitations. - -Generally speaking, matches may fail when content and query don't use the same [unicode normalization](http://unicode.org/reports/tr15/). SQLite actually exhibits inconsistent behavior in this regard. - -For example, for "aimé" to match "aimé", they better have the same normalization: the NFC "aim\u{00E9}" form may not match its NFD "aime\u{0301}" equivalent. Most strings that you get from Swift, UIKit and Cocoa use NFC, so be careful with NFD inputs (such as strings from the HFS+ file system, or strings that you can't trust like network inputs). Use [String.precomposedStringWithCanonicalMapping](https://developer.apple.com/reference/swift/string/1407210-precomposedstringwithcanonicalma) to turn a string into NFC. - -Besides, if you want "fi" to match the ligature "fi" (U+FB01), then you need to normalize your indexed contents and inputs to NFKC or NFKD. Use [String.precomposedStringWithCompatibilityMapping](https://developer.apple.com/reference/swift/string/1407834-precomposedstringwithcompatibili) to turn a string into NFKC. - -Unicode normalization is not the end of the story, because it won't help "Encyclopaedia" match "Encyclopædia", "Mueller", "Müller", "Grossmann", "Großmann", or "Diyarbakır", "DIYARBAKIR". The [String.applyingTransform](https://developer.apple.com/reference/swift/string/1643133-applyingtransform) method can help. - -GRDB lets you write [custom FTS5 tokenizers](Documentation/FTS5Tokenizers.md) that can transparently deal with all these issues. For FTS3 and FTS4, you'll need to pre-process your strings before injecting them in the full-text engine. - -Happy indexing! - - -## Joined Queries Support - -**GRDB helps consuming joined queries with complex selection.** - -In this chapter, we will focus on the extraction of information from complex rows, such as the ones fetched by the query below: - -```sql --- How to consume the left, middle, and right parts of those rows? -SELECT player.*, team.*, MAX(round.score) AS maxScore -FROM player -LEFT JOIN team ON ... -LEFT JOIN round ON ... -GROUP BY ... -``` - -We will not talk about the *generation* of joined queries, which is covered in [Associations]. - -**So what are we talking about?** - -It is difficult to consume rows fetched from complex joined queries, because they often contain several columns with the same name: `id` from table `player`, `id` from table `team`, etc. - -When such ambiguity happens, GRDB row accessors always favor the leftmost matching column. This means that `row["id"]` would give a player id, whithout any obvious way to access the team id. - -A classical technique to avoid this ambiguity is to give each column a unique name. For example: - -```sql --- A classical technique -SELECT player.id AS player_id, player.name AS player_name, team.id AS team_id, team.name AS team_name, team.color AS team_color, MAX(round.score) AS maxScore -FROM player -LEFT JOIN team ON ... -LEFT JOIN round ON ... -GROUP BY ... -``` - -This technique works pretty well, but it has three drawbacks: - -1. The selection becomes hard to read and understand. -2. Such queries are difficult to write by hand. -3. The mangled names are a *very* bad fit for [FetchableRecord] types that expect specific column names. After all, if the `Team` record type can read `SELECT * FROM team ...`, it should be able to read `SELECT ..., team.*, ...` as well. - -We thus need another technique. **Below we'll see how to split rows into slices, and preserve column names.** - -`SELECT player.*, team.*, MAX(round.score) AS maxScore FROM ...` will be splitted into three slices: one that contains player's columns, one that contains team's columns, and a remaining slice that contains remaining column(s). The Player record type will be able to read the first slice, which contains the colums expected by the `Player.init(row:)` initializer. In the same way, the Team record type could read the second slice. - -Unlike the name-mangling technique, splitting rows keeps SQL legible, accepts your hand-crafted SQL queries, and plays as nicely as possible with your existing [record types](#records). - -- [Splitting Rows, an Introduction](#splitting-rows-an-introduction) -- [Splitting Rows, the Record Way](#splitting-rows-the-record-way) -- [Splitting Rows, the Request Way](#splitting-rows-the-request-way) -- [Splitting Rows, the Codable Way](#splitting-rows-the-codable-way) - - -### Splitting Rows, an Introduction - -Let's first write some introductory code, hoping that this chapter will make you understand how pieces fall together. We'll see [later](#splitting-rows-the-record-way) how records will help us streamline the initial approach, how to track changes in joined requests, and how we can use the standard Decodable protocol. - -To split rows, we will use [row adapters](#row-adapters). Row adapters adapt rows so that row consumers see exactly the columns they want. Among other things, row adapters can define several *row scopes* that give access to as many *row slices*. Sounds like a perfect match. - -At the very beginning, there is an SQL query: - -```swift -try dbQueue.read { db in - let sql = """ - SELECT player.*, team.*, MAX(round.score) AS maxScore - FROM player - LEFT JOIN team ON ... - LEFT JOIN round ON ... - GROUP BY ... - """ -``` - -We need an adapter that extracts player columns, in a slice that has as many columns as there are columns in the player table. That's [RangeRowAdapter](#rangerowadapter): - -```swift - // SELECT player.*, team.*, ... - // <------> - let playerWidth = try db.columns(in: "player").count - let playerAdapter = RangeRowAdapter(0 ..< playerWidth) -``` - -We also need an adapter that extracts team columns: - -```swift - // SELECT player.*, team.*, ... - // <----> - let teamWidth = try db.columns(in: "team").count - let teamAdapter = RangeRowAdapter(playerWidth ..< (playerWidth + teamWidth)) -``` - -We merge those two adapters in a single [ScopeAdapter](#scopeadapter) that will allow us to access both sliced rows: - -```swift - let playerScope = "player" - let teamScope = "team" - let adapter = ScopeAdapter([ - playerScope: playerAdapter, - teamScope: teamAdapter]) -``` - -And now we can fetch, and start consuming our rows. You already know [row cursors](#fetching-rows): - -```swift - let rows = try Row.fetchCursor(db, sql: sql, adapter: adapter) - while let row = try rows.next() { -``` - -From a fetched row, we can build a player: - -```swift - let player: Player = row[playerScope] -``` - -In the SQL query, the team is joined with the `LEFT JOIN` operator. This means that the team may be missing: its slice may contain team values, or it may only contain NULLs. When this happens, we don't want to build a Team record, and we thus load an *optional* Team: - -```swift - let team: Team? = row[teamScope] -``` - -And finally, we can load the maximum score, assuming that the "maxScore" column is not ambiguous: - -```swift - let maxScore: Int = row["maxScore"] - - print("player: \(player)") - print("team: \(team)") - print("maxScore: \(maxScore)") - } -} -``` - -> :bulb: In this chapter, we have learned: -> -> - how to use `RangeRowAdapter` to extract a specific table's columns into a *row slice*. -> - how to use `ScopeAdapter` to gives access to several row slices through named scopes. -> - how to use Row subscripting to extract records from rows, or optional records in order to deal with left joins. - - -### Splitting Rows, the Record Way - -Our introduction above has introduced important techniques. It uses [row adapters](#row-adapters) in order to split rows. It uses Row subscripting in order to extract records from row slices. - -But we may want to make it more usable and robust: - -1. It's generally easier to consume records than raw rows. -2. Joined records not always need all columns from a table (see `TableRecord.databaseSelection` in [Columns Selected by a Request]). -3. Building row adapters is long and error prone. - -To address the first bullet, let's define a record that holds our player, optional team, and maximum score. Since it can decode database rows, it adopts the [FetchableRecord] protocol: - -```swift -struct PlayerInfo { - var player: Player - var team: Team? - var maxScore: Int -} - -/// PlayerInfo can decode rows: -extension PlayerInfo: FetchableRecord { - private enum Scopes { - static let player = "player" - static let team = "team" - } - - init(row: Row) { - player = row[Scopes.player] - team = row[Scopes.team] - maxScore = row["maxScore"] - } -} -``` - -Let's now write the method that fetches PlayerInfo records: - -```swift -extension PlayerInfo { - static func fetchAll(_ db: Database) throws -> [PlayerInfo] { -``` - -To acknowledge that both Player and Team records may customize their selection of the "player" and "team" columns, we'll write our SQL in a slightly different way: - -```swift - // Let Player and Team customize their selection: - let sql = """ - SELECT - \(Player.selectionSQL()), -- instead of player.* - \(Team.selectionSQL()), -- instead of team.* - MAX(round.score) AS maxScore - FROM player - LEFT JOIN team ON ... - LEFT JOIN round ON ... - GROUP BY ... - """ -``` - -`Player.selectionSQL()` will output `player.*`, unless Player defines a [customized selection](#columns-selected-by-a-request). - -> :point_up: **Note**: you may also use SQL table aliases: -> -> ```swift -> let sql = """ -> SELECT -> \(Player.selectionSQL(alias: "p")), -> \(Team.selectionSQL(alias: "t")), -> MAX(r.score) AS maxScore -> FROM player p -> LEFT JOIN team t ON ... -> LEFT JOIN round r ON ... -> GROUP BY ... -> """ -> ``` - -Now is the time to build adapters (taking in account the customized selection of both player and team). We use the `splittingRowAdapters` global function, which builds row adapters of desired widths: - -```swift - let adapters = try splittingRowAdapters(columnCounts: [ - Player.numberOfSelectedColumns(db), - Team.numberOfSelectedColumns(db)]) - - let adapter = ScopeAdapter([ - Scopes.player: adapters[0], - Scopes.team: adapters[1]]) -``` - -> :point_up: **Note**: `splittingRowAdapters` returns as many adapters as necessary to fully split a row. In the example above, it returns *three* adapters: one for player, one for team, and one for the remaining columns. - -And finally, we can fetch player infos: - -```swift - return try PlayerInfo.fetchAll(db, sql: sql, adapter: adapter) - } -} -``` - -And when your app needs to fetch player infos, it now reads: - -```swift -// Fetch player infos -let playerInfos = try dbQueue.read { db in - try PlayerInfo.fetchAll(db) -} -``` - - -> :bulb: In this chapter, we have learned: -> -> - how to define a `FetchableRecord` record that consumes rows fetched from a joined query. -> - how to use `selectionSQL` and `numberOfSelectedColumns` in order to deal with nested record types that define custom selection. -> - how to use `splittingRowAdapters` in order to streamline the definition of row slices. -> - how to gather all relevant methods and constants in a record type, fully responsible of its relationship with the database. - - -### Splitting Rows, the Request Way - -The `PlayerInfo.fetchAll` method [above](#splitting-rows-the-record-way) directly fetches records. It's all good, but in order to profit from [database observation](#database-changes-observation), you'll need a [custom request](#custom-requests) that defines a database query. - -It is recommended that you read the previous paragraphs before you dive in this sample code. We start with the same PlayerInfo record as above: - -```swift -struct PlayerInfo { - var player: Player - var team: Team? - var maxScore: Int -} - -/// PlayerInfo can decode rows: -extension PlayerInfo: FetchableRecord { - private enum Scopes { - static let player = "player" - static let team = "team" - } - - init(row: Row) { - player = row[Scopes.player] - team = row[Scopes.team] - maxScore = row["maxScore"] - } -} -``` - -Now we write a method that returns a request, and build the fetching method on top of that request: - -```swift -extension PlayerInfo { - /// The request for all player infos - static func all() -> AdaptedFetchRequest> { - let sql = """ - SELECT - \(Player.selectionSQL()), - \(Team.selectionSQL()), - MAX(round.score) AS maxScore - FROM player - LEFT JOIN team ON ... - LEFT JOIN round ON ... - GROUP BY ... - """ - return SQLRequest(sql: sql).adapted { db in - let adapters = try splittingRowAdapters(columnCounts: [ - Player.numberOfSelectedColumns(db), - Team.numberOfSelectedColumns(db)]) - return ScopeAdapter([ - Scopes.player: adapters[0], - Scopes.team: adapters[1]]) - } - } - - /// Fetches all player infos - static func fetchAll(_ db: Database) throws -> [PlayerInfo] { - return try all().fetchAll(db) - } -} -``` - -It is now time to use our request: - -```swift -// Fetch player infos -let playerInfos = try dbQueue.read { db in - try PlayerInfo.fetchAll(db) -} - -// Track player infos with RxRGDB: -PlayerInfo.all() - .rx.fetchAll(in: dbQueue) - .subscribe(onNext: { (playerInfos: [PlayerInfo]) in - print("Player infos have changed") - }) -``` - -> :bulb: In this chapter, we have learned how to define a custom request that can both fetch records from joined queries, and feed database observation tools. - - -### Splitting Rows, the Codable Way - -[Codable Records] build on top of the standard Decodable protocol in order to decode database rows. - -You can consume complex joined queries with Codable records as well. As a demonstration, we'll rewrite the [above](#splitting-rows-the-request-way) sample code: - -```swift -struct Player: Decodable, FetchableRecord, TableRecord { - var id: Int64 - var name: String -} -struct Team: Decodable, FetchableRecord, TableRecord { - var id: Int64 - var name: String - var color: Color -} -struct PlayerInfo: Decodable, FetchableRecord { - var player: Player - var team: Team? - var maxScore: Int -} - -extension PlayerInfo { - /// The request for all player infos - static func all() -> AdaptedFetchRequest> { - let sql = """ - SELECT - \(Player.selectionSQL()), - \(Team.selectionSQL()), - MAX(round.score) AS maxScore - FROM player - LEFT JOIN team ON ... - LEFT JOIN round ON ... - GROUP BY ... - """ - return SQLRequest(sql: sql).adapted { db in - let adapters = try splittingRowAdapters(columnCounts: [ - Player.numberOfSelectedColumns(db), - Team.numberOfSelectedColumns(db)]) - return ScopeAdapter([ - CodingKeys.player.stringValue: adapters[0], - CodingKeys.team.stringValue: adapters[1]]) - } - } - - /// Fetches all player infos - static func fetchAll(_ db: Database) throws -> [PlayerInfo] { - return try all().fetchAll(db) - } -} - -// Fetch player infos -let playerInfos = try dbQueue.read { db in - try PlayerInfo.fetchAll(db) -} - -// Track player infos with RxRGDB: -PlayerInfo.all() - .rx.fetchAll(in: dbQueue) - .subscribe(onNext: { (playerInfos: [PlayerInfo]) in - print("Player infos have changed") - }) -``` - -> :bulb: In this chapter, we have learned how to use the `Decodable` protocol and its associated `CodingKeys` enum in order to dry up our code. - - -Database Changes Observation -============================ - -**SQLite notifies its host application of changes performed to the database, as well of transaction commits and rollbacks.** - -GRDB puts this SQLite feature to some good use, and lets you observe the database in various ways: - -- [After Commit Hook](#after-commit-hook): Handle successful transactions one by one. -- [ValueObservation and DatabaseRegionObservation]: Automated tracking of database requests. -- [FetchedRecordsController]: Animate table views according to database changes. -- [TransactionObserver Protocol](#transactionobserver-protocol): Low-level database observation. -- [RxGRDB]: Automated tracking of database changes, with [RxSwift](https://github.com/ReactiveX/RxSwift). - -Database observation requires that a single [database queue](#database-queues) or [pool](#database-pools) is kept open for all the duration of the database usage. - - -## After Commit Hook - -When your application needs to make sure a specific database transaction has been successfully committed before it executes some work, use the `Database.afterNextTransactionCommit(_:)` method. - -Its closure argument is called right after database changes have been successfully written to disk: - -```swift -try dbQueue.write { db in - db.afterNextTransactionCommit { db in - print("success") - } - ... -} // prints "success" -``` - -The closure runs in a protected dispatch queue, serialized with all database updates. - -**This "after commit hook" helps synchronizing the database with other resources, such as files, or system sensors.** - -In the example below, a [location manager](https://developer.apple.com/documentation/corelocation/cllocationmanager) starts monitoring a CLRegion if and only if it has successfully been stored in the database: - -```swift -/// Inserts a region in the database, and start monitoring upon -/// successful insertion. -func startMonitoring(_ db: Database, region: CLRegion) throws { - // Make sure database is inside a transaction - try db.inSavepoint { - - // Save the region in the database - try insert(...) - - // Start monitoring if and only if the insertion is - // eventually committed - db.afterNextTransactionCommit { _ in - // locationManager prefers the main queue: - DispatchQueue.main.async { - locationManager.startMonitoring(for: region) - } - } - - return .commit - } -} -``` - -The method above won't trigger the location manager if the transaction is eventually rollbacked (explicitly, or because of an error), as in the sample code below: - -```swift -try dbQueue.write { db in - // success - try startMonitoring(db, region) - - // On error, the transaction is rollbacked, the region is not inserted, and - // the location manager is not invoked. - try failableMethod(db) -} -``` - - -## ValueObservation and DatabaseRegionObservation - -**ValueObservation and DatabaseRegionObservation** are two database observations tools that track changes in database [requests](#requests). - -```swift -// Let's observe all players! -let request = Player.all() -``` - -[ValueObservation] notifies your application with **fresh values** (this is what most applications need :+1:): - -```swift -let observation = ValueObservation.trackingAll(request) -let observer = observation.start(in: dbQueue) { (players: [Player]) in - let names = players.map { $0.name }.joined(separator: ", ") - print("Fresh players: \(names)") -} - -try dbQueue.write { db in - try Player(name: "Arthur").insert(db) -} -// Prints "Fresh players: Arthur, ..." -``` - -[DatabaseRegionObservation] notifies your application with **database connections**, right after an impactful database transaction has been committed (reserved for more advanced use cases :nerd_face:): - -```swift -let observation = DatabaseRegionObservation(tracking: request) -let observer = observation.start(in: dbQueue) { (db: Database) in - print("Players have changed.") -} - -try dbQueue.write { db in - try Player(name: "Barbara").insert(db) -} -// Prints "Players have changed." -``` - -- [ValueObservation] -- [DatabaseRegionObservation] - - -## ValueObservation - -**ValueObservation tracks changes in the results of database [requests](#requests), and notifies fresh values whenever the database changes.** - -Changes are only notified after they have been committed in the database. No insertion, update, or deletion in tracked tables is missed. This includes indirect changes triggered by [foreign keys](https://www.sqlite.org/foreignkeys.html#fk_actions) or [SQL triggers](https://www.sqlite.org/lang_createtrigger.html). - - -- **[ValueObservation Usage](#valueobservation-usage)** -- [ValueObservation.trackingCount, trackingOne, trackingAll](#valueobservationtrackingcount-trackingone-trackingall) -- [ValueObservation.tracking(_:fetch:)](#valueobservationtracking_fetch) -- [ValueObservation Transformations](#valueobservation-transformations): [map](#valueobservationmap), [compactMap](#valueobservationcompactmap), ... -- [ValueObservation Error Handling](#valueobservation-error-handling) -- [ValueObservation Options](#valueobservation-options) -- [Advanced: ValueObservation.tracking(_:reducer:)](#advanced-valueobservationtracking_reducer) - - -### ValueObservation Usage - -Here is a typical UIViewController which observes the database in order to keep its view up-to-date: - -```swift -class PlayerViewController: UIViewController { - @IBOutlet weak var nameLabel: UILabel! - private var observer: TransactionObserver? - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - // Define a ValueObservation which tracks a player - let request = Player.filter(key: 42) - let observation = ValueObservation.trackingOne(request) - - // Start observing the database - observer = try! observation.start( - in: dbQueue, - onChange: { [unowned self] (player: Player?) in - // Player has been refreshed: update view - self.nameLabel.text = player?.name - }) - } - - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - - // Stop observing the database - observer = nil - } -} -``` - -By default, all values are notified on the main queue. Views can be updated right from the `onChange` callback. - -By default, an initial fetch is performed as soon as the observation starts: the view is set up and ready when the `viewWillAppear` method returns. - -The observer returned by the `start` method is stored in a property of the view controller. This allows the view controller to control the duration of the observation. When the observer is deallocated, the observation stops. Meanwhile, all transactions that modify the observed player are notified, and the `nameLabel` is kept up-to-date. - -> :bulb: **Tip**: see the [Demo Application](DemoApps/GRDBDemoiOS/README.md) for a sample app that uses ValueObservation. -> -> :bulb: **Tip**: When fetching values is slow, and should never ever block the main queue, opt in for async notifications: -> -> ```swift -> override func viewWillAppear(_ animated: Bool) { -> super.viewWillAppear(animated) -> -> // Define a ValueObservation which tracks a player -> let request = Player.filter(key: 42) -> var observation = ValueObservation.trackingOne(request) -> -> // Observation is asynchronous -> observation.scheduling = .async(onQueue: .main, startImmediately: true) -> -> // Start observing the database -> observer = try! observation.start( -> in: dbQueue, -> onChange: { [unowned self] (player: Player?) in -> // Player has been refreshed: update view -> self.activityIndicator.stopAnimating() -> self.nameLabel.text = player?.name -> }) -> -> // Wait for player -> activityIndicator.startAnimating() -> nameLabel.text = nil -> } -> ``` -> -> See [ValueObservation.scheduling](#valueobservationscheduling) for more information. - -### ValueObservation.trackingCount, trackingOne, trackingAll - -Given a [request](#requests), you can track its number of results, the first one, or all of them: - -```swift -ValueObservation.trackingCount(request) -ValueObservation.trackingOne(request) -ValueObservation.trackingAll(request) -``` - -Those observations match the `fetchCount`, `fetchOne`, and `fetchAll` request methods: - -- `trackingCount` notifies counts: - - ```swift - // Observe number of players - let observer = ValueObservation - .trackingCount(Player.all()) - .start(in: dbQueue) { (count: Int) in - print("Number of players have changed: \(count)") - } - ``` - -- `trackingOne` notifies optional values, built from a single database row (if any): - - ```swift - // Observe a single player - let observer = ValueObservation - .trackingOne(Player.filter(key: 1)) - .start(in: dbQueue) { (player: Player?) in - print("Player has changed: \(player)") - } - - // Observe the maximum score - let request = Player.select(max(Column("score")), as: Int.self) - let observer = ValueObservation - .trackingOne(request) - .start(in: dbQueue) { (maximumScore: Int?) in - print("Maximum score has changed: \(maximumScore)") - } - ``` - -- `trackingAll` notifies arrays: - - ```swift - // Observe all players - let observer = ValueObservation - .trackingAll(Player.all()) - .start(in: dbQueue) { (players: [Player]) in - print("Players have changed: \(players)") - } - - // Observe all player names - let request = SQLRequest(sql: "SELECT name FROM player") - let observer = ValueObservation - .trackingAll(request) - .start(in: dbQueue) { (names: [String]) in - print("Player names have changed: \(names)") - } - ``` - -> :point_up: **Note**: the observations returned by the [ValueObservation.trackingCount, trackingOne, and trackingAll](#valueobservationtrackingcount-trackingone-trackingall) methods perform a filtering of consecutive identical values, based on raw database values. - - -### ValueObservation.tracking(_:fetch:) - -Observing the database is not always easy to express with simple requests, as above. - -For example, let's say that we have a struct that defines a "Hall of Fame": - -```swift -struct HallOfFame { - var totalPlayerCount: Int - var bestPlayers: [Player] - - /// Fetch a HallOfFame - static fetch(_ db: Database) throws -> HallOfFame { - let totalPlayerCount = try Player.fetchCount(db) - let bestPlayers = try Player - .order(Column("score").desc) - .limit(10) - .fetchAll(db) - return HallOfFame( - totalPlayerCount: totalPlayerCount, - bestPlayers: bestPlayers) - } -} - -let hallOfFame = try dbQueue.read { db in try HallOfFame.fetch(db) } -print(""" - Best players out of \(hallOfFame.totalPlayerCount): - \(hallOfFame.bestPlayers) - """) -``` - -In order to track changes in the Hall of Fame, we'll use the `ValueObservation.tracking(_:fetch:)` method. It accepts two parameters: - -1. A list of observed requests. -2. A closure that fetches a fresh value whenever one of the observed requests are modified. - -In our case, any change to the `player` table can impact the Hall of Fame. We thus track the request for all players, `Player.all()`, and fetch a new Hall of Fame whenever players change: - -```swift -let observation = ValueObservation.tracking(Player.all(), fetch: { db in - try HallOfFame.fetch(db) -}) - -let observer = observation.start(in: dbQueue) { (hallOfFame: HallOfFame) in - print(""" - Best players out of \(hallOfFame.totalPlayerCount): - \(hallOfFame.bestPlayers) - """) -} -``` - - -#### Filtering out Consecutive Identical Values - -It may happen that a database change does not modify the observed values. The Hall of Fame, for example, is not affected by changes that happen to the worst players. - -When such a database change happens, `ValueObservation.tracking(_:fetch:)` is triggered, just in case the best players would be modified, and ends up notifying identical consecutive values. - -You can filter out those duplicates with the [ValueObservation.distinctUntilChanged](#valueobservationdistinctuntilchanged) method. It requires the observed value to adopt the Equatable protocol: - -```swift -extension HallOfFame: Equatable { ... } - -let observation = ValueObservation - .tracking(Player.all(), fetch: HallOfFame.fetch) - .distinctUntilChanged() - -let observer = observation.start(in: dbQueue) { (hallOfFame: HallOfFame) in - print(""" - Best players out of \(hallOfFame.totalPlayerCount): - \(hallOfFame.bestPlayers) - """) -} -``` - - -#### DatabaseRegionConvertible Observation - -The initial parameter of the `ValueObservation.tracking(_:fetch:)` method can be fed with requests, and generally speaking, values that adopt the [DatabaseRegionConvertible] protocol. - -Thanks to DatabaseRegionConvertible, `TeamInfoRequest` below is not only able to fetch a team and its players, but also to be observed. - -```swift -/// A team and its players -struct TeamInfo { - var team: Team - var players: [Player] -} - -/// A request that can fetch TeamInfo, given a team id. -struct TeamInfoRequest { - var teamId: Int64 - - /// The request for the team - private var teamRequest: QueryInterfaceRequest { - return Team.filter(key: teamId) - } - - /// The request for the players - private var playersRequest: QueryInterfaceRequest { - return Player.filter(Column("teamId") == teamId) - } - - /// Fetch a TeamInfo - func fetch(_ db: Database) throws -> TeamInfo? { - guard let team = try teamRequest.fetchOne(db) else { - return nil - } - let players = try playersRequest.fetchAll(db) - return TeamInfo(team: team, players: players) - } -} - -/// Make TeamInfoRequest observable -extension TeamInfoRequest: DatabaseRegionConvertible { - func databaseRegion(_ db: Database) throws -> DatabaseRegion { - // Returns the union of the team region and the players region - let teamRegion = try teamRequest.databaseRegion(db) - let playersRegion = try playersRequest.databaseRegion(db) - return teamRegion.union(playersRegion) - } -} - -let request = TeamInfoRequest(teamId: 1) - -// Simple fetch -let teamInfo: TeamInfo? = try dbQueue.read(request.fetch) - -// Observation -let observer = ValueObservation - .tracking(request, fetch: request.fetch) - .start(in: dbQueue) { (teamInfo: TeamInfo?) in - print("Team and its players have hanged.") - } -``` - - -### ValueObservation Transformations - -- [ValueObservation.map](#valueobservationmap) -- [ValueObservation.compactMap](#valueobservationcompactmap) -- [ValueObservation.distinctUntilChanged](#valueobservationdistinctuntilchanged) -- [ValueObservation.combine(...)](#valueobservationcombine) - - -#### ValueObservation.map - -The `map` method lets you transform the values notified by a ValueObservation. - -For example: - -```swift -// Observe a player's profile image -let observation = ValueObservation - .trackingOne(Player.filter(key: 42)) - .map { player in player?.loadBigProfileImage() } - -let observer = observation.start(in: dbQueue) { (image: UIImage?) in - print("Player picture has changed") -} -``` - -The transformation closure does not run on the main queue, and is suitable for heavy computations. - - -#### ValueObservation.compactMap - -The `compactMap` method lets you transform and filter the values notified by a ValueObservation. Only non-nil transformed values are notified. - -For example: - -```swift -// Observe a player -let observation = ValueObservation - .trackingOne(Player.filter(key: 42)) - .compactMap { $0 } - -let observer = observation.start(in: dbQueue) { (player: Player) in - print("Player name: \(player.name)") -} -``` - -The transformation closure does not run on the main queue, and is suitable for heavy computations. - - -#### ValueObservation.distinctUntilChanged - -The `distinctUntilChanged` method filters out the consecutive equal values notified by a ValueObservation. The observed values must adopt the standard Equatable protocol. - -For example: - -```swift -let observation = ValueObservation - .trackingOne(Player.filter(key: 42)) - .map { player in player != nil } // existence test - .distinctUntilChanged() - -let observer = observation.start(in: dbQueue) { (exists: Bool) in - if exists { - print("Player 42 exists.") - } else { - print("Player 42 does not exist.") - } -} -``` - -> :point_up: **Note**: the observations returned by the [ValueObservation.trackingCount, trackingOne, and trackingAll](#valueobservationtrackingcount-trackingone-trackingall) methods already perform a similar filtering, based on raw database values. - - -#### ValueObservation.combine(...) - -Sometimes you need to observe several requests at the same time. For example, you need to observe changes in both a team and its players. - -When this happens, **combine** several observations together with the `ValueObservation.combine(...)` method: - -```swift -// The two observed requests (the team and its players) -let teamRequest = Team.filter(key: 1) -let playersRequest = Player.filter(Column("teamId") == 1) - -// Two observations -let teamObservation = ValueObservation.trackingOne(teamRequest) -let playersObservation = ValueObservation.trackingAll(playersRequest) - -// The combined observation -let observation = ValueObservation.combine(teamObservation, playersObservation) - -// Start tracking players and teams -let observer = observation.start(in: dbQueue) { (team: Team?, players: [Player]) in - print("Team or players have changed.") -} -``` - -Combining observations provides the guarantee that notified values are [**consistent**](https://en.wikipedia.org/wiki/Consistency_(database_systems)). - -> :point_up: **Note**: you can combine up to five observations together. Please submit a pull request if you need more. -> -> :point_up: **Note**: readers who are familiar with Reactive Programming will recognize the [CombineLatest](http://reactivex.io/documentation/operators/combinelatest.html) operator in the `ValueObservation.combine` method. The reactive operator does not care about data consistency, though: if you use a Reactive layer such as [RxGRDB], compose observations with `ValueObservation.combine`, not with the CombineLatest operator. - - -### ValueObservation Error Handling - -When you start an observation, you can provide an `onError` callback. This callback is called whenever an error happens when a fresh value is fetched after a database change. It is scheduled just like values (see [ValueObservation.scheduling](#valueobservationscheduling)): - -```swift -let observer = try observation.start( - in: dbQueue, - onError: { error in - print("fresh value could not be fetched") - }, - onChange: { value in - print("fresh value: \(value)") - }) -``` - - -### ValueObservation Options - -Some behaviors of value observations can be configured: - -- [ValueObservation.scheduling](#valueobservationscheduling): Control the dispatching of notified values. -- [ValueObservation.requiresWriteAccess](#valueobservationrequireswriteaccess): Allow observations to write in the database. - - -#### ValueObservation.scheduling - -The `scheduling` property lets you control how fresh values are notified: - -- `.mainQueue` (the default): all values are notified on the main queue. - - If the observation starts on the main queue, an initial value is notified right upon subscription, synchronously: - - ```swift - // On main queue - let observer = ValueObservation - .trackingAll(Player.all()) - .start(in: dbQueue) { (players: [Player]) in - // On main queue - print("fresh players: \(players)") - } - // <- here "fresh players" is already printed. - ``` - - If the observation does not start on the main queue, an initial value is also notified on the main queue, but asynchronously: - - ```swift - // Not on the main queue - let observer = ValueObservation - .trackingAll(Player.all()) - .start(in: dbQueue) { (players: [Player]) in - // On main queue - print("fresh players: \(players)") - } - ``` - - When the database changes, fresh values are asynchronously notified: - - ```swift - // Eventually prints "fresh players" on the main queue - try dbQueue.write { db in - try Player(...).insert(db) - } - ``` - -- `.async(onQueue:startImmediately:)`: all values are asychronously notified on the specified queue. - - An initial value is fetched and notified if `startImmediately` is true. - - For example: - - ```swift - // On main queue - var observation = ValueObservation.trackingAll(Player.all()) - observation.scheduling = .async(onQueue: .main, startImmediately: true) - let observer = try observation.start(in: dbQueue) { (players: [Player]) in - // On main queue - print("fresh players: \(players)")s - } - // <- here "fresh players" is not printed yet. - ``` - -- `unsafe(startImmediately:)`: values are not all notified on the same dispatch queue. - - If `startImmediately` is true, an initial value is notified right upon subscription, synchronously, on the dispatch queue which starts the observation. - - ```swift - // On any queue - var observation = ValueObservation.trackingAll(Player.all()) - observation.scheduling = .unsafe(startImmediately: true) - let observer = try observation.start(in: dbQueue) { (players: [Player]) in - print("fresh players: \(players)") - } - // <- here "fresh players" is already printed. - ``` - - When the database changes, other values are notified on unspecified queues. - - > :point_up: **Note**: this unsafe mode is intended for third-party libraries that provide their own scheduling engine. - - -#### ValueObservation.requiresWriteAccess - -The `requiresWriteAccess` property is false by default. When true, a ValueObservation has a write access to the database, and its fetches are automatically wrapped in a [savepoint](#transactions-and-savepoints): - -```swift -var observation = ValueObservation.tracking(..., fetch: { db in - // write access allowed -}) -observation.requiresWriteAccess = true -``` - -When you use a [database pool](#database-pools), don't use this flag unless you really need it. Observations with write access are less efficient because they block all writes for the whole duration of a fetch. - - -### Advanced: ValueObservation.tracking(_:reducer:) - -The most low-level way to define a ValueObservation is to create one from an observed database region (see above), and a **reducer** that adopts the **ValueReducer** protocol ([**:fire: EXPERIMENTAL**](#what-are-experimental-features)): - -```swift -protocol ValueReducer { - associatedtype Fetched - associatedtype Value - - /// Fetches a database value - func fetch(_ db: Database) throws -> Fetched - - /// Returns a notified value - mutating func value(_ fetched: Fetched) -> Value? -} -``` - -The `fetch` method is called upon changes in the observed [database region](#databaseregion). It runs inside a protected dispatch queue and is guaranteed an immutable view of the last committed state of the database. - -The `value` method transforms a fetched value into a notified value. It returns nil if the observer should not be notified. It runs inside a dispatch queue called the "reduce queue", which is not the main queue, and not a database queue. - -The sample code below counts the number of times the player table is modified: - -```swift -var count = 0 -let reducer = AnyValueReducer( - fetch: { _ in /* don't fetch anything */ }, - value: { _ -> Int? in - defer { count += 1 } - return count }) -let observation = ValueObservation.tracking(Player.all(), reducer: { _ in reducer }) -let observer = observation.start(in: dbQueue) { (count: Int) in - print("Number of transactions that have modified players: \(count)") -} -// Prints "Number of transactions that have modified players: 0" - -try dbQueue.write { db in - try Player(...).insert(db) -} -// Prints "Number of transactions that have modified players: 1" -``` - - -## DatabaseRegionObservation - -**DatabaseRegionObservation tracks changes in database [requests](#requests), and notifies each impactful [transaction](#transactions-and-savepoints).** - -No insertion, update, or deletion in the tracked tables is missed. This includes indirect changes triggered by [foreign keys](https://www.sqlite.org/foreignkeys.html#fk_actions) or [SQL triggers](https://www.sqlite.org/lang_createtrigger.html). - -DatabaseRegionObservation calls your application right after changes have been committed in the database, and before any other thread had any opportunity to perform further changes. *This is a pretty strong guarantee, that most applications do not really need.* Instead, most applications prefer to be notified with fresh values: make sure you check [ValueObservation] before using DatabaseRegionObservation. - - -### DatabaseRegionObservation Usage - -Define an observation by providing one or several requests to track: - -```swift -// Track all players -let observation = DatabaseRegionObservation(tracking: Player.all()) -``` - -Then start the observation from a [database queue](#database-queues) or [pool](#database-pools): - -```swift -let observer = observation.start(in: dbQueue) { (db: Database) in - print("Players were changed") -} -``` - -And enjoy the changes notifications: - -```swift -try dbQueue.write { db in - try Player(name: "Arthur").insert(db) -} -// Prints "Players were changed" -``` - -By default, the observation lasts until the observer returned by the `start` method is deallocated. See [DatabaseRegionObservation.extent](#databaseregionobservationextent) for more details. - -You can also feed DatabaseRegionObservation with [DatabaseRegion], or any type which conforms to the [DatabaseRegionConvertible] protocol. For example: - -```swift -// Observe the full database -let observation = DatabaseRegionObservation(tracking: DatabaseRegion.fullDatabase) -let observer = observation.start(in: dbQueue) { (db: Database) in - print("Database was changed") -} -``` - - -### DatabaseRegionObservation Use Cases - -**There are very few use cases for DatabaseRegionObservation**. - -For example: - -- One needs to write in the database after an impactful transaction. - -- One needs to synchronize the content of the database file with some external resources, like other files, or system sensors like CLRegion monitoring. - -- On iOS, one needs to process a database transaction before the operating system had any opportunity to put the application in the suspended state. - -- One want to build a [database snapshot](#database-snapshots) with a guaranteed snapshot content. - -Outside of those use cases, it is much likely *wrong* to use a DatabaseRegionObservation. Please check other [Database Observation](#database-changes-observation) options. - - -### DatabaseRegionObservation.extent - -The `extent` property lets you specify the duration of the observation. See [Observation Extent](#observation-extent) for more details: - -```swift -// This observation lasts until the database connection is closed -var observation = DatabaseRegionObservation... -observation.extent = .databaseLifetime -_ = observation.start(in: dbQueue) { db in ... } -``` - -The default extent is `.observerLifetime`: the observation stops when the observer returned by `start` is deallocated. - -Regardless of the extent of an observation, you can always stop observation with the `remove(transactionObserver:)` method: - -```swift -// Start -let observer = observation.start(in: dbQueue) { db in ... } - -// Stop -dbQueue.remove(transactionObserver: observer) -``` - - -## FetchedRecordsController - -**FetchedRecordsController tracks changes in the results of a request, feeds table views and collection views, and animates cells when the results of the request change.** - -It looks and behaves very much like [Core Data's NSFetchedResultsController](https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSFetchedResultsController_Class/). - -Given a fetch request, and a type that adopts the [FetchableRecord] protocol, such as a subclass of the [Record](#record-class) class, a FetchedRecordsController is able to track changes in the results of the fetch request, notify of those changes, and return the results of the request in a form that is suitable for a table view or a collection view, with one cell per fetched record. - -> :point_up: **Note**: when you don't need to animate a table or a collection view, use [ValueObservation] or [RxGRDB] instead. -> -> :bulb: **Tip**: see the [Demo Application](DemoApps/GRDBDemoiOS/README.md) for a sample app that uses FetchedRecordsController. - -- [Creating the Fetched Records Controller](#creating-the-fetched-records-controller) -- [Responding to Changes](#responding-to-changes) -- [The Changes Notifications](#the-changes-notifications) -- [Modifying the Fetch Request](#modifying-the-fetch-request) -- [Table and Collection Views](#table-and-collection-views) - - [Implementing the Table View Datasource Methods](#implementing-the-table-view-datasource-methods) - - [Implementing Table View Updates](#implementing-table-view-updates) -- [FetchedRecordsController Concurrency](#fetchedrecordscontroller-concurrency) - - -### Creating the Fetched Records Controller - -When you initialize a fetched records controller, you provide the following mandatory information: - -- A [database connection](#database-connections) -- The type of the fetched records. It must be a type that adopts the [FetchableRecord] protocol, such as a subclass of the [Record](#record-class) class -- A fetch request - -```swift -class Player : Record { ... } -let dbQueue = DatabaseQueue(...) // or DatabasePool - -// Using a Request from the Query Interface: -let controller = FetchedRecordsController( - dbQueue, - request: Player.order(Column("name"))) - -// Using SQL, and eventual arguments: -let controller = FetchedRecordsController( - dbQueue, - sql: "SELECT * FROM player ORDER BY name WHERE countryCode = ?", - arguments: ["FR"]) -``` - -The fetch request can involve several database tables. The fetched records controller will only track changes in the columns and tables used by the fetch request. - -```swift -let controller = FetchedRecordsController( - dbQueue, - sql: """ - SELECT author.name, COUNT(book.id) AS bookCount - FROM author - LEFT JOIN book ON book.authorId = author.id - GROUP BY author.id - ORDER BY author.name - """) -``` - - -After creating an instance, you invoke `performFetch()` to actually execute -the fetch. - -```swift -try controller.performFetch() -``` - - -### Responding to Changes - -In general, FetchedRecordsController is designed to respond to changes at *the database layer*, by [notifying](#the-changes-notifications) when *database rows* change location or values. - -Changes are not reflected until they are applied in the database by a successful [transaction](#transactions-and-savepoints): - -```swift -// One transaction -try dbQueue.write { db in // or dbPool.write - try player1.insert(db) - try player2.insert(db) -} - -// One transaction -try dbQueue.inTransaction { db in // or dbPool.writeInTransaction - try player1.insert(db) - try player2.insert(db) - return .commit -} - -// Two transactions -try dbQueue.inDatabase { db in // or dbPool.writeWithoutTransaction - try player1.insert(db) - try player2.insert(db) -} -``` - -When you apply several changes to the database, you should group them in a single explicit transaction. The controller will then notify of all changes together. - - -### The Changes Notifications - -An instance of FetchedRecordsController notifies that the controller’s fetched records have been changed by the mean of *callbacks*: - -```swift -let controller = try FetchedRecordsController(...) - -controller.trackChanges( - // controller's records are about to change: - willChange: { controller in ... }, - - // notification of individual record changes: - onChange: { (controller, record, change) in ... }, - - // controller's records have changed: - didChange: { controller in ... }) - -try controller.performFetch() -``` - -See [Implementing Table View Updates](#implementing-table-view-updates) for more detail on table view updates. - -**All callbacks are optional.** When you only need to grab the latest results, you can omit the `didChange` argument name: - -```swift -controller.trackChanges { controller in - let newPlayers = controller.fetchedRecords // [Player] -} -``` - -> :warning: **Warning**: notification of individual record changes (the `onChange` callback) has FetchedRecordsController use a diffing algorithm that has a high complexity, a high memory consumption, and is thus **not suited for large result sets**. One hundred rows is probably OK, but one thousand is probably not. If your application experiences problems with large lists, see [Issue 263](https://github.com/groue/GRDB.swift/issues/263) for more information. - -Callbacks have the fetched record controller itself as an argument: use it in order to avoid memory leaks: - -```swift -// BAD: memory leak -controller.trackChanges { _ in - let newPlayers = controller.fetchedRecords -} - -// GOOD -controller.trackChanges { controller in - let newPlayers = controller.fetchedRecords -} -``` - -**Callbacks are invoked asynchronously.** See [FetchedRecordsController Concurrency](#fetchedrecordscontroller-concurrency) for more information. - -**Values fetched from inside callbacks may be inconsistent with the controller's records.** This is because after database has changed, and before the controller had the opportunity to invoke callbacks in the main thread, other database changes can happen. - -To avoid inconsistencies, provide a `fetchAlongside` argument to the `trackChanges` method, as below: - -```swift -controller.trackChanges( - fetchAlongside: { db in - // Fetch any extra value, for example the number of fetched records: - return try Player.fetchCount(db) - }, - didChange: { (controller, count) in - // The extra value is the second argument. - let recordsCount = controller.fetchedRecords.count - assert(count == recordsCount) // guaranteed - }) -``` - -Whenever the fetched records controller can not look for changes after a transaction has potentially modified the tracked request, an error handler is called. The request observation is not stopped, though: future transactions may successfully be handled, and the notified changes will then be based on the last successful fetch. - -```swift -controller.trackErrors { (controller, error) in - print("Missed a transaction because \(error)") -} -``` - - -### Modifying the Fetch Request - -You can change a fetched records controller's fetch request or SQL query. - -```swift -controller.setRequest(Player.order(Column("name"))) -controller.setRequest(sql: "SELECT ...", arguments: ...) -``` - -The [notification callbacks](#the-changes-notifications) are notified of eventual changes if the new request fetches a different set of records. - -> :point_up: **Note**: This behavior differs from Core Data's NSFetchedResultsController, which does not notify of record changes when the fetch request is replaced. - -**Change callbacks are invoked asynchronously.** This means that modifying the request from the main thread does *not* immediately triggers callbacks. When you need to take immediate action, force the controller to refresh immediately with its `performFetch` method. In this case, changes callbacks are *not* called: - -```swift -// Change request on the main thread: -controller.setRequest(Player.order(Column("name"))) -// Here callbacks have not been called yet. -// You can cancel them, and refresh records immediately: -try controller.performFetch() -``` - -### Table and Collection Views - -FetchedRecordsController let you feed table and collection views, and keep them up-to-date with the database content. - -For nice animated updates, a fetched records controller needs to recognize identical records between two different result sets. When records adopt the [TableRecord] protocol, they are automatically compared according to their primary key: - -```swift -class Player : TableRecord { ... } -let controller = FetchedRecordsController( - dbQueue, - request: Player.all()) -``` - -For other types, the fetched records controller needs you to be more explicit: - -```swift -let controller = FetchedRecordsController( - dbQueue, - request: ..., - isSameRecord: { (player1, player2) in player1.id == player2.id }) -``` - - -#### Implementing the Table View Datasource Methods - -The table view data source asks the fetched records controller to provide relevant information: - -```swift -func numberOfSections(in tableView: UITableView) -> Int { - return fetchedRecordsController.sections.count -} - -func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return fetchedRecordsController.sections[section].numberOfRecords -} - -func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = ... - let record = fetchedRecordsController.record(at: indexPath) - // Configure the cell - return cell -} -``` - -> :point_up: **Note**: In its current state, FetchedRecordsController does not support grouping table view rows into custom sections: it generates a unique section. - - -#### Implementing Table View Updates - -When changes in the fetched records should reload the whole table view, you can simply tell so: - -```swift -controller.trackChanges { [unowned self] _ in - self.tableView.reloadData() -} -``` - -Yet, FetchedRecordsController can notify that the controller’s fetched records have been changed due to some add, remove, move, or update operations, and help applying animated changes to a UITableView. - - -##### Typical Table View Updates - -For animated table view updates, use the `willChange` and `didChange` callbacks to bracket events provided by the fetched records controller, as illustrated in the following example: - -```swift -// Assume self has a tableView property, and a cell configuration -// method named configure(_:at:). - -controller.trackChanges( - // controller's records are about to change: - willChange: { [unowned self] _ in - self.tableView.beginUpdates() - }, - - // notification of individual record changes: - onChange: { [unowned self] (controller, record, change) in - switch change { - case .insertion(let indexPath): - self.tableView.insertRows(at: [indexPath], with: .fade) - - case .deletion(let indexPath): - self.tableView.deleteRows(at: [indexPath], with: .fade) - - case .update(let indexPath, _): - if let cell = self.tableView.cellForRow(at: indexPath) { - self.configure(cell, at: indexPath) - } - - case .move(let indexPath, let newIndexPath, _): - self.tableView.deleteRows(at: [indexPath], with: .fade) - self.tableView.insertRows(at: [newIndexPath], with: .fade) - - // // Alternate technique which actually moves cells around: - // let cell = self.tableView.cellForRow(at: indexPath) - // self.tableView.moveRow(at: indexPath, to: newIndexPath) - // if let cell = cell { - // self.configure(cell, at: newIndexPath) - // } - } - }, - - // controller's records have changed: - didChange: { [unowned self] _ in - self.tableView.endUpdates() - }) -``` - -> :warning: **Warning**: notification of individual record changes (the `onChange` callback) has FetchedRecordsController use a diffing algorithm that has a high complexity, a high memory consumption, and is thus **not suited for large result sets**. One hundred rows is probably OK, but one thousand is probably not. If your application experiences problems with large lists, see [Issue 263](https://github.com/groue/GRDB.swift/issues/263) for more information. -> -> :point_up: **Note**: our sample code above uses `unowned` references to the table view controller. This is a safe pattern as long as the table view controller owns the fetched records controller, and is deallocated from the main thread (this is usually the case). In other situations, prefer weak references. -> -> :bulb: **Tip**: see the [Demo Application](DemoApps/GRDBDemoiOS/README.md) for a sample app that uses FetchedRecordsController to animate a table view. - - -### FetchedRecordsController Concurrency - -**A fetched records controller *can not* be used from any thread.** - -When the database itself can be read and modified from [any thread](#database-connections), fetched records controllers **must** be used from the main thread. Record changes are also [notified](#the-changes-notifications) on the main thread. - -**Change callbacks are invoked asynchronously.** This means that changes made from the main thread are *not* immediately notified. When you need to take immediate action, force the controller to refresh immediately with its `performFetch` method. In this case, changes callbacks are *not* called: - -```swift -// Change database on the main thread: -try dbQueue.write { db in - try Player(...).insert(db) -} -// Here callbacks have not been called yet. -// You can cancel them, and refresh records immediately: -try controller.performFetch() -``` - -> :point_up: **Note**: when the main thread does not fit your needs, give a serial dispatch queue to the controller initializer: the controller must then be used from this queue, and record changes are notified on this queue as well. -> -> ```swift -> let queue = DispatchQueue() -> queue.async { -> let controller = try FetchedRecordsController(..., queue: queue) -> controller.trackChanges { /* in queue */ } -> try controller.performFetch() -> } -> ``` - - -## TransactionObserver Protocol - -The `TransactionObserver` protocol lets you **observe individual database changes and transactions**: - -```swift -protocol TransactionObserver : class { - /// Notifies a database change: - /// - event.kind (insert, update, or delete) - /// - event.tableName - /// - event.rowID - /// - /// For performance reasons, the event is only valid for the duration of - /// this method call. If you need to keep it longer, store a copy: - /// event.copy(). - func databaseDidChange(with event: DatabaseEvent) - - /// Filters the database changes that should be notified to the - /// `databaseDidChange(with:)` method. - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool - - /// An opportunity to rollback pending changes by throwing an error. - func databaseWillCommit() throws - - /// Database changes have been committed. - func databaseDidCommit(_ db: Database) - - /// Database changes have been rollbacked. - func databaseDidRollback(_ db: Database) -} -``` - -- [Activate a Transaction Observer](#activate-a-transaction-observer) -- [Database Changes And Transactions](#database-changes-and-transactions) -- [Filtering Database Events](#filtering-database-events) -- [Observation Extent](#observation-extent) -- [DatabaseRegion] -- [Support for SQLite Pre-Update Hooks](#support-for-sqlite-pre-update-hooks) - - -### Activate a Transaction Observer - -**To activate a transaction observer, add it to the database queue or pool:** - -```swift -let observer = MyObserver() -dbQueue.add(transactionObserver: observer) -``` - -By default, database holds weak references to its transaction observers: they are not retained, and stop getting notifications after they are deallocated. See [Observation Extent](#observation-extent) for more options. - - -### Database Changes And Transactions - -**A transaction observer is notified of all database changes**: inserts, updates and deletes. This includes indirect changes triggered by ON DELETE and ON UPDATE actions associated to [foreign keys](https://www.sqlite.org/foreignkeys.html#fk_actions), and [SQL triggers](https://www.sqlite.org/lang_createtrigger.html). - -> :point_up: **Note**: the changes that are not notified are changes to internal system tables (such as `sqlite_master`), changes to [`WITHOUT ROWID`](https://www.sqlite.org/withoutrowid.html) tables, and the deletion of duplicate rows triggered by [`ON CONFLICT REPLACE`](https://www.sqlite.org/lang_conflict.html) clauses (this last exception might change in a future release of SQLite). - -Notified changes are not actually written to disk until the [transaction](#transactions-and-savepoints) commits, and the `databaseDidCommit` callback is called. On the other side, `databaseDidRollback` confirms their invalidation: - -```swift -try dbQueue.write { db in - try db.execute(sql: "INSERT ...") // 1. didChange - try db.execute(sql: "UPDATE ...") // 2. didChange -} // 3. willCommit, 4. didCommit - -try dbQueue.inTransaction { db in - try db.execute(sql: "INSERT ...") // 1. didChange - try db.execute(sql: "UPDATE ...") // 2. didChange - return .rollback // 3. didRollback -} - -try dbQueue.write { db in - try db.execute(sql: "INSERT ...") // 1. didChange - throw SomeError() -} // 2. didRollback -``` - -Database statements that are executed outside of any transaction do not drop off the radar: - -```swift -try dbQueue.inDatabase { db in - try db.execute(sql: "INSERT ...") // 1. didChange, 2. willCommit, 3. didCommit - try db.execute(sql: "UPDATE ...") // 4. didChange, 5. willCommit, 6. didCommit -} -``` - -Changes that are on hold because of a [savepoint](https://www.sqlite.org/lang_savepoint.html) are only notified after the savepoint has been released. This makes sure that notified events are only events that have an opportunity to be committed: - -```swift -try dbQueue.inTransaction { db in - try db.execute(sql: "INSERT ...") // 1. didChange - - try db.execute(sql: "SAVEPOINT foo") - try db.execute(sql: "UPDATE ...") // delayed - try db.execute(sql: "UPDATE ...") // delayed - try db.execute(sql: "RELEASE SAVEPOINT foo") // 2. didChange, 3. didChange - - try db.execute(sql: "SAVEPOINT foo") - try db.execute(sql: "UPDATE ...") // not notified - try db.execute(sql: "ROLLBACK TO SAVEPOINT foo") - - return .commit // 4. willCommit, 5. didCommit -} -``` - - -**Eventual errors** thrown from `databaseWillCommit` are exposed to the application code: - -```swift -do { - try dbQueue.inTransaction { db in - ... - return .commit // 1. willCommit (throws), 2. didRollback - } -} catch { - // 3. The error thrown by the transaction observer. -} -``` - -> :point_up: **Note**: all callbacks are called in a protected dispatch queue, and serialized with all database updates. -> -> :point_up: **Note**: the databaseDidChange(with:) and databaseWillCommit() callbacks must not touch the SQLite database. This limitation does not apply to databaseDidCommit and databaseDidRollback which can use their database argument. - - -[DatabaseRegionObservation], [ValueObservation], [FetchedRecordsController], and [RxGRDB] are based on the TransactionObserver protocol. - -See also [TableChangeObserver.swift](https://gist.github.com/groue/2e21172719e634657dfd), which shows a transaction observer that notifies of modified database tables with NSNotificationCenter. - - -### Filtering Database Events - -**Transaction observers can avoid being notified of database changes they are not interested in.** - -The filtering happens in the `observes(eventsOfKind:)` method, which tells whether the observer wants notification of specific kinds of changes, or not. For example, here is how an observer can focus on the changes that happen on the "player" database table: - -```swift -class PlayerObserver: TransactionObserver { - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { - // Only observe changes to the "player" table. - return eventKind.tableName == "player" - } - - func databaseDidChange(with event: DatabaseEvent) { - // This method is only called for changes that happen to - // the "player" table. - } -} -``` - -Generally speaking, the `observes(eventsOfKind:)` method can distinguish insertions from deletions and updates, and is also able to inspect the columns that are about to be changed: - -```swift -class PlayerScoreObserver: TransactionObserver { - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { - // Only observe changes to the "score" column of the "player" table. - switch eventKind { - case .insert(let tableName): - return tableName == "player" - case .delete(let tableName): - return tableName == "player" - case .update(let tableName, let columnNames): - return tableName == "player" && columnNames.contains("score") - } - } -} -``` - -When the `observes(eventsOfKind:)` method returns false for all event kinds, the observer is still notified of commits and rollbacks: - -```swift -class PureTransactionObserver: TransactionObserver { - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { - // Ignore all individual changes - return false - } - - func databaseDidChange(with event: DatabaseEvent) { /* Never called */ } - func databaseWillCommit() throws { /* Called before commit */ } - func databaseDidRollback(_ db: Database) { /* Called on rollback */ } - func databaseDidCommit(_ db: Database) { /* Called on commit */ } -} -``` - -For more information about event filtering, see [DatabaseRegion]. - - -### Observation Extent - -**You can specify how long an observer is notified of database changes and transactions.** - -The `remove(transactionObserver:)` method explicitly stops notifications, at any time: - -```swift -// From a database queue or pool: -dbQueue.remove(transactionObserver: observer) - -// From a database connection: -dbQueue.inDatabase { db in - db.remove(transactionObserver: observer) -} -``` - -Alternatively, use the `extent` parameter of the `add(transactionObserver:extent:)` method: - -```swift -let observer = MyObserver() - -// On a database queue or pool: -dbQueue.add(transactionObserver: observer) // default extent -dbQueue.add(transactionObserver: observer, extent: .observerLifetime) -dbQueue.add(transactionObserver: observer, extent: .nextTransaction) -dbQueue.add(transactionObserver: observer, extent: .databaseLifetime) - -// On a database connection: -dbQueue.inDatabase { db in - db.add(transactionObserver: ...) -} -``` - -- The default extent is `.observerLifetime`: the database holds a weak reference to the observer, and the observation automatically ends when the observer is deallocated. Meanwhile, observer is notified of all changes and transactions. - -- `.nextTransaction` activates the observer until the current or next transaction completes. The database keeps a strong reference to the observer until its `databaseDidCommit` or `databaseDidRollback` method is eventually called. Hereafter the observer won't get any further notification. - -- `.databaseLifetime` has the database retain and notify the observer until the database connection is closed. - -Finally, an observer may ignore all database changes until the end of the current transaction: - -```swift -class PlayerObserver: TransactionObserver { - var playerTableWasModified = false - - func observes(eventsOfKind eventKind: DatabaseEventKind) -> Bool { - return eventKind.tableName == "player" - } - - func databaseDidChange(with event: DatabaseEvent) { - playerTableWasModified = true - - // It is pointless to keep on tracking further changes: - stopObservingDatabaseChangesUntilNextTransaction() - } -} -``` - -After `stopObservingDatabaseChangesUntilNextTransaction()`, the `databaseDidChange(with:)` method will not be notified of any change for the remaining duration of the current transaction. This helps GRDB optimize database observation. - - -### DatabaseRegion - -**[DatabaseRegion](https://groue.github.io/GRDB.swift/docs/4.0/Structs/DatabaseRegion.html) is a type that helps observing changes in the results of a database [request](#requests)**. - -A request knows which database modifications can impact its results. It can communicate this information to [transaction observers](#transactionobserver-protocol) by the way of a DatabaseRegion. - -DatabaseRegion fuels, for example, [ValueObservation and DatabaseRegionObservation]. - -**A region notifies *potential* changes, not *actual* changes in the results of a request.** A change is notified if and only if a statement has actually modified the tracked tables and columns by inserting, updating, or deleting a row. - -For example, if you observe the region of `Player.select(max(Column("score")))`, then you'll get be notified of all changes performed on the `score` column of the `player` table (updates, insertions and deletions), even if they do not modify the value of the maximum score. However, you will not get any notification for changes performed on other database tables, or updates to other columns of the player table. - -For more details, see the [reference](http://groue.github.io/GRDB.swift/docs/4.0/Structs/DatabaseRegion.html#/s:4GRDB14DatabaseRegionV10isModified2bySbAA0B5EventV_tF). - - -#### The DatabaseRegionConvertible Protocol - -**DatabaseRegionConvertible** is a protocol for all types that can turn into a [DatabaseRegion]: - -```swift -protocol DatabaseRegionConvertible { - func databaseRegion(_ db: Database) throws -> DatabaseRegion -} -``` - -All [requests](#requests) adopt this protocol, and this allows them to be observed with [DatabaseRegionObservation] and [ValueObservation]. - -Use this protocol when you want to encapsulate your complex requests in a dedicated type, and still profit from observation APIs. See [DatabaseRegionConvertible Observation](#databaseregionconvertible-observation) for more information. - - -### Support for SQLite Pre-Update Hooks - -A [custom SQLite build] can activate [SQLite "preupdate hooks"](https://sqlite.org/c3ref/preupdate_count.html). In this case, TransactionObserverType gets an extra callback which lets you observe individual column values in the rows modified by a transaction: - -```swift -protocol TransactionObserverType : class { - #if SQLITE_ENABLE_PREUPDATE_HOOK - /// Notifies before a database change (insert, update, or delete) - /// with change information (initial / final values for the row's - /// columns). - /// - /// The event is only valid for the duration of this method call. If you - /// need to keep it longer, store a copy: event.copy(). - func databaseWillChange(with event: DatabasePreUpdateEvent) - #endif -} -``` - - -Encryption -========== - -**GRDB can encrypt your database with [SQLCipher](http://sqlcipher.net) v3.4+.** - -Use [CocoaPods](http://cocoapods.org/), and specify in your `Podfile`: - -```ruby -# GRDB with SQLCipher 4 -pod 'GRDB.swift/SQLCipher' -pod 'SQLCipher', '~> 4.0' - -# GRDB with SQLCipher 3 -pod 'GRDB.swift/SQLCipher' -pod 'SQLCipher', '~> 3.4' -``` - -> :warning: **Warning**: SQLCipher 4 is *not compatible** with SQLCipher 3. -> -> When you want to open your existing SQLCipher 3 database with SQLCipher 4, you may want to run the `cipher_compatibility` pragma: -> -> ```swift -> // Open an SQLCipher 3 database with SQLCipher 4 -> var configuration = Configuration() -> configuration.passphrase = "..." -> configuration.prepareDatabase = { db in -> try db.execute(sql: "PRAGMA cipher_compatibility = 3") -> } -> let dbQueue = try DatabaseQueue(path: dbPath, configuration: configuration) -> ``` -> -> See [SQLCipher 4.0.0 Release](https://www.zetetic.net/blog/2018/11/30/sqlcipher-400-release/) and [Upgrading to SQLCipher 4](https://discuss.zetetic.net/t/upgrading-to-sqlcipher-4/3283) for more information. See also [Advanced configuration options for SQLCipher](#advanced-configuration-options-for-sqlcipher) below. - -**You create and open an encrypted database** by providing a passphrase to your [database connection](#database-connections): - -```swift -var configuration = Configuration() -configuration.passphrase = "secret" -let dbQueue = try DatabaseQueue(path: "...", configuration: configuration) -``` - -**You can change the passphrase** of an already encrypted database: - -```swift -try dbQueue.change(passphrase: "newSecret") -``` - -Providing a passphrase won't encrypt a clear-text database that already exists, though. SQLCipher can't do that, and you will get an error instead: `SQLite error 26: file is encrypted or is not a database`. - -**To encrypt an existing clear-text database**, create a new and empty encrypted database, and copy the content of the clear-text database in it. The technique to do that is [documented](https://discuss.zetetic.net/t/how-to-encrypt-a-plaintext-sqlite-database-to-use-sqlcipher-and-avoid-file-is-encrypted-or-is-not-a-database-errors/868/1) by SQLCipher. With GRDB, it gives: - -```swift -// The clear-text database -let clearDBQueue = try DatabaseQueue(path: "/path/to/clear.db") - -// The encrypted database, at some distinct location: -var configuration = Configuration() -configuration.passphrase = "secret" -let encryptedDBQueue = try DatabaseQueue(path: "/path/to/encrypted.db", configuration: config) - -try clearDBQueue.inDatabase { db in - try db.execute(sql: "ATTACH DATABASE ? AS encrypted KEY ?", arguments: [encryptedDBQueue.path, "secret"]) - try db.execute(sql: "SELECT sqlcipher_export('encrypted')") - try db.execute(sql: "DETACH DATABASE encrypted") -} - -// Now the copy is done, and the clear-text database can be deleted. -``` - -## Advanced configuration options for SQLCipher - -Some advanced SQLCipher configuration steps must happen very early in the database lifetime, and you will have to use the `configuration.prepareDatabase` property in order to run them correctly: - -```swift -var configuration = Configuration() -configuration.passphrase = "secret" -configuration.prepareDatabase = { db in - try db.execute(sql: "PRAGMA cipher_page_size = 4096") - try db.execute(sql: "PRAGMA kdf_iter = 128000") -} -let dbQueue = try DatabaseQueue(path: "...", configuration: configuration) -``` - -See [PRAGMA cipher_page_size](https://www.zetetic.net/sqlcipher/sqlcipher-api/#cipher_page_size) and [PRAGMA kdf_iter](https://www.zetetic.net/sqlcipher/sqlcipher-api/#kdf_iter) for more information. - - -## Backup - -**You can backup (copy) a database into another.** - -Backups can for example help you copying an in-memory database to and from a database file when you implement NSDocument subclasses. - -```swift -let source: DatabaseQueue = ... // or DatabasePool -let destination: DatabaseQueue = ... // or DatabasePool -try source.backup(to: destination) -``` - -The `backup` method blocks the current thread until the destination database contains the same contents as the source database. - -When the source is a [database pool](#database-pools), concurrent writes can happen during the backup. Those writes may, or may not, be reflected in the backup, but they won't trigger any error. - - -## Avoiding SQL Injection - -SQL injection is a technique that lets an attacker nuke your database. - -> ![XKCD: Exploits of a Mom](https://imgs.xkcd.com/comics/exploits_of_a_mom.png) -> -> https://xkcd.com/327/ - -Here is an example of code that is vulnerable to SQL injection: - -```swift -// BAD BAD BAD -let id = 1 -let name = textField.text -try dbQueue.write { db in - try db.execute(sql: "UPDATE students SET name = '\(name)' WHERE id = \(id)") -} -``` - -If the user enters a funny string like `Robert'; DROP TABLE students; --`, SQLite will see the following SQL, and drop your database table instead of updating a name as intended: - -```sql -UPDATE students SET name = 'Robert'; -DROP TABLE students; ---' WHERE id = 1 -``` - -To avoid those problems, **never embed raw values in your SQL queries**. The only correct technique is to provide [arguments](#executing-updates) to your raw SQL queries: - -```swift -let name = textField.text -try dbQueue.write { db in - // Good - try db.execute( - sql: "UPDATE students SET name = ? WHERE id = ?", - arguments: [name, id]) - - // Just as good - try db.execute( - sql: "UPDATE students SET name = :name WHERE id = :id", - arguments: ["name": name, "id": id]) -} -``` - -When you use [records](#records) and the [query interface](#the-query-interface), GRDB always prevents SQL injection for you: - -```swift -let id = 1 -let name = textField.text -try dbQueue.write { db in - if var student = try Student.fetchOne(db, key: id) { - student.name = name - try student.update(db) - } -} -``` - - -## Error Handling - -GRDB can throw [DatabaseError](#databaseerror), [PersistenceError](#persistenceerror), or crash your program with a [fatal error](#fatal-errors). - -Considering that a local database is not some JSON loaded from a remote server, GRDB focuses on **trusted databases**. Dealing with [untrusted databases](#how-to-deal-with-untrusted-inputs) requires extra care. - -- [DatabaseError](#databaseerror) -- [PersistenceError](#persistenceerror) -- [Fatal Errors](#fatal-errors) -- [How to Deal with Untrusted Inputs](#how-to-deal-with-untrusted-inputs) -- [Error Log](#error-log) - - -### DatabaseError - -**DatabaseError** are thrown on SQLite errors: - -```swift -do { - try db.execute( - sql: "INSERT INTO pet (masterId, name) VALUES (?, ?)", - arguments: [1, "Bobby"]) -} catch let error as DatabaseError { - // The SQLite error code: 19 (SQLITE_CONSTRAINT) - error.resultCode - - // The extended error code: 787 (SQLITE_CONSTRAINT_FOREIGNKEY) - error.extendedResultCode - - // The eventual SQLite message: FOREIGN KEY constraint failed - error.message - - // The eventual erroneous SQL query - // "INSERT INTO pet (masterId, name) VALUES (?, ?)" - error.sql - - // Full error description: - // "SQLite error 19 with statement `INSERT INTO pet (masterId, name) - // VALUES (?, ?)` arguments [1, "Bobby"]: FOREIGN KEY constraint failed"" - error.description -} -``` - -**SQLite uses codes to distinguish between various errors:** - -```swift -do { - try ... -} catch let error as DatabaseError where error.extendedResultCode == .SQLITE_CONSTRAINT_FOREIGNKEY { - // foreign key constraint error -} catch let error as DatabaseError where error.resultCode == .SQLITE_CONSTRAINT { - // any other constraint error -} catch let error as DatabaseError { - // any other database error -} -``` - -In the example above, `error.extendedResultCode` is a precise [extended result code](https://www.sqlite.org/rescode.html#extended_result_code_list), and `error.resultCode` is a less precise [primary result code](https://www.sqlite.org/rescode.html#primary_result_code_list). Extended result codes are refinements of primary result codes, as `SQLITE_CONSTRAINT_FOREIGNKEY` is to `SQLITE_CONSTRAINT`, for example. See [SQLite result codes](https://www.sqlite.org/rescode.html) for more information. - -As a convenience, extended result codes match their primary result code in a switch statement: - -```swift -do { - try ... -} catch let error as DatabaseError { - switch error.extendedResultCode { - case ResultCode.SQLITE_CONSTRAINT_FOREIGNKEY: - // foreign key constraint error - case ResultCode.SQLITE_CONSTRAINT: - // any other constraint error - default: - // any other database error - } -} -``` - -> :warning: **Warning**: SQLite has progressively introduced extended result codes accross its versions. The [SQLite release notes](http://www.sqlite.org/changes.html) are unfortunately not quite clear about that: write your handling of extended result codes with care. - - -### PersistenceError - -**PersistenceError** is thrown by the [PersistableRecord] protocol, in a single case: when the `update` method could not find any row to update: - -```swift -do { - try player.update(db) -} catch let PersistenceError.recordNotFound(databaseTableName: table, key: key) { - print("Key \(key) was not found in table \(table).") -} -``` - - -### Fatal Errors - -**Fatal errors notify that the program, or the database, has to be changed.** - -They uncover programmer errors, false assumptions, and prevent misuses. Here are a few examples: - -- **The code asks for a non-optional value, when the database contains NULL:** - - ```swift - // fatal error: could not convert NULL to String. - let name: String = row["name"] - ``` - - Solution: fix the contents of the database, use [NOT NULL constraints](#create-tables), or load an optional: - - ```swift - let name: String? = row["name"] - ``` - -- **Conversion from database value to Swift type fails:** - - ```swift - // fatal error: could not convert "Mom’s birthday" to Date. - let date: Date = row["date"] - - // fatal error: could not convert "" to URL. - let url: URL = row["url"] - ``` - - Solution: fix the contents of the database, or use [DatabaseValue](#databasevalue) to handle all possible cases: - - ```swift - let dbValue: DatabaseValue = row["date"] - if dbValue.isNull { - // Handle NULL - } else if let date = Date.fromDatabaseValue(dbValue) { - // Handle valid date - } else { - // Handle invalid date - } - ``` - -- **The database can't guarantee that the code does what it says:** - - ```swift - // fatal error: table player has no unique index on column email - try Player.deleteOne(db, key: ["email": "arthur@example.com"]) - ``` - - Solution: add a unique index to the player.email column, or use the `deleteAll` method to make it clear that you may delete more than one row: - - ```swift - try Player.filter(Column("email") == "arthur@example.com").deleteAll(db) - ``` - -- **Database connections are not reentrant:** - - ```swift - // fatal error: Database methods are not reentrant. - dbQueue.write { db in - dbQueue.write { db in - ... - } - } - ``` - - Solution: avoid reentrancy, and instead pass a database connection along. - - -### How to Deal with Untrusted Inputs - -Let's consider the code below: - -```swift -let sql = "SELECT ..." - -// Some untrusted arguments for the query -let arguments: [String: Any] = ... -let rows = try Row.fetchCursor(db, sql: sql, arguments: StatementArguments(arguments)) - -while let row = try rows.next() { - // Some untrusted database value: - let date: Date? = row[0] -} -``` - -It has two opportunities to throw fatal errors: - -- **Untrusted arguments**: The dictionary may contain values that do not conform to the [DatabaseValueConvertible protocol](#values), or may miss keys required by the statement. -- **Untrusted database content**: The row may contain a non-null value that can't be turned into a date. - -In such a situation, you can still avoid fatal errors by exposing and handling each failure point, one level down in the GRDB API: - -```swift -// Untrusted arguments -if let arguments = StatementArguments(arguments) { - let statement = try db.makeSelectStatement(sql: sql) - try statement.validate(arguments: arguments) - statement.unsafeSetArguments(arguments) - - var cursor = try Row.fetchCursor(statement) - while let row = try iterator.next() { - // Untrusted database content - let dbValue: DatabaseValue = row[0] - if dbValue.isNull { - // Handle NULL - if let date = Date.fromDatabaseValue(dbValue) { - // Handle valid date - } else { - // Handle invalid date - } - } -} -``` - -See [prepared statements](#prepared-statements) and [DatabaseValue](#databasevalue) for more information. - - -### Error Log - -**SQLite can be configured to invoke a callback function containing an error code and a terse error message whenever anomalies occur.** - -This global error callback must be configured early in the lifetime of your application: - -```swift -Database.logError = { (resultCode, message) in - NSLog("%@", "SQLite error \(resultCode): \(message)") -} -``` - -> :warning: **Warning**: Database.logError must be set before any database connection is opened. This includes the connections that your application opens with GRDB, but also connections opened by other tools, such as third-party libraries. Setting it after a connection has been opened is an SQLite misuse, and has no effect. - -See [The Error And Warning Log](https://sqlite.org/errlog.html) for more information. - - -## Unicode - -SQLite lets you store unicode strings in the database. - -However, SQLite does not provide any unicode-aware string transformations or comparisons. - - -### Unicode functions - -The `UPPER` and `LOWER` built-in SQLite functions are not unicode-aware: - -```swift -// "JéRôME" -try String.fetchOne(db, sql: "SELECT UPPER('Jérôme')") -``` - -GRDB extends SQLite with [SQL functions](#custom-sql-functions-and-aggregates) that call the Swift built-in string functions `capitalized`, `lowercased`, `uppercased`, `localizedCapitalized`, `localizedLowercased` and `localizedUppercased`: - -```swift -// "JÉRÔME" -let uppercased = DatabaseFunction.uppercase -try String.fetchOne(db, sql: "SELECT \(uppercased.name)('Jérôme')") -``` - -Those unicode-aware string functions are also readily available in the [query interface](#sql-functions): - -```swift -Player.select(nameColumn.uppercased) -``` - - -### String Comparison - -SQLite compares strings in many occasions: when you sort rows according to a string column, or when you use a comparison operator such as `=` and `<=`. - -The comparison result comes from a *collating function*, or *collation*. SQLite comes with three built-in collations that do not support Unicode: [binary, nocase, and rtrim](https://www.sqlite.org/datatype3.html#collation). - -GRDB comes with five extra collations that leverage unicode-aware comparisons based on the standard Swift String comparison functions and operators: - -- `unicodeCompare` (uses the built-in `<=` and `==` Swift operators) -- `caseInsensitiveCompare` -- `localizedCaseInsensitiveCompare` -- `localizedCompare` -- `localizedStandardCompare` - -A collation can be applied to a table column. All comparisons involving this column will then automatically trigger the comparison function: - -```swift -try db.create(table: "player") { t in - // Guarantees case-insensitive email unicity - t.column("email", .text).unique().collate(.nocase) - - // Sort names in a localized case insensitive way - t.column("name", .text).collate(.localizedCaseInsensitiveCompare) -} - -// Players are sorted in a localized case insensitive way: -let players = try Player.order(nameColumn).fetchAll(db) -``` - -> :warning: **Warning**: SQLite *requires* host applications to provide the definition of any collation other than binary, nocase and rtrim. When a database file has to be shared or migrated to another SQLite library of platform (such as the Android version of your application), make sure you provide a compatible collation. - -If you can't or don't want to define the comparison behavior of a column (see warning above), you can still use an explicit collation in SQL requests and in the [query interface](#the-query-interface): - -```swift -let collation = DatabaseCollation.localizedCaseInsensitiveCompare -let players = try Player.fetchAll(db, - sql: "SELECT * FROM player ORDER BY name COLLATE \(collation.name))") -let players = try Player.order(nameColumn.collating(collation)).fetchAll(db) -``` - - -**You can also define your own collations**: - -```swift -let collation = DatabaseCollation("customCollation") { (lhs, rhs) -> NSComparisonResult in - // return the comparison of lhs and rhs strings. -} -dbQueue.add(collation: collation) // Or dbPool.add(collation: ...) -``` - - -## Memory Management - -Both SQLite and GRDB use non-essential memory that help them perform better. - -You can reclaim this memory with the `releaseMemory` method: - -```swift -// Release as much memory as possible. -dbQueue.releaseMemory() -dbPool.releaseMemory() -``` - -This method blocks the current thread until all current database accesses are completed, and the memory collected. - - -### Memory Management on iOS - -**The iOS operating system likes applications that do not consume much memory.** - -[Database queues](#database-queues) and [pools](#database-pools) can call the `releaseMemory` method for you, when application receives memory warnings, and when application enters background: call the `setupMemoryManagement` method after creating the queue or pool instance: - -``` -let dbQueue = try DatabaseQueue(...) -dbQueue.setupMemoryManagement(in: UIApplication.shared) -``` - - -## Data Protection - -[Data Protection](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StrategiesforImplementingYourApp/StrategiesforImplementingYourApp.html#//apple_ref/doc/uid/TP40007072-CH5-SW21) lets you protect files so that they are encrypted and unavailable until the device is unlocked. - -Data protection can be enabled [globally](https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html#//apple_ref/doc/uid/TP40012582-CH26-SW30) for all files created by an application. - -You can also explicitly protect a database, by configuring its enclosing *directory*. This will not only protect the database file, but also all [temporary files](https://www.sqlite.org/tempfiles.html) created by SQLite (including the persistent `.shm` and `.wal` files created by [database pools](#database-pools)). - -For example, to explicitly use [complete](https://developer.apple.com/reference/foundation/fileprotectiontype/1616200-complete) protection: - -```swift -// Paths -let fileManager = FileManager.default -let directoryURL = try fileManager - .url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true) - .appendingPathComponent("database", isDirectory: true) -let databaseURL = directoryURL.appendingPathComponent("db.sqlite") - -// Create directory if needed -var isDirectory: ObjCBool = false -if !fileManager.fileExists(atPath: directoryURL.path, isDirectory: &isDirectory) { - try fileManager.createDirectory(atPath: directoryURL.path, withIntermediateDirectories: false) -} else if !isDirectory.boolValue { - throw NSError(domain: NSCocoaErrorDomain, code: NSFileWriteFileExistsError, userInfo: nil) -} - -// Enable data protection -try fileManager.setAttributes([.protectionKey : FileProtectionType.complete], ofItemAtPath: directoryURL.path) - -// Open database -let dbQueue = try DatabaseQueue(path: databaseURL.path) -``` - -When a database is protected, an application that runs in the background on a locked device won't be able to read or write from it. Instead, it will get [DatabaseError](#error-handling) with code [`SQLITE_IOERR`](https://www.sqlite.org/rescode.html#ioerr) (10) "disk I/O error", or [`SQLITE_AUTH`](https://www.sqlite.org/rescode.html#auth) (23) "not authorized". - -You can catch those errors and wait for [UIApplicationDelegate.applicationProtectedDataDidBecomeAvailable(_:)](https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623044-applicationprotecteddatadidbecom) or [UIApplicationProtectedDataDidBecomeAvailable](https://developer.apple.com/reference/uikit/uiapplicationprotecteddatadidbecomeavailable) notification in order to retry the failed database operation. - - -## Concurrency - -- [Guarantees and Rules](#guarantees-and-rules) -- [Differences between Database Queues and Pools](#differences-between-database-queues-and-pools) -- [Advanced DatabasePool](#advanced-databasepool) -- [Database Snapshots](#database-snapshots) -- [DatabaseWriter and DatabaseReader Protocols](#databasewriter-and-databasereader-protocols) -- [Unsafe Concurrency APIs](#unsafe-concurrency-apis) -- [Dealing with External Connections](#dealing-with-external-connections) - - -### Guarantees and Rules - -GRDB ships with three concurrency modes: - -- [DatabaseQueue](#database-queues) opens a single database connection, and serializes all database accesses. -- [DatabasePool](#database-pools) manages a pool of several database connections, and allows concurrent reads and writes. -- [DatabaseSnapshot](#database-snapshots) opens a single read-only database connection on an unchanging database content, and (currently) serializes all database accesses - -**All foster application safety**: regardless of the concurrency mode you choose, GRDB provides you with the same guarantees, as long as you follow three rules. - -- :bowtie: **Guarantee 1: writes are always serialized**. At every moment, there is no more than a single thread that is writing into the database. - - > Database writes always happen in a unique serial dispatch queue, named the *writer protected dispatch queue*. - -- :bowtie: **Guarantee 2: reads are always isolated**. This means that they are guaranteed an immutable view of the last committed state of the database, and that you can perform subsequent fetches without fearing eventual concurrent writes to mess with your application logic: - - ```swift - try dbPool.read { db in // or dbQueue.read - // Guaranteed to be equal - let count1 = try Player.fetchCount(db) - let count2 = try Player.fetchCount(db) - } - ``` - - > In [database queues](#database-queues), reads happen in the same protected dispatch queue as writes: isolation is just a consequence of the serialization of database accesses - > - > [Database pools](#database-pools) and [snapshots](#database-snapshots) both use the "snapshot isolation" made possible by SQLite's WAL mode (see [Isolation In SQLite](https://sqlite.org/isolation.html)). - -- :bowtie: **Guarantee 3: requests don't fail**, unless a database constraint violation, a [programmer mistake](#error-handling), or a very low-level issue such as a disk error or an unreadable database file. GRDB grants *correct* use of SQLite, and particularly avoids locking errors and other SQLite misuses. - -Those guarantees hold as long as you follow three rules: - -- :point_up: **Rule 1**: Have a unique instance of DatabaseQueue or DatabasePool connected to any database file. - - This means that opening a new connection each time you access the database is a bad idea. Do share a single connection instead. - - See the [Demo Application](DemoApps/GRDBDemoiOS/README.md) for a sample app that sets up a single database queue that is available throughout the application. - - If there are several instances of database queues or pools that write in the same database, a multi-threaded application will eventually face "database is locked" errors. See [Dealing with External Connections](#dealing-with-external-connections). - - ```swift - // SAFE CONCURRENCY - func fetchCurrentUser(_ db: Database) throws -> User? { - return try User.fetchOne(db) - } - // dbQueue is a singleton defined somewhere in your app - let user = try dbQueue.read { db in // or dbPool.read - try fetchCurrentUser(db) - } - - // UNSAFE CONCURRENCY - // This method fails when some other thread is currently writing into - // the database. - func currentUser() throws -> User? { - let dbQueue = try DatabaseQueue(...) - return try dbQueue.read { db in - try User.fetchOne(db) - } - } - let user = try currentUser() - ``` - -- :point_up: **Rule 2**: Group related statements within a single call to a DatabaseQueue or DatabasePool database access method (or use [snapshots](#database-snapshots)). - - Database access methods isolate your groups of related statements against eventual database updates performed by other threads, and guarantee a consistent view of the database. This isolation is only guaranteed *inside* the closure argument of those methods. Two consecutive calls *do not* guarantee isolation: - - ```swift - // SAFE CONCURRENCY - try dbPool.read { db in // or dbQueue.read - // Guaranteed to be equal: - let count1 = try Place.fetchCount(db) - let count2 = try Place.fetchCount(db) - } - - // UNSAFE CONCURRENCY - // Those two values may be different because some other thread may have - // modified the database between the two blocks: - let count1 = try dbPool.read { db in try Place.fetchCount(db) } - let count2 = try dbPool.read { db in try Place.fetchCount(db) } - ``` - - In the same vein, when you fetch values that depends on some database updates, group them: - - ```swift - // SAFE CONCURRENCY - try dbPool.write { db in - // The count is guaranteed to be non-zero - try Place(...).insert(db) - let count = try Place.fetchCount(db) - } - - // UNSAFE CONCURRENCY - // The count may be zero because some other thread may have performed - // a deletion between the two blocks: - try dbPool.write { db in try Place(...).insert(db) } - let count = try dbPool.read { db in try Place.fetchCount(db) } - ``` - - On that last example, see [Advanced DatabasePool](#advanced-databasepool) if you look after extra performance. - -- :point_up: **Rule 3**: When you perform several modifications of the database that temporarily put the database in an inconsistent state, make sure those modifications are grouped within a [transaction](#transactions-and-savepoints). - - ```swift - // SAFE CONCURRENCY - try dbPool.write { db in // or dbQueue.write - try Credit(destinationAccout, amount).insert(db) - try Debit(sourceAccount, amount).insert(db) - } - - // SAFE CONCURRENCY - try dbPool.writeInTransaction { db in // or dbQueue.inTransaction - try Credit(destinationAccout, amount).insert(db) - try Debit(sourceAccount, amount).insert(db) - return .commit - } - - // UNSAFE CONCURRENCY - try dbPool.writeWithoutTransaction { db in - try Credit(destinationAccout, amount).insert(db) - // <- Concurrent dbPool.read sees a partial db update here - try Debit(sourceAccount, amount).insert(db) - } - ``` - - Without transaction, `DatabasePool.read { ... }` may see the first statement, but not the second, and access a database where the balance of accounts is not zero. A highly bug-prone situation. - - So do use [transactions](#transactions-and-savepoints) in order to guarantee database consistency accross your application threads: that's what they are made for. - - -### Differences between Database Queues and Pools - -Despite the common [guarantees and rules](#guarantees-and-rules) shared by [database queues](#database-queues) and [pools](#database-pools), those two database accessors don't have the same behavior. - -**Database queues** serialize all database accesses, reads, and writes. There is never more than one thread that uses the database. In the image below, we see how three threads can see the database as time passes: - -![DatabaseQueueScheduling](https://cdn.rawgit.com/groue/GRDB.swift/master/Documentation/Images/DatabaseQueueScheduling.svg) - -**Database pools** also serialize all writes. But they allow concurrent reads and writes, and isolate reads so that they don't see changes performed by other threads. This gives a very different picture: - -![DatabasePoolScheduling](https://cdn.rawgit.com/groue/GRDB.swift/master/Documentation/Images/DatabasePoolScheduling.svg) - -See how, with database pools, two reads can see different database states at the same time. - -For more information about database pools, grab information about SQLite [WAL mode](https://www.sqlite.org/wal.html) and [snapshot isolation](https://sqlite.org/isolation.html). See [Database Observation](#database-changes-observation) when you look after automatic notifications of database changes. - - -### Advanced DatabasePool - -[Database pools](#database-pools) are very concurrent, since all reads can run in parallel, and can even run during write operations. But writes are still serialized: at any given point in time, there is no more than a single thread that is writing into the database. - -When your application modifies the database, and then reads some value that depends on those modifications, you may want to avoid locking the writer queue longer than necessary: - -```swift -try dbPool.write { db in - // Increment the number of players - try Player(...).insert(db) - - // Read the number of players. The writer queue is still locked :-( - let count = try Player.fetchCount(db) -} -``` - -A wrong solution is to chain a write then a read, as below. Don't do that, because another thread may modify the database in between, and make the read unreliable: - -```swift -// WRONG -try dbPool.write { db in - // Increment the number of players - try Player(...).insert(db) -} -// <- other threads can write in the database here -try dbPool.read { db in - // Read some random value :-( - let count = try Player.fetchCount(db) -} -``` - -The correct solution is the `concurrentRead` method, which must be called from within a write block, outside of any transaction. - -`concurrentRead` returns a **future value** which you consume on any dispatch queue, with the `wait()` method: - -```swift -// CORRECT -let futureCount: DatabaseFuture = try dbPool.writeWithoutTransaction { db in - // increment the number of players - try Player(...).insert(db) - - // <- not in a transaction here - let futureCount = dbPool.concurrentRead { db - return try Player.fetchCount(db) - } - return futureCount -} -// <- The writer queue has been unlocked :-) - -// Wait for the player count -let count: Int = try futureCount.wait() -``` - -`concurrentRead` blocks until it can guarantee its closure argument an isolated access to the last committed state of the database. It then asynchronously executes the closure. - -The closure can run concurrently with eventual updates performed after `concurrentRead`: those updates won't be visible from within the closure. In the example below, the number of players is guaranteed to be non-zero, even though it is fetched concurrently with the player deletion: - -```swift -try dbPool.writeWithoutTransaction { db in - // Increment the number of players - try Player(...).insert(db) - - let futureCount = dbPool.concurrentRead { db - // Guaranteed to be non-zero - return try Player.fetchCount(db) - } - - try Player.deleteAll(db) -} -``` - -[Transaction Observers](#transactionobserver-protocol) can also use `concurrentRead` in their `databaseDidCommit` method in order to process database changes without blocking other threads that want to write into the database. - - -### Database Snapshots - -**A database snapshot sees an unchanging database content, as it existed at the moment it was created.** - -"Unchanging" means that a snapshot never sees any database modifications during all its lifetime. And yet it doesn't prevent database updates. This "magic" is made possible by SQLite's WAL mode (see [Isolation In SQLite](https://sqlite.org/isolation.html)). - -You create snapshots from a [database pool](#database-pools): - -```swift -let snapshot = try dbPool.makeSnapshot() -``` - -You can create as many snapshots as you need, regardless of the [maximum number of readers](#databasepool-configuration) in the pool. A snapshot database connection is closed when the snapshot gets deallocated. - -**A snapshot can be used from any thread.** Its `read` methods is synchronous, and blocks the current thread until your database statements are executed: - -```swift -// Read values: -try snapshot.read { db in - let players = try Player.fetchAll(db) - let playerCount = try Player.fetchCount(db) -} - -// Extract a value from the database: -let playerCount = try snapshot.read { db in - try Player.fetchCount(db) -} -``` - -When you want to control the latest committed changes seen by a snapshot, create it from the pool's writer protected dispatch queue, outside of any transaction: - -```swift -let snapshot1 = try dbPool.writeWithoutTransaction { db -> DatabaseSnapshot in - try db.inTransaction { - // delete all players - try Player.deleteAll() - return .commit - } - - // <- not in a transaction here - return dbPool.makeSnapshot() -} -// <- Other threads may modify the database here -let snapshot2 = try dbPool.makeSnapshot() - -try snapshot1.read { db in - // Guaranteed to be zero - try Player.fetchCount(db) -} - -try snapshot2.read { db in - // Could be anything - try Player.fetchCount(db) -} -``` - -> :point_up: **Note**: snapshots currently serialize all database accesses. In the future, snapshots may allow concurrent reads. - - -### DatabaseWriter and DatabaseReader Protocols - -Both DatabaseQueue and DatabasePool adopt the [DatabaseReader](http://groue.github.io/GRDB.swift/docs/4.0/Protocols/DatabaseReader.html) and [DatabaseWriter](http://groue.github.io/GRDB.swift/docs/4.0/Protocols/DatabaseWriter.html) protocols. DatabaseSnapshot adopts DatabaseReader only. - -These protocols provide a unified API that let you write generic code that targets all concurrency modes. They fuel, for example: - -- [Migrations](#migrations) -- [DatabaseRegionObservation] -- [ValueObservation] -- [FetchedRecordsController] -- [RxGRDB] - -Only five types adopt those protocols: DatabaseQueue, DatabasePool, DatabaseSnapshot, AnyDatabaseReader, and AnyDatabaseWriter. Expanding this set is not supported: any future GRDB release may break your custom writers and readers, without notice. - -DatabaseReader and DatabaseWriter provide the *smallest* common guarantees: they don't erase the differences between queues, pools, and snapshots. See for example [Differences between Database Queues and Pools](#differences-between-database-queues-and-pools). - -However, you can prevent some parts of your application from writing in the database by giving them a DatabaseReader: - -```swift -// This class can read in the database, but can't write into it. -class MyReadOnlyComponent { - let reader: DatabaseReader - - init(reader: DatabaseReader) { - self.reader = reader - } -} - -let dbQueue: DatabaseQueue = ... -let component = MyReadOnlyComponent(reader: dbQueue) -``` - -> :point_up: **Note**: DatabaseReader is not a **secure** way to prevent an application component from writing in the database, because write access is just a cast away: -> -> ```swift -> if let dbQueue = reader as? DatabaseQueue { -> try dbQueue.write { ... } -> } -> ``` - - -### Unsafe Concurrency APIs - -**Database queues, pools, snapshots, as well as their common protocols `DatabaseReader` and `DatabaseWriter` provide *unsafe* APIs.** Unsafe APIs lift [concurrency guarantees](#guarantees-and-rules), and allow advanced yet unsafe patterns. - -- **`unsafeRead`** - - The `unsafeRead` method is synchronous, and blocks the current thread until your database statements are executed in a protected dispatch queue. GRDB does just the bare minimum to provide a database connection that can read. - - When used on a database pool, reads are no longer isolated: - - ```swift - dbPool.unsafeRead { db in - // Those two values may be different because some other thread - // may have inserted or deleted a player between the two requests: - let count1 = try Player.fetchCount(db) - let count2 = try Player.fetchCount(db) - } - ``` - - When used on a database queue, the closure argument is allowed to write in the database. - -- **`unsafeReentrantRead`** - - The `unsafeReentrantRead` behaves just as `unsafeRead` (see above), and allows reentrant calls: - - ```swift - dbPool.read { db1 in - // No "Database methods are not reentrant" fatal error: - dbPool.unsafeReentrantRead { db2 in - dbPool.unsafeReentrantRead { db3 in - ... - } - } - } - ``` - - Reentrant database accesses make it very easy to break the second [safety rule](#guarantees-and-rules), which says: "group related statements within a single call to a DatabaseQueue or DatabasePool database access method.". Using a reentrant method is pretty much likely the sign of a wrong application architecture that needs refactoring. - - There is a single valid use case for reentrant methods, which is when you are unable to control database access scheduling. - -- **`unsafeReentrantWrite`** - - The `unsafeReentrantWrite` method is synchronous, and blocks the current thread until your database statements are executed in a protected dispatch queue. Writes are serialized: eventual concurrent database updates are postponed until the block has executed. - - Reentrant calls are allowed: - - ```swift - dbQueue.write { db1 in - // No "Database methods are not reentrant" fatal error: - dbQueue.unsafeReentrantWrite { db2 in - dbQueue.unsafeReentrantWrite { db3 in - ... - } - } - } - ``` - - Reentrant database accesses make it very easy to break the second [safety rule](#guarantees-and-rules), which says: "group related statements within a single call to a DatabaseQueue or DatabasePool database access method.". Using a reentrant method is pretty much likely the sign of a wrong application architecture that needs refactoring. - - There is a single valid use case for reentrant methods, which is when you are unable to control database access scheduling. - - -### Dealing with External Connections - -The first rule of GRDB is: - -- **[Rule 1](#guarantees-and-rules)**: Have a unique instance of DatabaseQueue or DatabasePool connected to any database file. - -This means that dealing with external connections is not a focus of GRDB. [Guarantees](#guarantees-and-rules) of GRDB may or may not hold as soon as some external connection modifies a database. - -If you absolutely need multiple connections, then: - -- Reconsider your position -- Read about [isolation in SQLite](https://www.sqlite.org/isolation.html) -- Learn about [locks and transactions](https://www.sqlite.org/lang_transaction.html) -- Become a master of the [WAL mode](https://www.sqlite.org/wal.html) -- Prepare to setup a [busy handler](https://www.sqlite.org/c3ref/busy_handler.html) with [Configuration.busyMode](http://groue.github.io/GRDB.swift/docs/4.0/Structs/Configuration.html) -- [Ask questions](https://github.com/groue/GRDB.swift/issues) - - -## Performance - -GRDB is a reasonably fast library, and can deliver quite efficient SQLite access. See [Comparing the Performances of Swift SQLite libraries](https://github.com/groue/GRDB.swift/wiki/Performance) for an overview. - -You'll find below general advice when you do look after performance: - -- Focus -- Know your platform -- Use transactions -- Don't do useless work -- Learn about SQL strengths and weaknesses -- Avoid strings & dictionaries - - -### Performance tip: focus - -You don't know which part of your program needs improvement until you have run a benchmarking tool. - -Don't make any assumption, avoid optimizing code too early, and use [Instruments](https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcode_Overview/MeasuringPerformance.html). - - -### Performance tip: know your platform - -If your application processes a huge JSON file and inserts thousands of rows in the database right from the main thread, it will quite likely become unresponsive, and provide a sub-quality user experience. - -If not done yet, read the [Concurrency Programming Guide](https://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091) and learn how to perform heavy computations without blocking your application. - -Most GRBD APIs are [synchronous](#database-connections). Spawning them into parallel queues is as easy as: - -```swift -DispatchQueue.global().async { - dbQueue.write { db in - // Perform database work - } - DispatchQueue.main.async { - // update your user interface - } -} -``` - - -### Performance tip: use transactions - -Performing multiple updates to the database is much faster when executed inside a [transaction](#transactions-and-savepoints). This is because a transaction allows SQLite to postpone writing changes to disk until the final commit: - -```swift -// Inefficient -try dbQueue.inDatabase { db in // or dbPool.writeWithoutTransaction - for player in players { - try player.insert(db) - } -} - -// Efficient -try dbQueue.write { db in // or dbPool.write - for player in players { - try player.insert(db) - } -} - -// Efficient -try dbQueue.inTransaction { db in // or dbPool.writeInTransaction - for player in players { - try player.insert(db) - } - return .commit -} -``` - - -### Performance tip: don't do useless work - -Obviously, no code is faster than any code. - - -**Don't fetch columns you don't use** - -```swift -// SELECT * FROM player -try Player.fetchAll(db) - -// SELECT id, name FROM player -try Player.select(idColumn, nameColumn).fetchAll(db) -``` - -If your Player type can't be built without other columns (it has non-optional properties for other columns), *do define and use a different type*. - -See [Columns Selected by a Request] for more information. - - -**Don't fetch rows you don't use** - -Use [fetchOne](#fetching-methods) when you need a single value, and otherwise limit your queries at the database level: - -```swift -// Wrong way: this code may discard hundreds of useless database rows -let players = try Player.order(scoreColumn.desc).fetchAll(db) -let hallOfFame = players.prefix(5) - -// Better way -let hallOfFame = try Player.order(scoreColumn.desc).limit(5).fetchAll(db) -``` - - -**Don't copy values unless necessary** - -Particularly: the Array returned by the `fetchAll` method, and the cursor returned by `fetchCursor` aren't the same: - -`fetchAll` copies all values from the database into memory, when `fetchCursor` iterates database results as they are generated by SQLite, taking profit from SQLite efficiency. - -You should only load arrays if you need to keep them for later use (such as iterating their contents in the main thread). Otherwise, use `fetchCursor`. - -See [fetching methods](#fetching-methods) for more information about `fetchAll` and `fetchCursor`. See also the [Row.dataNoCopy](#data-and-memory-savings) method. - - -**Don't update rows unless necessary** - -An UPDATE statement is costly: SQLite has to look for the updated row, update values, and write changes to disk. - -When the overwritten values are the same as the existing ones, it's thus better to avoid performing the UPDATE statement:. - -```swift -if player.hasDatabaseChanges { - try player.update(db) -} -``` - -See [Record Comparison] for more information. - - -### Performance tip: learn about SQL strengths and weaknesses - -Consider a simple use case: your store application has to display a list of authors with the number of available books: - -- J. M. Coetzee (6) -- Herman Melville (1) -- Alice Munro (3) -- Kim Stanley Robinson (7) -- Oliver Sacks (4) - -The following code is inefficient. It is an example of the [N+1 problem](http://stackoverflow.com/questions/97197/what-is-the-n1-selects-issue), because it performs one query to load the authors, and then N queries, as many as there are authors. This turns very inefficient as the number of authors grows: - -```swift -// SELECT * FROM author -let authors = try Author.fetchAll(db) -for author in authors { - // SELECT COUNT(*) FROM book WHERE authorId = ... - author.bookCount = try Book.filter(authorIdColumn == author.id).fetchCount(db) -} -``` - -Instead, perform *a single query*: - -```swift -let sql = """ - SELECT author.*, COUNT(book.id) AS bookCount - FROM author - LEFT JOIN book ON book.authorId = author.id - GROUP BY author.id - """ -let authors = try Author.fetchAll(db, sql: sql) -``` - -In the example above, consider extending your Author with an extra bookCount property, or define and use a different type. - -Generally, define indexes on your database tables, and use SQLite's efficient query planning: - -- [Query Planning](https://www.sqlite.org/queryplanner.html) -- [CREATE INDEX](https://www.sqlite.org/lang_createindex.html) -- [The SQLite Query Planner](https://www.sqlite.org/optoverview.html) -- [EXPLAIN QUERY PLAN](https://www.sqlite.org/eqp.html) - - -### Performance tip: avoid strings & dictionaries - -The String and Dictionary Swift types are better avoided when you look for the best performance. - -Now GRDB [records](#records), for your convenience, do use strings and dictionaries: - -```swift -class Player : Record { - var id: Int64? - var name: String - var email: String - - required init(_ row: Row) { - id = row["id"] // String - name = row["name"] // String - email = row["email"] // String - super.init() - } - - override func encode(to container: inout PersistenceContainer) { - container["id"] = id // String - container["name"] = name // String - container["email"] = email // String - } -} -``` - -When convenience hurts performance, you can still use records, but you have better avoiding their string and dictionary-based methods. - -For example, when fetching values, prefer loading columns by index: - -```swift -// Strings & dictionaries -let players = try Player.fetchAll(db) - -// Column indexes -// SELECT id, name, email FROM player -let request = Player.select(idColumn, nameColumn, emailColumn) -let rows = try Row.fetchCursor(db, request) -while let row = try rows.next() { - let id: Int64 = row[0] - let name: String = row[1] - let email: String = row[2] - let player = Player(id: id, name: name, email: email) - ... -} -``` - -When inserting values, use reusable [prepared statements](#prepared-statements), and set statements values with an *array*: - -```swift -// Strings & dictionaries -for player in players { - try player.insert(db) -} - -// Prepared statement -let insertStatement = db.prepareStatement("INSERT INTO player (name, email) VALUES (?, ?)") -for player in players { - // Only use the unsafe arguments setter if you are sure that you provide - // all statement arguments. A mistake can store unexpected values in - // the database. - insertStatement.unsafeSetArguments([player.name, player.email]) - try insertStatement.execute() -} -``` - - -FAQ -=== - -- [How do I create a database in my application?](#how-do-i-create-a-database-in-my-application) -- [How do I open a database stored as a resource of my application?](#how-do-i-open-a-database-stored-as-a-resource-of-my-application) -- [How do I close a database connection?](#how-do-i-close-a-database-connection) -- [How do I print a request as SQL?](#how-do-i-print-a-request-as-sql) -- [Generic parameter 'T' could not be inferred](#generic-parameter-t-could-not-be-inferred) -- [SQLite error 10 "disk I/O error", SQLite error 23 "not authorized"](#sqlite-error-10-disk-io-error-sqlite-error-23-not-authorized) -- [What Are Experimental Features?](#what-are-experimental-features) - - -### How do I create a database in my application? - -This question assumes that your application has to create a new database from scratch. If your app has to open an existing database that is embedded inside your application as a resource, see [How do I open a database stored as a resource of my application?](#how-do-i-open-a-database-stored-as-a-resource-of-my-application) instead. - -The database has to be stored in a valid place where it can be created and modified. For example, in the [Application Support directory](https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html): - -```swift -let databaseURL = try FileManager.default - .url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true) - .appendingPathComponent("db.sqlite") -let dbQueue = try DatabaseQueue(path: databaseURL.path) -``` - - -### How do I open a database stored as a resource of my application? - -If your application does not need to modify the database, open a read-only [connection](#database-connections) to your resource: - -```swift -var configuration = Configuration() -configuration.readonly = true -let dbPath = Bundle.main.path(forResource: "db", ofType: "sqlite")! -let dbQueue = try DatabaseQueue(path: dbPath, configuration: configuration) -``` - -If the application should modify the database, you need to copy it to a place where it can be modified. For example, in the [Application Support directory](https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html). Only then, open a [connection](#database-connections): - -```swift -let fileManager = FileManager.default -let dbPath = try fileManager - .url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true) - .appendingPathComponent("db.sqlite") - .path -if !fileManager.fileExists(atPath: dbPath) { - let dbResourcePath = Bundle.main.path(forResource: "db", ofType: "sqlite")! - try fileManager.copyItem(atPath: dbResourcePath, toPath: dbPath) -} -let dbQueue = try DatabaseQueue(path: dbPath) -``` - - -### How do I close a database connection? - -Database connections are managed by [database queues](#database-queues) and [pools](#database-pools). A connection is closed when its database queue or pool is deallocated, and all usages of this connection are completed. - -Database accesses that run in background threads postpone the closing of connections. - - -### How do I print a request as SQL? - -When you want to debug a request that does not deliver the expected results, you may want to print the SQL that is actually executed. - -You can turn your request into a `SQLRequest` instance: - -```swift -try dbQueue.read { db in - let request = Wine - .filter(Column("origin") == "Burgundy") - .order(Column("price") - - let sqlRequest = try SQLRequest(db, request: request) - print(sqlRequest.sql) - // Prints SELECT * FROM wine WHERE origin = ? ORDER BY price - print(sqlRequest.arguments) - // Prints ["Burgundy"] -} -``` - -Another option is to setup a tracing function that will print out all SQL requests executed by your application. You provide the trace function when you connect to the database: - -```swift -var config = Configuration() -config.trace = { print($0) } // Prints all SQL statements -let dbQueue = try DatabaseQueue(path: dbPath, configuration: config) - -try dbQueue.read { db in - let wines = Wine - .filter(Column("origin") == "Burgundy") - .order(Column("price") - .fetchAll(db) - // Prints SELECT * FROM wine WHERE origin = 'Burgundy' ORDER BY price -} -``` - - -### Generic parameter 'T' could not be inferred - -You may get this error when using the `read` and `write` methods of database queues and pools: - -```swift -// Generic parameter 'T' could not be inferred -let x = try dbQueue.read { db in - let result = try String.fetchOne(db, ...) - return result -} -``` - -This is a Swift compiler issue (see [SR-1570](https://bugs.swift.org/browse/SR-1570)). - -The general workaround is to explicitly declare the type of the closure result: - -```swift -// General Workaround -let string = try dbQueue.read { db -> String? in - let result = try String.fetchOne(db, ...) - return result -} -``` - -You can also, when possible, write a single-line closure: - -```swift -// Single-line closure workaround: -let string = try dbQueue.read { db in - try String.fetchOne(db, ...) -} -``` - - -### SQLite error 10 "disk I/O error", SQLite error 23 "not authorized" - -Those errors may be the sign that SQLite can't access the database due to [data protection](#data-protection). - -When your application should be able to run in the background on a locked device, it has to catch this error, and, for example, wait for [UIApplicationDelegate.applicationProtectedDataDidBecomeAvailable(_:)](https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623044-applicationprotecteddatadidbecom) or [UIApplicationProtectedDataDidBecomeAvailable](https://developer.apple.com/reference/uikit/uiapplicationprotecteddatadidbecomeavailable) notification and retry the failed database operation. - -This error can also be prevented altogether by using a more relaxed [file protection](https://developer.apple.com/reference/foundation/filemanager/1653059-file_protection_values). - - -### What Are Experimental Features? - -Since GRDB 1.0, all backwards compatibility guarantees of [semantic versioning](http://semver.org) apply: no breaking change will happen until the next major version of the library. - -There is an exception, though: *experimental features*, marked with the "**:fire: EXPERIMENTAL**" badge. Those are advanced features that are too young, or lack user feedback. They are not stabilized yet. - -Those experimental features are not protected by semantic versioning, and may break between two minor releases of the library. To help them becoming stable, [your feedback](https://github.com/groue/GRDB.swift/issues) is greatly appreciated. - - -Sample Code -=========== - -- The [Documentation](#documentation) is full of GRDB snippets. -- [Demo Application](DemoApps/GRDBDemoiOS/README.md): A sample iOS application. -- [WWDC Companion](https://github.com/groue/WWDCCompanion): A sample iOS application. -- Check `GRDB.xcworkspace`: it contains GRDB-enabled playgrounds to play with. -- How to synchronize a database table with a JSON payload: [JSONSynchronization.playground](Playgrounds/JSONSynchronization.playground/Contents.swift) - - ---- - -**Thanks** - -- [Pierlis](http://pierlis.com), where we write great software. -- [@alextrob](https://github.com/alextrob), [@bellebethcooper](https://github.com/bellebethcooper), [@bfad](https://github.com/bfad), [@cfilipov](https://github.com/cfilipov), [@charlesmchen-signal](https://github.com/charlesmchen-signal), [@Chiliec](https://github.com/Chiliec), [@darrenclark](https://github.com/darrenclark), [@davidkraus](https://github.com/davidkraus), [@fpillet](http://github.com/fpillet), [@gusrota](https://github.com/gusrota), [@hartbit](https://github.com/hartbit), [@kdubb](https://github.com/kdubb), [@kluufger](https://github.com/kluufger), [@KyleLeneau](https://github.com/KyleLeneau), [@Marus](https://github.com/Marus), [@michaelkirk-signal](https://github.com/michaelkirk-signal), [@pakko972](https://github.com/pakko972), [@peter-ss](https://github.com/peter-ss), [@pierlo](https://github.com/pierlo), [@pocketpixels](https://github.com/pocketpixels), [@schveiguy](https://github.com/schveiguy), [@SD10](https://github.com/SD10), [@sobri909](https://github.com/sobri909), [@sroddy](https://github.com/sroddy), [@swiftlyfalling](https://github.com/swiftlyfalling), [@valexa](https://github.com/valexa), and [@zmeyc](https://github.com/zmeyc) for their contributions, help, and feedback on GRDB. -- [@aymerick](https://github.com/aymerick) and [@kali](https://github.com/kali) because SQL. -- [ccgus/fmdb](https://github.com/ccgus/fmdb) for its excellency. - -Legacy -====== - -#### Changes Tracking - -This chapter has been renamed [Record Comparison]. - -#### Persistable Protocol - -This protocol has been renamed [PersistableRecord] in GRDB 3.0. - -#### RowConvertible Protocol - -This protocol has been renamed [FetchableRecord] in GRDB 3.0. - -#### TableMapping Protocol - -This protocol has been renamed [TableRecord] in GRDB 3.0. - -#### Customized Decoding of Database Rows - -This chapter has been renamed [Beyond FetchableRecord]. - -[Associations]: Documentation/AssociationsBasics.md -[Beyond FetchableRecord]: #beyond-fetchablerecord -[Codable Records]: #codable-records -[Columns Selected by a Request]: #columns-selected-by-a-request -[Conflict Resolution]: #conflict-resolution -[Customizing the Persistence Methods]: #customizing-the-persistence-methods -[Date and UUID Coding Strategies]: #date-and-uuid-coding-strategies -[Fetching from Requests]: #fetching-from-requests -[The Implicit RowID Primary Key]: #the-implicit-rowid-primary-key -[The userInfo Dictionary]: #the-userinfo-dictionary -[JSON Columns]: #json-columns -[FetchableRecord]: #fetchablerecord-protocol -[EncodableRecord]: #persistablerecord-protocol -[PersistableRecord]: #persistablerecord-protocol -[Record Comparison]: #record-comparison -[Record Customization Options]: #record-customization-options -[TableRecord]: #tablerecord-protocol -[ValueObservation]: #valueobservation -[DatabaseRegionObservation]: #databaseregionobservation -[FetchedRecordsController]: #fetchedrecordscontroller -[RxGRDB]: http://github.com/RxSwiftCommunity/RxGRDB -[DatabaseRegionConvertible]: #the-databaseregionconvertible-protocol -[ValueObservation and DatabaseRegionObservation]: #valueobservation-and-databaseregionobservation -[DatabaseRegion]: #databaseregion -[SQL Interpolation]: Documentation/SQLInterpolation.md -[custom SQLite build]: Documentation/CustomSQLiteBuilds.md diff --git a/Example/Pods/GRDB.swift/Support/GRDB-Bridging.h b/Example/Pods/GRDB.swift/Support/GRDB-Bridging.h deleted file mode 100755 index e69de29..0000000 diff --git a/Example/Pods/GRDB.swift/Support/GRDB.h b/Example/Pods/GRDB.swift/Support/GRDB.h deleted file mode 100755 index 69ad6ed..0000000 --- a/Example/Pods/GRDB.swift/Support/GRDB.h +++ /dev/null @@ -1,10 +0,0 @@ -@import Foundation; - -//! Project version number for GRDB. -FOUNDATION_EXPORT double GRDB_VersionNumber; - -//! Project version string for GRDB. -FOUNDATION_EXPORT const unsigned char GRDB_VersionString[]; - -#import - diff --git a/Example/Pods/GRDB.swift/Support/grdb_config.h b/Example/Pods/GRDB.swift/Support/grdb_config.h deleted file mode 100755 index 641560f..0000000 --- a/Example/Pods/GRDB.swift/Support/grdb_config.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef grdb_config_h -#define grdb_config_h - -#if defined(COCOAPODS) - #if defined(GRDBCIPHER) - #include - #else - #include - #endif -#else - #if defined(GRDBCUSTOMSQLITE) - #include - #else - #include - #endif -#endif - -typedef void(*errorLogCallback)(void *pArg, int iErrCode, const char *zMsg); - -// Wrapper around sqlite3_config(SQLITE_CONFIG_LOG, ...) which is a variadic -// function that can't be used from Swift. -static inline void registerErrorLogCallback(errorLogCallback callback) { - sqlite3_config(SQLITE_CONFIG_LOG, callback, 0); -} - -#endif /* grdb_config_h */ diff --git a/Example/Pods/GRDB.swift/Support/module.modulemap b/Example/Pods/GRDB.swift/Support/module.modulemap deleted file mode 100755 index 04ac555..0000000 --- a/Example/Pods/GRDB.swift/Support/module.modulemap +++ /dev/null @@ -1,8 +0,0 @@ -framework module GRDB { - umbrella header "GRDB.h" - - export * - module * { export * } - - header "grdb_config.h" -} diff --git a/Example/Pods/Local Podspecs/MuslimData.podspec.json b/Example/Pods/Local Podspecs/MuslimData.podspec.json deleted file mode 100755 index 6cff543..0000000 --- a/Example/Pods/Local Podspecs/MuslimData.podspec.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "MuslimData", - "version": "1.6.0", - "summary": "Islamic library (Prayer Times [fixed and calculated], Names of Allah, and Azkars).", - "description": "MuslimData is an Islamic library that provides Prayer Times (fixed and calculated), Offline Geocoder, Location Search, Names of Allah, Azkars (Husnil Muslim).\n\nFixed and Calculated Prayer Times\nMost cities around the world find their prayer times by using some calculations which is based on location (longitude and latitude) but some other cities have fixed time table for their prayer times. This library contains most fixed and calculated prayer times. Now you can contribute it to improve it and also you can use it in Muslim communities or Muslim apps.", - "homepage": "https://github.com/KosratDAhmad/MuslimData", - "license": { - "type": "MIT", - "file": "LICENSE" - }, - "authors": { - "Kosrat D. Ahmad": "kosrat.d.ahmad@gmail.com" - }, - "source": { - "git": "https://github.com/KosratDAhmad/MuslimData.git", - "tag": "1.6.0" - }, - "platforms": { - "ios": "13.0" - }, - "source_files": "Sources/MuslimData/**/*", - "swift_versions": "5.10", - "resources": "Sources/MuslimData/Resources/**/*", - "frameworks": "UIKit", - "dependencies": { - "GRDB.swift": [ - "~> 4.0.1" - ] - }, - "swift_version": "5.10" -} diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock deleted file mode 100755 index b024598..0000000 --- a/Example/Pods/Manifest.lock +++ /dev/null @@ -1,25 +0,0 @@ -PODS: - - GRDB.swift (4.0.1): - - GRDB.swift/standard (= 4.0.1) - - GRDB.swift/standard (4.0.1) - - MuslimData (1.6.0): - - GRDB.swift (~> 4.0.1) - -DEPENDENCIES: - - MuslimData (from `../`) - -SPEC REPOS: - trunk: - - GRDB.swift - -EXTERNAL SOURCES: - MuslimData: - :path: "../" - -SPEC CHECKSUMS: - GRDB.swift: 106a830decf1d92a3fc63c6d6a2f6586f6187297 - MuslimData: 51f505a7cc7bbd67ed9e52b6be0dc832f7b67041 - -PODFILE CHECKSUM: f1a8413ff73c18d27d5283425e84b7905893b20c - -COCOAPODS: 1.15.2 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index f9a997f..0000000 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1674 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 017100E67A1E1800897650134CF7DE6A /* SQLiteDateParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 375F9CF0AC63BC7CF0AF8682C8BF1751 /* SQLiteDateParser.swift */; }; - 04E95DFE987EA646F95334D48378802E /* SQLRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96B1FED296230650927F5C8E53F05DAC /* SQLRelation.swift */; }; - 0532A2FFCC1D7BE3AFC1F0BD64FD4E1B /* ValueObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6250B466AAE090B46198B61F8C838EF /* ValueObserver.swift */; }; - 0546DA073F90C6118F0257337E143B5C /* TableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5951C4A078EF26CE50BDF528E6187642 /* TableRecord.swift */; }; - 05792E7B2B1875A8E33AD986310E279F /* SQLAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE42771047CDEDC16B7A058FFFC770C7 /* SQLAssociation.swift */; }; - 06EA1A8F47135B4A17ACB2D26BAE86A4 /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = E68F0140AC5E63E44C720D4D0D22D415 /* Record.swift */; }; - 08BCCE1C892468BBBA2C6439FC8873EA /* FetchedRecordsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2FCC2BA27CDFBC62682AE669A77AE1D /* FetchedRecordsController.swift */; }; - 09CC7395890EB4D61E6B7AB273AA7D83 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A94D67DD3B9C4170250E8C7A307207 /* Statement.swift */; }; - 0A7AA860E489240B08A25D41BBA74983 /* StandardLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E99DCA167FB7C8523CBE7E30C75E87 /* StandardLibrary.swift */; }; - 0AA607557F18B41C3EB5289A5C720F47 /* PersistableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E2B6DDCB8FBDC144EFF6CF15E9FAC07 /* PersistableRecord.swift */; }; - 0AC8CBE32F1F042A4591BF19CFC74D36 /* ValueObservation+Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D81A451F08F038FA755936DE3D1590A /* ValueObservation+Row.swift */; }; - 0AE33E35827196130F612F39E6AA9511 /* SQLInterpolation+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0809A71A0BA55AB90A71EC6E1734B81F /* SQLInterpolation+QueryInterface.swift */; }; - 0B13C25DAA332D348C8FE6F35B8E394D /* GRDB.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA133D8C22FCD0B36947C006B980ED0 /* GRDB.swift-dummy.m */; }; - 0BC73C42C51ED8C6436B7F51902C0FAF /* Database+Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F24513440BECF3F4711B37E2873F911 /* Database+Schema.swift */; }; - 0C07B15961DD84423806B3C72C003239 /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79461AEF0D85C606ACD69EF9B8C8939 /* Migration.swift */; }; - 0CAE2CE3EBA6D91FDE8B144BDC38EA75 /* Name.swift in Sources */ = {isa = PBXBuildFile; fileRef = A020DF84492FD75A8638CB22DFE52845 /* Name.swift */; }; - 10D31D8BB678B6EB68914A683E111988 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = 80CDA964EF94F8B5E9C39C8F8655A1B7 /* CHANGELOG.md */; }; - 10DCD7C680A125DA378E2A287928A224 /* Association.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE67BF28E65F99081D8B19B49D8BBA0A /* Association.swift */; }; - 110AD354AF4B25121D882CEE2E192377 /* ValueObservation+CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9CAACFD9D4F26952E59D5D9C90D2528 /* ValueObservation+CompactMap.swift */; }; - 11B2B59960DD92FBA263A2550875D84A /* BelongsToAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF82642D2452B676DE57B1758497FD6E /* BelongsToAssociation.swift */; }; - 1302720D764C0D78217785711574C146 /* ValueObservation+DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C148EB18C09F4877D62A86109CADBEC /* ValueObservation+DistinctUntilChanged.swift */; }; - 14B04D3B54373F036D38086FF7F64AB2 /* FetchableRecord+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCE86FA4B74834175DEDACF492416DDA /* FetchableRecord+Decodable.swift */; }; - 1A440A20CE875F61FA4923F236C5DB80 /* RequestProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F65D060B3ED7C64571E263EC2AA76419 /* RequestProtocols.swift */; }; - 1E673226452BFCE06C46A9AD51722A4B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; - 1F7E49C5DAE888114BCB1517930AB815 /* Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF1D9F025C44D7FAEEE0206D731A765 /* Row.swift */; }; - 20F21FD4EE04549EC5D901C6A3D42051 /* EncodableRecord+Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE913A6C322FB7BA4C11487C3ECB221 /* EncodableRecord+Encodable.swift */; }; - 215CD75B1818369F268C2F34C0CE1959 /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 464EAD3E4BAD6DE5D12979750026ACB4 /* URL.swift */; }; - 22CC957C16EE9373A9B4290AA4ED6AA0 /* HasManyThroughAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE8C30B4C6ACCB9F1B626D0CF6DC4D2C /* HasManyThroughAssociation.swift */; }; - 25C1F12A65651337C95CE3AA1C270FFD /* Language.swift in Sources */ = {isa = PBXBuildFile; fileRef = D860051DE87F8574AFEFF56F7C619598 /* Language.swift */; }; - 2904CD80CF6A3460802CCE57F69AF41F /* CGFloat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992079014BF8ABA32EA866CBF1AEFBDD /* CGFloat.swift */; }; - 2A48909A7DFBB93E21A01AE9FB9ADE85 /* FTS3TokenizerDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35410C80E22F178FE1666DEE71A3252 /* FTS3TokenizerDescriptor.swift */; }; - 2AD629C4A4F714BE8FB7A144738E4E5D /* SQLQueryGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FD392A87C27DC4A006672018F8EAAF /* SQLQueryGenerator.swift */; }; - 2CD0DCA547DA3B28AF55214735875060 /* DatabaseValueConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D0BFFCE7DA2A58457C26354A62B0987 /* DatabaseValueConvertible.swift */; }; - 2E4175254C6C530AAA65348527456179 /* ValueObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE91E12DE279B781B318C35432A3D8DB /* ValueObservation.swift */; }; - 31F227659934F4BCFB0042DA89989D94 /* Inflections+English.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDD77D03BF3203412EACD1B9A8B887D5 /* Inflections+English.swift */; }; - 3218FBB3E09F368DCA0233431A1B31B1 /* DatabaseQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2347D1DE9EE5CCD0DE9F7A916A8102F8 /* DatabaseQueue.swift */; }; - 3323A5E4F9C70708EB98C2EDDE17C4BF /* grdb_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 80BC3878E43FC7BC9CC5A386968117CE /* grdb_config.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35DD8491C8257EE510292171F72B16B5 /* DBHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = A31E7F6537B28EF0C3FD098B5230A169 /* DBHelper.swift */; }; - 381D73BEC869D518610B85004A4446E5 /* DatabaseError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9810ED848A8370D28A206952D1E634FA /* DatabaseError.swift */; }; - 3BB28BF26BFDF0636B75188C9070E7AF /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B43031A46D1FB9BDF3622252D66C3CF /* Utils.swift */; }; - 3CBAD9986CBB94D7E861E6480970153C /* DatabaseReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F5ADFF5989279CA7A2083ACE8E04686 /* DatabaseReader.swift */; }; - 3CBB30C043CC794613FE17D6DD97672E /* Pods-MuslimData_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD85DBCEEE70ED57287FF3D9DEBDCDB /* Pods-MuslimData_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3DCD65358513F5390E70A7D95CF0C88E /* DatabaseSchemaCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66B8189DE409C6CE416BAA423ECCE75 /* DatabaseSchemaCache.swift */; }; - 407F2988EFEF7526F9D1334EDB7F72B6 /* TransactionObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C351E742746F64DC32068BFDBF920798 /* TransactionObserver.swift */; }; - 423E36F30B6250EB99EB4A50BCC5FEED /* EncodableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736E75FFBCE1C9C3C052ED6848ECAA3A /* EncodableRecord.swift */; }; - 45125BB96512230A2EBF036CC7A69B7E /* RowAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8FD966EA188EC1FB1DA0C5734E4B36A /* RowAdapter.swift */; }; - 46F4181A36A729B3A8C73F75CE5C0F5A /* ValueObservation+FetchableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093944E617B52AF936D889D4EA4FC246 /* ValueObservation+FetchableRecord.swift */; }; - 4AF4C9AF66D23732A42A735353F19B2F /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = A594A615D1610A6A82241572E57C4A87 /* Database.swift */; }; - 4B010272563F53C1F4A7EB56462910DD /* FetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44B93E97B50A2C3968F611666B05EE12 /* FetchRequest.swift */; }; - 4C64EBFA94BCD55E127222CFFBC04C69 /* OrderedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7A10B0C7660263FD83A5CD29F2E1165 /* OrderedDictionary.swift */; }; - 50212346A63C32618C9ADA10A1DF18A9 /* AzkarCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1080CF86161774FC324D019BB74E7FA /* AzkarCategory.swift */; }; - 5165B678B8A1A04D0A293E077252DAC0 /* SQLExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64162F22C59C71C0145CBCB56A60959E /* SQLExpression.swift */; }; - 51724EB13ECD41D68F70A91F1F1984F5 /* Column.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CE552E45ACF80214D40921DD03CAA67 /* Column.swift */; }; - 5428F5F7AC1DB2150C91C619A4C02431 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; - 56646D9949730F756FD5FB4A811E25F1 /* QueryInterfaceRequest+Association.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F8B2F0AC21F8A9AA0C4DAF6A289539C /* QueryInterfaceRequest+Association.swift */; }; - 5721EBF6F9407455923DCB004F263158 /* TableDefinition.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1081094773556A6A464D2CD55EAD506 /* TableDefinition.swift */; }; - 57251BACF5A417BC89DDD4E41BC0A655 /* DatabaseValueConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844CE98E42007DDFB8D4BFF8DAA2EF15 /* DatabaseValueConversion.swift */; }; - 581BE2110A4F70454962F512B5CD48D7 /* MuslimRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD51BACBD28D9EE11984C183825D66AD /* MuslimRepository.swift */; }; - 5960841EDA5BB846BE1B5C917AA533F5 /* DatabaseValueConvertible+RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E4E05505643C3270EBD487F65E68FAC /* DatabaseValueConvertible+RawRepresentable.swift */; }; - 5961CDDE4ED0F98ABAAB378D5AAFDB1D /* NSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664686B6ABA608503F83F85979F0687B /* NSNumber.swift */; }; - 5AA5595884C8650C66B5121EB80C664C /* FTS3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC1C60D10CB6A29C0181276AB532200 /* FTS3.swift */; }; - 5AD116150EB0DC2A7040D3D79A524661 /* SQLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEA27CDC4C954599103EAB46FC89D71E /* SQLRequest.swift */; }; - 5B155BAD5A7A3CB67D6BD57819071AAE /* Pods-MuslimData_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E787A815C699A533C7E83D8022D22549 /* Pods-MuslimData_Example-dummy.m */; }; - 5CABF8C1EBECB5937F2AB3EA836680C0 /* Pods-MuslimData_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B543DF39D139A8C78771B681C6ADAA2 /* Pods-MuslimData_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5EB37471793B7B00698579768F0C3CFF /* SQLOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65AA78E233337BE07809C0BCE36F7925 /* SQLOperators.swift */; }; - 6255128A9FE73C1F4E3229D3320FF0B5 /* NSString.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCCA917D100B6F5A3512DB297210C53C /* NSString.swift */; }; - 630D1F558EDEC847D73F2A33AD2BD4C9 /* ValueObservation+Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFDF28A6D90C1E561747E5F01EF8D40 /* ValueObservation+Combine.swift */; }; - 65B76004379D42F12DBC219C4A65A5F1 /* PrayerTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA68F2CB5BE572106E41C45020F9797C /* PrayerTime.swift */; }; - 672244EBC7B1A639BDA1E2C33CE8D12D /* DatabasePromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCBA8F76DA14E950E08C706D2A92E64 /* DatabasePromise.swift */; }; - 6739991E2B88A9C6B1F247A32871C77F /* ValueObservation+Count.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8558236B5D95448121116192CDF82D7C /* ValueObservation+Count.swift */; }; - 69D145D32F61AD3E10F27039A4D43230 /* TimeFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D7F3BF5B125E5D8B02C6498D4ED182 /* TimeFormat.swift */; }; - 6BD3AB4777D1498A9B626A9F02D44632 /* SQLForeignKeyRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F096D89EED3D262636E1838D0D2180 /* SQLForeignKeyRequest.swift */; }; - 6D27EC8A41CD39E29C55BA67577F49B5 /* DatabaseMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7B03B77F2F0A31ED478363C72D8A24 /* DatabaseMigrator.swift */; }; - 6DF9A91F46F052EF0A986515BBA802A6 /* NSNull.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11236E27D6499D7928B236123927E583 /* NSNull.swift */; }; - 6FF06E917D72494A3C652D7E4EA7A8F4 /* Row+QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F48E1D2E2EE31EA5F8CDF16FBF28591E /* Row+QueryInterfaceRequest.swift */; }; - 71CD4C1E65C22B207230F68612BF3BD5 /* DatabaseValueConvertible+ReferenceConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEBAE4960F59932E1A399C109A453E0C /* DatabaseValueConvertible+ReferenceConvertible.swift */; }; - 726BDAF6672123C0FC06876E00CF40BB /* PrayerAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9D64AFF2D5180626BD6EE6238EE30D /* PrayerAttribute.swift */; }; - 7534E2B56426F355DD978C6224B46FDD /* UUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983C554E80E2287925036A568A9537FB /* UUID.swift */; }; - 7ABBE42689BAF80D28D743C5F01A0C63 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */; }; - 7FB9ACE4A3141B803006A82963187FDA /* StatementColumnConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1030CDC442B65527D048702297A698A8 /* StatementColumnConvertible.swift */; }; - 8155942BCF5F48E0AF95AEFBF6ABF225 /* DatabaseSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36043B93868C7DB00D4017D9C4FA38FA /* DatabaseSnapshot.swift */; }; - 8409A7A3F0A1F44440B560BD02B7EB65 /* HasOneThroughAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39DD281AEC3E59FB3A0277BC475473C6 /* HasOneThroughAssociation.swift */; }; - 8623B0145319BCBDCB45911FC3716248 /* HasManyAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08AE18009E789149C931ECC333F2189A /* HasManyAssociation.swift */; }; - 86AD1E8D4914031B8CD8BF949863A49F /* Cursor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 740370A5EC50C2D78ED000F028CEAD26 /* Cursor.swift */; }; - 874C20F8BFB0B1F04A58DBD1273620B5 /* TableRecord+Association.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EE756FB280A4709B342CCB851AF8B87 /* TableRecord+Association.swift */; }; - 89F8459CC1490BFEFA068D5B87266C99 /* ValueReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84505976E3D76B2D94620C69841FCC56 /* ValueReducer.swift */; }; - 8BE8859153ACFE707E6DDD9FDE619BF9 /* SQLCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D30BAFCE984848BDEBF194A2899567EA /* SQLCollection.swift */; }; - 8CB07EE29755E83E64300A3CAF1720E8 /* Pods-MuslimData_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DE2B11CBBBF488B9CB4F133978648866 /* Pods-MuslimData_Tests-dummy.m */; }; - 8F47FE3A73BCFBB274500D5E81641BD8 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA31FB39C8D6B4D3E53D80D093D2F6F /* Date.swift */; }; - 91F847770D950AB558027CEF5A486872 /* QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEE88C13D61A786DFAB09EAD3D25A351 /* QueryInterfaceRequest.swift */; }; - 93E62306A467841910EE260C3FBBC7D1 /* VirtualTableModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB75F83D1AE48C88A0A85D56CF0F13B0 /* VirtualTableModule.swift */; }; - 94383EB3E69C08C18C357AB79F8C21AC /* DatabaseValueConvertible+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EED1A4504790AF7E6F5240F27DBEF61 /* DatabaseValueConvertible+Decodable.swift */; }; - 98EB7E3136AEC27D3C061073CE79FBA4 /* DatabaseDateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBCD71E190AB01AEDA957A91752CA0B0 /* DatabaseDateComponents.swift */; }; - 99A478CF77D56C7AA427BCF1D2185F01 /* FTS3Pattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56DEB559B5A5DCE1B324FB12C5E0A1FC /* FTS3Pattern.swift */; }; - 99A556F66D6F9602445A722A3C49E351 /* Pool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5422A9FBD155A4783EAB1DBC2D4413EB /* Pool.swift */; }; - 9A7C136377B26BFDDE85420E955E828F /* FetchableRecord+TableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6135EABC840E345AC834E8572D35D1B2 /* FetchableRecord+TableRecord.swift */; }; - 9ADD14F94A1622B4755FE115902B50C7 /* GRDB-4.0.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84ADB6717063112A6383A1C160F86C26 /* GRDB-4.0.swift */; }; - 9CF893777F2FE720B6865DFD347717D9 /* DatabaseFunction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1D40C1A883759045B7FB69D2D1B0DB /* DatabaseFunction.swift */; }; - 9F2C324F0C115BDAF6770E75E4F6F05A /* FetchableRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4468899EAFE6991759EA8A46BB51BA91 /* FetchableRecord.swift */; }; - 9FD87DA03BEEDB346222F6BCDAEA3656 /* AssociationAggregate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1E7ED6955D27B6C52BCB568C182949 /* AssociationAggregate.swift */; }; - A47F311157375156772F34DEC79C7AC1 /* SQLQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6617214BBCD73E8681833F4DEB505C18 /* SQLQuery.swift */; }; - A5B00A31722CFF959CAFA83CE1772681 /* StatementAuthorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76A6406A1762BAFF98F6CD7FF7EE7FF0 /* StatementAuthorizer.swift */; }; - A5B7DC70DB74B8D550946CEF1518A466 /* TableRecord+QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59F05D12626E41B596F1F220097E173A /* TableRecord+QueryInterfaceRequest.swift */; }; - A602A8049ECE9D77A9489B39FCDC8BFE /* SQLSpecificExpressible+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B15106707D4C78899C33C2C9A781E277 /* SQLSpecificExpressible+QueryInterface.swift */; }; - A8624D7D3076BFB54DC2B8542297F2C1 /* ReadWriteBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6119B7DCF1679F35ADE30E741827C78 /* ReadWriteBox.swift */; }; - A89CD38444529575CDAA3B043B78F82A /* CHANGELOG.md in Sources */ = {isa = PBXBuildFile; fileRef = 80CDA964EF94F8B5E9C39C8F8655A1B7 /* CHANGELOG.md */; }; - ACD80B5FE4A0FBB9BCE79DB7280B74DB /* SQLInterpolation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A7DEB36B2A2D60D21564BC296A4D3B /* SQLInterpolation.swift */; }; - ACFE9DAF630D0B6ED67057C9A6CDA01B /* MuslimData-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 29EF83B1D17B2AA944D71FF61892E3D7 /* MuslimData-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD88AF5B3A65CD3423071EB46BB4C78C /* ValueObservation+DatabaseValueConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF327E118920934B9AD7EA46DCA48965 /* ValueObservation+DatabaseValueConvertible.swift */; }; - AEE7AED548822B2FA7D0B699FFA56DCD /* Database+Statements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F67789688FB3673E6008AEA51847BB9 /* Database+Statements.swift */; }; - AFDDB5176E907707C03E3B8BAB9A7DC8 /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4181F7638B42161C4FE446BDEA1ADC5 /* FTS5.swift */; }; - B119448E22AD6D03A5F0220D8880030D /* Repository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1155FBAC7ADB560A7D21F0F646E77F1F /* Repository.swift */; }; - B2B755533EA09F2E93A1D94B0E2F500C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; - B3666972AADD12C032E180312A6E0054 /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A9CD20B785EC16445BB4CCD8A65A97 /* Location.swift */; }; - B450FE8985D14C5C157C9BAFEEBE1C7A /* NSData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F07F62F624F83DF0B8480FCEEFBADA32 /* NSData.swift */; }; - B68C64C2CFF1682DC6831206D363F289 /* ValueObservation+Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = A151C2196CAB62A5C9D0509FFF5D3BFC /* ValueObservation+Map.swift */; }; - B75847CFF2033ED02EAC81E896BDE863 /* Inflections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A328852E5AC5CD0A7F532F806C27C46 /* Inflections.swift */; }; - B93CF9C18D6039FBF653B5BA6821251A /* SQLFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3586E5B7A2694DEC693A9A2D081D420A /* SQLFunctions.swift */; }; - BA5F97861B382AC775297D308D2F5D9E /* SQLLiteral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F72F39252476A5889AC2504BE74ED92 /* SQLLiteral.swift */; }; - BF7934391FCB3BE40676060A7A8E3204 /* DatabaseRegionObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BA38261B622111B36F880E9829A137 /* DatabaseRegionObservation.swift */; }; - C2C7373F605AF06723C0E1AD25225035 /* SchedulingWatchdog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35B3000913B306C6B9EA60E706939697 /* SchedulingWatchdog.swift */; }; - C44C3EB46AB4B908279430092D61BB89 /* muslim_db_v2.0.0.db in Sources */ = {isa = PBXBuildFile; fileRef = 9E58180EF7E8F6358C3395350061BE44 /* muslim_db_v2.0.0.db */; }; - C5688D950388FE11B862E50DBE273A2A /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9260AA5117FA49534554748ACD1E7BC /* FTS4.swift */; }; - C592F719FE708288EA8E883E1977C01B /* DatabaseRegion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56FEEB1D0A0093852C8360424DE7C77C /* DatabaseRegion.swift */; }; - C695CAEBD933886E0EFFF9CC21FA4E29 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DD1E81E01020BE507304429A36F9976 /* Configuration.swift */; }; - C6CF68FE5F54A33B5CDF53A403801DBE /* FTS5Tokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C286D53E1D7D0D96BD4C534CFEB86E5E /* FTS5Tokenizer.swift */; }; - C7BD8290465A335982C2B2817C54F4A6 /* FTS5Pattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = E496549682A5A201323B61D591167A4A /* FTS5Pattern.swift */; }; - C91922F852F3CF82A64332CC1C9FC1E8 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E93A5697877EDDADF2B97223FF6260 /* Result.swift */; }; - CA924ACD1926D78E1E51BE4651500130 /* DatabaseValueConvertible+Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60A9D3FA5C081F82DB4B0B9178F7405 /* DatabaseValueConvertible+Encodable.swift */; }; - CBBB7FA02EAE0C5960DDA6BA3240581F /* AzkarChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D6A8BE5B76B247298A79BFF89DF6D29 /* AzkarChapter.swift */; }; - CC174B9845F2BE188E6D0510D8C01FCB /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83C9A0047B7665B321CE637EBB71CB5 /* Data.swift */; }; - CCAE93D8B6E2F417F4A37E519B4BD567 /* ValueObservation+MapReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D864FACE1073789EB5028B18AF3981 /* ValueObservation+MapReducer.swift */; }; - CD838E8C8C55E9EC4ADF60FD9F3F50B6 /* AzkarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6AD0B87216E32B86C7F4855A5F6BDE1 /* AzkarItem.swift */; }; - D12E8348DB93B661BE01F3B989BDBC82 /* SQLSelectable+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5D05CF1C40BFDA3E4AF4AA9FA1AB0B /* SQLSelectable+QueryInterface.swift */; }; - D4C2A4492A414CE181FDD2825038A37C /* Prayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D3E0CD6709358AFF08D1535414B5CC6 /* Prayer.swift */; }; - D5798123039B4E95BA8E99EB23BA5AA2 /* MuslimData-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7506C8792FBFB2B07AD8B85B5C3ADD /* MuslimData-dummy.m */; }; - D6B71CA98BEF138A6C29511B9B770119 /* FTS5+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 612B94F9D0155E187C8B3EC4978453CC /* FTS5+QueryInterface.swift */; }; - D91F36DCE86FCA2D5CBCA65C7717910D /* GRDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 13088891A66C735364301AC000712CE0 /* GRDB.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBF49477A941C15CB0F2E2B48361ECB8 /* DatabasePool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 798DB5BE9EB09CBDF299C90C481A9110 /* DatabasePool.swift */; }; - DC61B7FFFC90E3EF20E3235089040DB2 /* SQLCollatedExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E063D67D1999B9CF83B528F48C749A /* SQLCollatedExpression.swift */; }; - DD32D7F782E4361D4C89454C0C32A5F2 /* SQLGenerationContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44E2482E80E8ABCEB62ADF9795702D10 /* SQLGenerationContext.swift */; }; - DE122D9868C51A9D5B987AA3B77FFEE9 /* muslim_db_v2.0.0.db in Resources */ = {isa = PBXBuildFile; fileRef = 9E58180EF7E8F6358C3395350061BE44 /* muslim_db_v2.0.0.db */; }; - DE9E44E1B0A168154335C2BA7E916D05 /* FTS3+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D6C2C95FD0E1A287EA068E42E4A2B2 /* FTS3+QueryInterface.swift */; }; - E0B5CEB15E69B7AB763FBF76A835B897 /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6EF5186786DEB317F4E8700B553D53 /* String+Extensions.swift */; }; - E23AB586690BA3D53DFE9B12F7275F95 /* DatabaseValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340D6C9CF4EA28E78B5B7EC4BAE876F8 /* DatabaseValue.swift */; }; - E4A9CEF4D097E1B33730AC0B34E5B8AB /* FTS5CustomTokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1428D60F918864DEF88EB111C77C2519 /* FTS5CustomTokenizer.swift */; }; - E54D49BF5E856AC43F268EE0A7898FA4 /* HasOneAssociation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E4B908C46D8AC8246EC4E00DC32EE6E /* HasOneAssociation.swift */; }; - E67DA81B6D35EC6B20CFF3CB27274710 /* SQLExpressible.swift in Sources */ = {isa = PBXBuildFile; fileRef = D142D2DDF4BFBB74839269DB42B8692C /* SQLExpressible.swift */; }; - E7EA2E83C2DD69633C8648EFACAD76A9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; - E8A7551BF6EE1C5D0012AA37A5513213 /* DatabaseWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E97570A73E421384DAD384510A90FFF /* DatabaseWriter.swift */; }; - EA04FA1F59DAE1B863A95D8475DEEBA5 /* SQLOrdering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D2F8E884941CCCB42A30760A3AEBB42 /* SQLOrdering.swift */; }; - EDB43BAEF8986890368B148A379B8633 /* FetchableRecord+QueryInterfaceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1F96A960AFA0054EB6D2173ADB6993 /* FetchableRecord+QueryInterfaceRequest.swift */; }; - F261D22CFB15575AF31D11DF7986F1B5 /* FTS5WrapperTokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5376CE97B980678A6B2CE4CDC1F3E1E7 /* FTS5WrapperTokenizer.swift */; }; - F6C0E64D046D5A28070C7272E15D8482 /* GRDB-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = 524CC7BFB573E8D444A899F3AA99FFC6 /* GRDB-Bridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7030CD3F4A0A195D82A93FA399DC288 /* DateExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FB68FAD43CF8429267EF33197BF6A4 /* DateExtensions.swift */; }; - F9110500A74A4EDDE31D10A22F4C306A /* SQLSelectable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B635DCB1E6D60260828C27E3C1366FD2 /* SQLSelectable.swift */; }; - FBFB19ABAB8EC550D058E3B191B6941E /* DatabaseCollation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1821A1110F31EEDD916328777B65CA /* DatabaseCollation.swift */; }; - FD9328E1627DF89B75AC709CE2007134 /* SerializedDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0271944F72BFBCF03BEBC7F9625E332B /* SerializedDatabase.swift */; }; - FDCE9620C8A492D3DB2613DDB2A878E1 /* FTS5TokenizerDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 079E0846208ED8C64AE0141E80D5AF30 /* FTS5TokenizerDescriptor.swift */; }; - FE7333505F03EE420F81555B650AC12B /* SQLExpression+QueryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A37AB04CE371562BF8E71E72FF7DCC2 /* SQLExpression+QueryInterface.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 292733CD321409D2EC9B370D7E32087E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 35E05502EA95CD6D695F7745FBADAD13; - remoteInfo = MuslimData; - }; - 952DED73CD3493BCE5970144033D1887 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0A86C228CFCBC35A1FD284274ED0930F; - remoteInfo = GRDB.swift; - }; - B98FCE2CA12598ACDA61883D0FD21409 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0A86C228CFCBC35A1FD284274ED0930F; - remoteInfo = GRDB.swift; - }; - DB64360DDEC60608B4D08463E07A8F9B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 87B1B784982A5C7E813417C4403B90BB; - remoteInfo = "Pods-MuslimData_Example"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 00D6C2C95FD0E1A287EA068E42E4A2B2 /* FTS3+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FTS3+QueryInterface.swift"; path = "GRDB/QueryInterface/FTS3+QueryInterface.swift"; sourceTree = ""; }; - 00D864FACE1073789EB5028B18AF3981 /* ValueObservation+MapReducer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+MapReducer.swift"; path = "GRDB/ValueObservation/ValueObservation+MapReducer.swift"; sourceTree = ""; }; - 00E93A5697877EDDADF2B97223FF6260 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = GRDB/Utils/Result.swift; sourceTree = ""; }; - 01FB68FAD43CF8429267EF33197BF6A4 /* DateExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DateExtensions.swift; sourceTree = ""; }; - 0271944F72BFBCF03BEBC7F9625E332B /* SerializedDatabase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerializedDatabase.swift; path = GRDB/Core/SerializedDatabase.swift; sourceTree = ""; }; - 079E0846208ED8C64AE0141E80D5AF30 /* FTS5TokenizerDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5TokenizerDescriptor.swift; path = GRDB/FTS/FTS5TokenizerDescriptor.swift; sourceTree = ""; }; - 07EFAC04C8D1109BF2827F89C521B330 /* Pods-MuslimData_Tests */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-MuslimData_Tests"; path = Pods_MuslimData_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0809A71A0BA55AB90A71EC6E1734B81F /* SQLInterpolation+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLInterpolation+QueryInterface.swift"; path = "GRDB/QueryInterface/SQLInterpolation+QueryInterface.swift"; sourceTree = ""; }; - 08AE18009E789149C931ECC333F2189A /* HasManyAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasManyAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasManyAssociation.swift; sourceTree = ""; }; - 093944E617B52AF936D889D4EA4FC246 /* ValueObservation+FetchableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+FetchableRecord.swift"; path = "GRDB/ValueObservation/ValueObservation+FetchableRecord.swift"; sourceTree = ""; }; - 0BD85DBCEEE70ED57287FF3D9DEBDCDB /* Pods-MuslimData_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MuslimData_Tests-umbrella.h"; sourceTree = ""; }; - 0D81A451F08F038FA755936DE3D1590A /* ValueObservation+Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Row.swift"; path = "GRDB/ValueObservation/ValueObservation+Row.swift"; sourceTree = ""; }; - 0F524B59DAF2332C1379730B07D76C1B /* MuslimData.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MuslimData.debug.xcconfig; sourceTree = ""; }; - 1030CDC442B65527D048702297A698A8 /* StatementColumnConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StatementColumnConvertible.swift; path = GRDB/Core/StatementColumnConvertible.swift; sourceTree = ""; }; - 11236E27D6499D7928B236123927E583 /* NSNull.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSNull.swift; path = GRDB/Core/Support/Foundation/NSNull.swift; sourceTree = ""; }; - 1155FBAC7ADB560A7D21F0F646E77F1F /* Repository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Repository.swift; sourceTree = ""; }; - 13088891A66C735364301AC000712CE0 /* GRDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GRDB.h; path = Support/GRDB.h; sourceTree = ""; }; - 1428D60F918864DEF88EB111C77C2519 /* FTS5CustomTokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5CustomTokenizer.swift; path = GRDB/FTS/FTS5CustomTokenizer.swift; sourceTree = ""; }; - 14A94D67DD3B9C4170250E8C7A307207 /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = GRDB/Core/Statement.swift; sourceTree = ""; }; - 15A7DEB36B2A2D60D21564BC296A4D3B /* SQLInterpolation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLInterpolation.swift; path = GRDB/Core/SQLInterpolation.swift; sourceTree = ""; }; - 1694430E77D581F66D2781FD97253971 /* MuslimData.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = MuslimData.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 179568A184A07A92A074EBA8DD2BCA99 /* GRDB.swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GRDB.swift-Info.plist"; sourceTree = ""; }; - 17ABD68E920293F080122810A8881638 /* GRDB.swift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GRDB.swift; path = GRDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1BF6C61A2E5710D67D507E6B33189233 /* MuslimData */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MuslimData; path = MuslimData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1D9D64AFF2D5180626BD6EE6238EE30D /* PrayerAttribute.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrayerAttribute.swift; sourceTree = ""; }; - 1F72F39252476A5889AC2504BE74ED92 /* SQLLiteral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLLiteral.swift; path = GRDB/Core/SQLLiteral.swift; sourceTree = ""; }; - 2347D1DE9EE5CCD0DE9F7A916A8102F8 /* DatabaseQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseQueue.swift; path = GRDB/Core/DatabaseQueue.swift; sourceTree = ""; }; - 289812DA2B6E379C3AD31C339A93F33C /* Pods-MuslimData_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Tests-Info.plist"; sourceTree = ""; }; - 29EF83B1D17B2AA944D71FF61892E3D7 /* MuslimData-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MuslimData-umbrella.h"; sourceTree = ""; }; - 2E4B908C46D8AC8246EC4E00DC32EE6E /* HasOneAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasOneAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasOneAssociation.swift; sourceTree = ""; }; - 2F5ADFF5989279CA7A2083ACE8E04686 /* DatabaseReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseReader.swift; path = GRDB/Core/DatabaseReader.swift; sourceTree = ""; }; - 340D6C9CF4EA28E78B5B7EC4BAE876F8 /* DatabaseValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseValue.swift; path = GRDB/Core/DatabaseValue.swift; sourceTree = ""; }; - 34A9CD20B785EC16445BB4CCD8A65A97 /* Location.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Location.swift; sourceTree = ""; }; - 3586E5B7A2694DEC693A9A2D081D420A /* SQLFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLFunctions.swift; path = GRDB/QueryInterface/SQL/SQLFunctions.swift; sourceTree = ""; }; - 35B3000913B306C6B9EA60E706939697 /* SchedulingWatchdog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SchedulingWatchdog.swift; path = GRDB/Core/SchedulingWatchdog.swift; sourceTree = ""; }; - 35E063D67D1999B9CF83B528F48C749A /* SQLCollatedExpression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLCollatedExpression.swift; path = GRDB/QueryInterface/SQL/SQLCollatedExpression.swift; sourceTree = ""; }; - 36043B93868C7DB00D4017D9C4FA38FA /* DatabaseSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseSnapshot.swift; path = GRDB/Core/DatabaseSnapshot.swift; sourceTree = ""; }; - 375F9CF0AC63BC7CF0AF8682C8BF1751 /* SQLiteDateParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLiteDateParser.swift; path = GRDB/Core/Support/Foundation/SQLiteDateParser.swift; sourceTree = ""; }; - 39DD281AEC3E59FB3A0277BC475473C6 /* HasOneThroughAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasOneThroughAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasOneThroughAssociation.swift; sourceTree = ""; }; - 3A37AB04CE371562BF8E71E72FF7DCC2 /* SQLExpression+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLExpression+QueryInterface.swift"; path = "GRDB/QueryInterface/SQL/SQLExpression+QueryInterface.swift"; sourceTree = ""; }; - 3B232EFA04D2A907B4327166A5314284 /* MuslimData.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MuslimData.modulemap; sourceTree = ""; }; - 3B543DF39D139A8C78771B681C6ADAA2 /* Pods-MuslimData_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MuslimData_Example-umbrella.h"; sourceTree = ""; }; - 3D0BFFCE7DA2A58457C26354A62B0987 /* DatabaseValueConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseValueConvertible.swift; path = GRDB/Core/DatabaseValueConvertible.swift; sourceTree = ""; }; - 3EE756FB280A4709B342CCB851AF8B87 /* TableRecord+Association.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TableRecord+Association.swift"; path = "GRDB/QueryInterface/TableRecord+Association.swift"; sourceTree = ""; }; - 43CD310101BC030B0E0D7FE2056E0246 /* Pods-MuslimData_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Tests-acknowledgements.plist"; sourceTree = ""; }; - 4468899EAFE6991759EA8A46BB51BA91 /* FetchableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchableRecord.swift; path = GRDB/Record/FetchableRecord.swift; sourceTree = ""; }; - 44B93E97B50A2C3968F611666B05EE12 /* FetchRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchRequest.swift; path = GRDB/Core/FetchRequest.swift; sourceTree = ""; }; - 44E2482E80E8ABCEB62ADF9795702D10 /* SQLGenerationContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLGenerationContext.swift; path = GRDB/QueryInterface/SQLGeneration/SQLGenerationContext.swift; sourceTree = ""; }; - 464EAD3E4BAD6DE5D12979750026ACB4 /* URL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URL.swift; path = GRDB/Core/Support/Foundation/URL.swift; sourceTree = ""; }; - 47C8BB861F995656CBCF235EE4BBF2D5 /* GRDB.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GRDB.swift.modulemap; sourceTree = ""; }; - 4A328852E5AC5CD0A7F532F806C27C46 /* Inflections.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Inflections.swift; path = GRDB/Utils/Inflections.swift; sourceTree = ""; }; - 4D2F8E884941CCCB42A30760A3AEBB42 /* SQLOrdering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLOrdering.swift; path = GRDB/QueryInterface/SQL/SQLOrdering.swift; sourceTree = ""; }; - 4DD1E81E01020BE507304429A36F9976 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = GRDB/Core/Configuration.swift; sourceTree = ""; }; - 4EED1A4504790AF7E6F5240F27DBEF61 /* DatabaseValueConvertible+Decodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+Decodable.swift"; path = "GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Decodable.swift"; sourceTree = ""; }; - 4F8B2F0AC21F8A9AA0C4DAF6A289539C /* QueryInterfaceRequest+Association.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "QueryInterfaceRequest+Association.swift"; path = "GRDB/QueryInterface/Request/QueryInterfaceRequest+Association.swift"; sourceTree = ""; }; - 51D52725D39866E31745A1C4CBDBEF64 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; - 524CC7BFB573E8D444A899F3AA99FFC6 /* GRDB-Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GRDB-Bridging.h"; path = "Support/GRDB-Bridging.h"; sourceTree = ""; }; - 52D7F3BF5B125E5D8B02C6498D4ED182 /* TimeFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TimeFormat.swift; sourceTree = ""; }; - 5376CE97B980678A6B2CE4CDC1F3E1E7 /* FTS5WrapperTokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5WrapperTokenizer.swift; path = GRDB/FTS/FTS5WrapperTokenizer.swift; sourceTree = ""; }; - 5422A9FBD155A4783EAB1DBC2D4413EB /* Pool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Pool.swift; path = GRDB/Utils/Pool.swift; sourceTree = ""; }; - 56DEB559B5A5DCE1B324FB12C5E0A1FC /* FTS3Pattern.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS3Pattern.swift; path = GRDB/FTS/FTS3Pattern.swift; sourceTree = ""; }; - 56FEEB1D0A0093852C8360424DE7C77C /* DatabaseRegion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseRegion.swift; path = GRDB/Core/DatabaseRegion.swift; sourceTree = ""; }; - 5951C4A078EF26CE50BDF528E6187642 /* TableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableRecord.swift; path = GRDB/Record/TableRecord.swift; sourceTree = ""; }; - 59F05D12626E41B596F1F220097E173A /* TableRecord+QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TableRecord+QueryInterfaceRequest.swift"; path = "GRDB/QueryInterface/TableRecord+QueryInterfaceRequest.swift"; sourceTree = ""; }; - 5B43031A46D1FB9BDF3622252D66C3CF /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = GRDB/Utils/Utils.swift; sourceTree = ""; }; - 5D3E0CD6709358AFF08D1535414B5CC6 /* Prayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Prayer.swift; sourceTree = ""; }; - 5E97570A73E421384DAD384510A90FFF /* DatabaseWriter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseWriter.swift; path = GRDB/Core/DatabaseWriter.swift; sourceTree = ""; }; - 612B94F9D0155E187C8B3EC4978453CC /* FTS5+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FTS5+QueryInterface.swift"; path = "GRDB/QueryInterface/FTS5+QueryInterface.swift"; sourceTree = ""; }; - 6135EABC840E345AC834E8572D35D1B2 /* FetchableRecord+TableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FetchableRecord+TableRecord.swift"; path = "GRDB/Record/FetchableRecord+TableRecord.swift"; sourceTree = ""; }; - 61BA38261B622111B36F880E9829A137 /* DatabaseRegionObservation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseRegionObservation.swift; path = GRDB/Core/DatabaseRegionObservation.swift; sourceTree = ""; }; - 626FAFDB2FBA47E8F7DA5BEEC5204BF8 /* Pods-MuslimData_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Tests.debug.xcconfig"; sourceTree = ""; }; - 64162F22C59C71C0145CBCB56A60959E /* SQLExpression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLExpression.swift; path = GRDB/QueryInterface/SQL/SQLExpression.swift; sourceTree = ""; }; - 65AA78E233337BE07809C0BCE36F7925 /* SQLOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLOperators.swift; path = GRDB/QueryInterface/SQL/SQLOperators.swift; sourceTree = ""; }; - 65B9B5758E649467E7C7257B2A99B398 /* Pods-MuslimData_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Example.debug.xcconfig"; sourceTree = ""; }; - 6617214BBCD73E8681833F4DEB505C18 /* SQLQuery.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLQuery.swift; path = GRDB/QueryInterface/SQL/SQLQuery.swift; sourceTree = ""; }; - 664686B6ABA608503F83F85979F0687B /* NSNumber.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSNumber.swift; path = GRDB/Core/Support/Foundation/NSNumber.swift; sourceTree = ""; }; - 6C1437F36D038A5734484868100FF202 /* Pods-MuslimData_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MuslimData_Example-acknowledgements.markdown"; sourceTree = ""; }; - 6C148EB18C09F4877D62A86109CADBEC /* ValueObservation+DistinctUntilChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+DistinctUntilChanged.swift"; path = "GRDB/ValueObservation/ValueObservation+DistinctUntilChanged.swift"; sourceTree = ""; }; - 6CA133D8C22FCD0B36947C006B980ED0 /* GRDB.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GRDB.swift-dummy.m"; sourceTree = ""; }; - 6E1D40C1A883759045B7FB69D2D1B0DB /* DatabaseFunction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseFunction.swift; path = GRDB/Core/DatabaseFunction.swift; sourceTree = ""; }; - 6E6EF5186786DEB317F4E8700B553D53 /* String+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = ""; }; - 6F24513440BECF3F4711B37E2873F911 /* Database+Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Database+Schema.swift"; path = "GRDB/Core/Database+Schema.swift"; sourceTree = ""; }; - 6F7506C8792FBFB2B07AD8B85B5C3ADD /* MuslimData-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MuslimData-dummy.m"; sourceTree = ""; }; - 730CC813817A01C3345FB6628C3F374F /* MuslimData-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MuslimData-prefix.pch"; sourceTree = ""; }; - 736E75FFBCE1C9C3C052ED6848ECAA3A /* EncodableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EncodableRecord.swift; path = GRDB/Record/EncodableRecord.swift; sourceTree = ""; }; - 740370A5EC50C2D78ED000F028CEAD26 /* Cursor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cursor.swift; path = GRDB/Core/Cursor.swift; sourceTree = ""; }; - 76A6406A1762BAFF98F6CD7FF7EE7FF0 /* StatementAuthorizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StatementAuthorizer.swift; path = GRDB/Core/StatementAuthorizer.swift; sourceTree = ""; }; - 798DB5BE9EB09CBDF299C90C481A9110 /* DatabasePool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabasePool.swift; path = GRDB/Core/DatabasePool.swift; sourceTree = ""; }; - 7AB5AEBDF6E57653433892BB405F0FC2 /* GRDB.swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GRDB.swift.debug.xcconfig; sourceTree = ""; }; - 7CC1C60D10CB6A29C0181276AB532200 /* FTS3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS3.swift; path = GRDB/FTS/FTS3.swift; sourceTree = ""; }; - 7D6A8BE5B76B247298A79BFF89DF6D29 /* AzkarChapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AzkarChapter.swift; sourceTree = ""; }; - 80BC3878E43FC7BC9CC5A386968117CE /* grdb_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = grdb_config.h; path = Support/grdb_config.h; sourceTree = ""; }; - 80CDA964EF94F8B5E9C39C8F8655A1B7 /* CHANGELOG.md */ = {isa = PBXFileReference; includeInIndex = 1; path = CHANGELOG.md; sourceTree = ""; }; - 844CE98E42007DDFB8D4BFF8DAA2EF15 /* DatabaseValueConversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseValueConversion.swift; path = GRDB/Core/DatabaseValueConversion.swift; sourceTree = ""; }; - 84505976E3D76B2D94620C69841FCC56 /* ValueReducer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueReducer.swift; path = GRDB/ValueObservation/ValueReducer.swift; sourceTree = ""; }; - 84ADB6717063112A6383A1C160F86C26 /* GRDB-4.0.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "GRDB-4.0.swift"; path = "GRDB/Fixit/GRDB-4.0.swift"; sourceTree = ""; }; - 8558236B5D95448121116192CDF82D7C /* ValueObservation+Count.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Count.swift"; path = "GRDB/ValueObservation/ValueObservation+Count.swift"; sourceTree = ""; }; - 8D68092E711BB73E99F34A4E0757BC37 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - 8E2B6DDCB8FBDC144EFF6CF15E9FAC07 /* PersistableRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PersistableRecord.swift; path = GRDB/Record/PersistableRecord.swift; sourceTree = ""; }; - 8E4E05505643C3270EBD487F65E68FAC /* DatabaseValueConvertible+RawRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+RawRepresentable.swift"; path = "GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+RawRepresentable.swift"; sourceTree = ""; }; - 904F4120DAA573A68ACF64F1E116B95D /* MuslimData-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MuslimData-Info.plist"; sourceTree = ""; }; - 96B1FED296230650927F5C8E53F05DAC /* SQLRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLRelation.swift; path = GRDB/QueryInterface/SQL/SQLRelation.swift; sourceTree = ""; }; - 9810ED848A8370D28A206952D1E634FA /* DatabaseError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseError.swift; path = GRDB/Core/DatabaseError.swift; sourceTree = ""; }; - 983C554E80E2287925036A568A9537FB /* UUID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UUID.swift; path = GRDB/Core/Support/Foundation/UUID.swift; sourceTree = ""; }; - 992079014BF8ABA32EA866CBF1AEFBDD /* CGFloat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CGFloat.swift; path = GRDB/Core/Support/CoreGraphics/CGFloat.swift; sourceTree = ""; }; - 9CE552E45ACF80214D40921DD03CAA67 /* Column.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Column.swift; path = GRDB/QueryInterface/SQL/Column.swift; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E58180EF7E8F6358C3395350061BE44 /* muslim_db_v2.0.0.db */ = {isa = PBXFileReference; includeInIndex = 1; path = muslim_db_v2.0.0.db; sourceTree = ""; }; - 9EA31FB39C8D6B4D3E53D80D093D2F6F /* Date.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Date.swift; path = GRDB/Core/Support/Foundation/Date.swift; sourceTree = ""; }; - 9F67789688FB3673E6008AEA51847BB9 /* Database+Statements.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Database+Statements.swift"; path = "GRDB/Core/Database+Statements.swift"; sourceTree = ""; }; - A020DF84492FD75A8638CB22DFE52845 /* Name.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Name.swift; sourceTree = ""; }; - A1003C353C0CF946F8940551748269D2 /* GRDB.swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GRDB.swift.release.xcconfig; sourceTree = ""; }; - A151C2196CAB62A5C9D0509FFF5D3BFC /* ValueObservation+Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Map.swift"; path = "GRDB/ValueObservation/ValueObservation+Map.swift"; sourceTree = ""; }; - A2FCC2BA27CDFBC62682AE669A77AE1D /* FetchedRecordsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchedRecordsController.swift; path = GRDB/Record/FetchedRecordsController.swift; sourceTree = ""; }; - A31E7F6537B28EF0C3FD098B5230A169 /* DBHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DBHelper.swift; sourceTree = ""; }; - A35410C80E22F178FE1666DEE71A3252 /* FTS3TokenizerDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS3TokenizerDescriptor.swift; path = GRDB/FTS/FTS3TokenizerDescriptor.swift; sourceTree = ""; }; - A381999A5B8A8604E95882B60664287A /* GRDB.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GRDB.swift-prefix.pch"; sourceTree = ""; }; - A3FD392A87C27DC4A006672018F8EAAF /* SQLQueryGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLQueryGenerator.swift; path = GRDB/QueryInterface/SQLGeneration/SQLQueryGenerator.swift; sourceTree = ""; }; - A594A615D1610A6A82241572E57C4A87 /* Database.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Database.swift; path = GRDB/Core/Database.swift; sourceTree = ""; }; - A6250B466AAE090B46198B61F8C838EF /* ValueObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueObserver.swift; path = GRDB/ValueObservation/ValueObserver.swift; sourceTree = ""; }; - A69B31388100FB6249EAEE00F4B20660 /* Pods-MuslimData_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Example-acknowledgements.plist"; sourceTree = ""; }; - A7E99DCA167FB7C8523CBE7E30C75E87 /* StandardLibrary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StandardLibrary.swift; path = GRDB/Core/Support/StandardLibrary/StandardLibrary.swift; sourceTree = ""; }; - A83C9A0047B7665B321CE637EBB71CB5 /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = GRDB/Core/Support/Foundation/Data.swift; sourceTree = ""; }; - A8FD966EA188EC1FB1DA0C5734E4B36A /* RowAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowAdapter.swift; path = GRDB/Core/RowAdapter.swift; sourceTree = ""; }; - A9260AA5117FA49534554748ACD1E7BC /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = GRDB/FTS/FTS4.swift; sourceTree = ""; }; - A9CAACFD9D4F26952E59D5D9C90D2528 /* ValueObservation+CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+CompactMap.swift"; path = "GRDB/ValueObservation/ValueObservation+CompactMap.swift"; sourceTree = ""; }; - ACBA7BBDC459B70F0ACB3413B3906649 /* MuslimData.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MuslimData.release.xcconfig; sourceTree = ""; }; - B1080CF86161774FC324D019BB74E7FA /* AzkarCategory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AzkarCategory.swift; sourceTree = ""; }; - B1081094773556A6A464D2CD55EAD506 /* TableDefinition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableDefinition.swift; path = GRDB/QueryInterface/Schema/TableDefinition.swift; sourceTree = ""; }; - B15106707D4C78899C33C2C9A781E277 /* SQLSpecificExpressible+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLSpecificExpressible+QueryInterface.swift"; path = "GRDB/QueryInterface/SQL/SQLSpecificExpressible+QueryInterface.swift"; sourceTree = ""; }; - B5376286590A5DC3461F11C7A14157ED /* Pods-MuslimData_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MuslimData_Example.modulemap"; sourceTree = ""; }; - B635DCB1E6D60260828C27E3C1366FD2 /* SQLSelectable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLSelectable.swift; path = GRDB/QueryInterface/SQL/SQLSelectable.swift; sourceTree = ""; }; - BB80C27F1B9A36378FC4A5D7FCBE1E2B /* Pods-MuslimData_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MuslimData_Example-frameworks.sh"; sourceTree = ""; }; - BBE913A6C322FB7BA4C11487C3ECB221 /* EncodableRecord+Encodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EncodableRecord+Encodable.swift"; path = "GRDB/Record/EncodableRecord+Encodable.swift"; sourceTree = ""; }; - BEBAE4960F59932E1A399C109A453E0C /* DatabaseValueConvertible+ReferenceConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+ReferenceConvertible.swift"; path = "GRDB/Core/Support/Foundation/DatabaseValueConvertible+ReferenceConvertible.swift"; sourceTree = ""; }; - BF327E118920934B9AD7EA46DCA48965 /* ValueObservation+DatabaseValueConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+DatabaseValueConvertible.swift"; path = "GRDB/ValueObservation/ValueObservation+DatabaseValueConvertible.swift"; sourceTree = ""; }; - BF6342B1D69B37FF9472ADC4C29DD0FF /* Pods-MuslimData_Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-MuslimData_Example"; path = Pods_MuslimData_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BF82642D2452B676DE57B1758497FD6E /* BelongsToAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BelongsToAssociation.swift; path = GRDB/QueryInterface/Request/Association/BelongsToAssociation.swift; sourceTree = ""; }; - BFCBA8F76DA14E950E08C706D2A92E64 /* DatabasePromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabasePromise.swift; path = GRDB/QueryInterface/SQL/DatabasePromise.swift; sourceTree = ""; }; - BFF1D9F025C44D7FAEEE0206D731A765 /* Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Row.swift; path = GRDB/Core/Row.swift; sourceTree = ""; }; - C286D53E1D7D0D96BD4C534CFEB86E5E /* FTS5Tokenizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5Tokenizer.swift; path = GRDB/FTS/FTS5Tokenizer.swift; sourceTree = ""; }; - C351E742746F64DC32068BFDBF920798 /* TransactionObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransactionObserver.swift; path = GRDB/Core/TransactionObserver.swift; sourceTree = ""; }; - C4181F7638B42161C4FE446BDEA1ADC5 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = GRDB/FTS/FTS5.swift; sourceTree = ""; }; - C6AD0B87216E32B86C7F4855A5F6BDE1 /* AzkarItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AzkarItem.swift; sourceTree = ""; }; - C8F096D89EED3D262636E1838D0D2180 /* SQLForeignKeyRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLForeignKeyRequest.swift; path = GRDB/QueryInterface/SQL/SQLForeignKeyRequest.swift; sourceTree = ""; }; - CB1821A1110F31EEDD916328777B65CA /* DatabaseCollation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseCollation.swift; path = GRDB/Core/DatabaseCollation.swift; sourceTree = ""; }; - CB75F83D1AE48C88A0A85D56CF0F13B0 /* VirtualTableModule.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTableModule.swift; path = GRDB/QueryInterface/Schema/VirtualTableModule.swift; sourceTree = ""; }; - CBCD71E190AB01AEDA957A91752CA0B0 /* DatabaseDateComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseDateComponents.swift; path = GRDB/Core/Support/Foundation/DatabaseDateComponents.swift; sourceTree = ""; }; - CCE86FA4B74834175DEDACF492416DDA /* FetchableRecord+Decodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FetchableRecord+Decodable.swift"; path = "GRDB/Record/FetchableRecord+Decodable.swift"; sourceTree = ""; }; - CE7B03B77F2F0A31ED478363C72D8A24 /* DatabaseMigrator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseMigrator.swift; path = GRDB/Migration/DatabaseMigrator.swift; sourceTree = ""; }; - D142D2DDF4BFBB74839269DB42B8692C /* SQLExpressible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLExpressible.swift; path = GRDB/QueryInterface/SQL/SQLExpressible.swift; sourceTree = ""; }; - D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - D30BAFCE984848BDEBF194A2899567EA /* SQLCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLCollection.swift; path = GRDB/QueryInterface/SQL/SQLCollection.swift; sourceTree = ""; }; - D846F478C4C834DC00E277228B129083 /* Pods-MuslimData_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Example.release.xcconfig"; sourceTree = ""; }; - D860051DE87F8574AFEFF56F7C619598 /* Language.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Language.swift; sourceTree = ""; }; - DA68F2CB5BE572106E41C45020F9797C /* PrayerTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrayerTime.swift; sourceTree = ""; }; - DE2B11CBBBF488B9CB4F133978648866 /* Pods-MuslimData_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MuslimData_Tests-dummy.m"; sourceTree = ""; }; - DE42771047CDEDC16B7A058FFFC770C7 /* SQLAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLAssociation.swift; path = GRDB/QueryInterface/SQL/SQLAssociation.swift; sourceTree = ""; }; - DE67BF28E65F99081D8B19B49D8BBA0A /* Association.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Association.swift; path = GRDB/QueryInterface/Request/Association/Association.swift; sourceTree = ""; }; - DE8C30B4C6ACCB9F1B626D0CF6DC4D2C /* HasManyThroughAssociation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HasManyThroughAssociation.swift; path = GRDB/QueryInterface/Request/Association/HasManyThroughAssociation.swift; sourceTree = ""; }; - DEAA9A26723DC474A1C6BA07AB1175DF /* Pods-MuslimData_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MuslimData_Tests-acknowledgements.markdown"; sourceTree = ""; }; - DEE88C13D61A786DFAB09EAD3D25A351 /* QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QueryInterfaceRequest.swift; path = GRDB/QueryInterface/Request/QueryInterfaceRequest.swift; sourceTree = ""; }; - DEF87AE545A42D3F0C700E79EC027126 /* Pods-MuslimData_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MuslimData_Tests.release.xcconfig"; sourceTree = ""; }; - E496549682A5A201323B61D591167A4A /* FTS5Pattern.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5Pattern.swift; path = GRDB/FTS/FTS5Pattern.swift; sourceTree = ""; }; - E60A9D3FA5C081F82DB4B0B9178F7405 /* DatabaseValueConvertible+Encodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DatabaseValueConvertible+Encodable.swift"; path = "GRDB/Core/Support/StandardLibrary/DatabaseValueConvertible+Encodable.swift"; sourceTree = ""; }; - E68F0140AC5E63E44C720D4D0D22D415 /* Record.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Record.swift; path = GRDB/Record/Record.swift; sourceTree = ""; }; - E787A815C699A533C7E83D8022D22549 /* Pods-MuslimData_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MuslimData_Example-dummy.m"; sourceTree = ""; }; - E79461AEF0D85C606ACD69EF9B8C8939 /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = GRDB/Migration/Migration.swift; sourceTree = ""; }; - E7A10B0C7660263FD83A5CD29F2E1165 /* OrderedDictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OrderedDictionary.swift; path = GRDB/Utils/OrderedDictionary.swift; sourceTree = ""; }; - EA1F96A960AFA0054EB6D2173ADB6993 /* FetchableRecord+QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FetchableRecord+QueryInterfaceRequest.swift"; path = "GRDB/QueryInterface/FetchableRecord+QueryInterfaceRequest.swift"; sourceTree = ""; }; - EA5D05CF1C40BFDA3E4AF4AA9FA1AB0B /* SQLSelectable+QueryInterface.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SQLSelectable+QueryInterface.swift"; path = "GRDB/QueryInterface/SQL/SQLSelectable+QueryInterface.swift"; sourceTree = ""; }; - EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - EB87E2DAAEF3AD58CEFA29770C3FB552 /* Pods-MuslimData_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MuslimData_Example-Info.plist"; sourceTree = ""; }; - EC1E7ED6955D27B6C52BCB568C182949 /* AssociationAggregate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssociationAggregate.swift; path = GRDB/QueryInterface/Request/Association/AssociationAggregate.swift; sourceTree = ""; }; - EE91E12DE279B781B318C35432A3D8DB /* ValueObservation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueObservation.swift; path = GRDB/ValueObservation/ValueObservation.swift; sourceTree = ""; }; - EEA27CDC4C954599103EAB46FC89D71E /* SQLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SQLRequest.swift; path = GRDB/Core/SQLRequest.swift; sourceTree = ""; }; - EEFDF28A6D90C1E561747E5F01EF8D40 /* ValueObservation+Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ValueObservation+Combine.swift"; path = "GRDB/ValueObservation/ValueObservation+Combine.swift"; sourceTree = ""; }; - F07F62F624F83DF0B8480FCEEFBADA32 /* NSData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSData.swift; path = GRDB/Core/Support/Foundation/NSData.swift; sourceTree = ""; }; - F19E5112B837424748266228D81EFD17 /* Pods-MuslimData_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MuslimData_Tests.modulemap"; sourceTree = ""; }; - F48E1D2E2EE31EA5F8CDF16FBF28591E /* Row+QueryInterfaceRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Row+QueryInterfaceRequest.swift"; path = "GRDB/QueryInterface/Row+QueryInterfaceRequest.swift"; sourceTree = ""; }; - F6119B7DCF1679F35ADE30E741827C78 /* ReadWriteBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReadWriteBox.swift; path = GRDB/Utils/ReadWriteBox.swift; sourceTree = ""; }; - F65D060B3ED7C64571E263EC2AA76419 /* RequestProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestProtocols.swift; path = GRDB/QueryInterface/Request/RequestProtocols.swift; sourceTree = ""; }; - F66B8189DE409C6CE416BAA423ECCE75 /* DatabaseSchemaCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatabaseSchemaCache.swift; path = GRDB/Core/DatabaseSchemaCache.swift; sourceTree = ""; }; - FCCA917D100B6F5A3512DB297210C53C /* NSString.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSString.swift; path = GRDB/Core/Support/Foundation/NSString.swift; sourceTree = ""; }; - FD51BACBD28D9EE11984C183825D66AD /* MuslimRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MuslimRepository.swift; sourceTree = ""; }; - FDD77D03BF3203412EACD1B9A8B887D5 /* Inflections+English.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Inflections+English.swift"; path = "GRDB/Utils/Inflections+English.swift"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 47E0B5CD3F296923572A2DE2C2ADAF49 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5428F5F7AC1DB2150C91C619A4C02431 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B0137F0506062E4BBCCEA872D3E655D9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B2B755533EA09F2E93A1D94B0E2F500C /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CA0D1BFD9B61D0B814C3C1AB9999E9A9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1E673226452BFCE06C46A9AD51722A4B /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F31485D8AB729859516E701A1AE872F6 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - E7EA2E83C2DD69633C8648EFACAD76A9 /* Foundation.framework in Frameworks */, - 7ABBE42689BAF80D28D743C5F01A0C63 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 20F90913FCFC574FA2140ED7DB8B31FA /* Products */ = { - isa = PBXGroup; - children = ( - 17ABD68E920293F080122810A8881638 /* GRDB.swift */, - 1BF6C61A2E5710D67D507E6B33189233 /* MuslimData */, - BF6342B1D69B37FF9472ADC4C29DD0FF /* Pods-MuslimData_Example */, - 07EFAC04C8D1109BF2827F89C521B330 /* Pods-MuslimData_Tests */, - ); - name = Products; - sourceTree = ""; - }; - 303B6609BD098C07EDE9A0B6608CB913 /* Support Files */ = { - isa = PBXGroup; - children = ( - 47C8BB861F995656CBCF235EE4BBF2D5 /* GRDB.swift.modulemap */, - 6CA133D8C22FCD0B36947C006B980ED0 /* GRDB.swift-dummy.m */, - 179568A184A07A92A074EBA8DD2BCA99 /* GRDB.swift-Info.plist */, - A381999A5B8A8604E95882B60664287A /* GRDB.swift-prefix.pch */, - 7AB5AEBDF6E57653433892BB405F0FC2 /* GRDB.swift.debug.xcconfig */, - A1003C353C0CF946F8940551748269D2 /* GRDB.swift.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GRDB.swift"; - sourceTree = ""; - }; - 4B40FE885F2E1BA5D0B23932769EF3EF /* Development Pods */ = { - isa = PBXGroup; - children = ( - F43033D58924C5EF35BC8FC840E14963 /* MuslimData */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - 4F77BF0B387D3166EE261DBF7601AD91 /* Extensions */ = { - isa = PBXGroup; - children = ( - 01FB68FAD43CF8429267EF33197BF6A4 /* DateExtensions.swift */, - 6E6EF5186786DEB317F4E8700B553D53 /* String+Extensions.swift */, - ); - name = Extensions; - path = Sources/MuslimData/Extensions; - sourceTree = ""; - }; - 56E59EAC7BD785ACAD5B73A9F16A4562 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - E451C634DC4F2E7A7F35A670F39CEAC7 /* Pods-MuslimData_Example */, - FADA63C3804BABFA54DAC9F40016592C /* Pods-MuslimData_Tests */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */ = { - isa = PBXGroup; - children = ( - EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */, - D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 710E847FA2562322113B664B655B2716 /* Pod */ = { - isa = PBXGroup; - children = ( - 51D52725D39866E31745A1C4CBDBEF64 /* LICENSE */, - 1694430E77D581F66D2781FD97253971 /* MuslimData.podspec */, - 8D68092E711BB73E99F34A4E0757BC37 /* README.md */, - ); - name = Pod; - sourceTree = ""; - }; - 7D21635765A4F7BB81E71D1205E35216 /* Support Files */ = { - isa = PBXGroup; - children = ( - 3B232EFA04D2A907B4327166A5314284 /* MuslimData.modulemap */, - 6F7506C8792FBFB2B07AD8B85B5C3ADD /* MuslimData-dummy.m */, - 904F4120DAA573A68ACF64F1E116B95D /* MuslimData-Info.plist */, - 730CC813817A01C3345FB6628C3F374F /* MuslimData-prefix.pch */, - 29EF83B1D17B2AA944D71FF61892E3D7 /* MuslimData-umbrella.h */, - 0F524B59DAF2332C1379730B07D76C1B /* MuslimData.debug.xcconfig */, - ACBA7BBDC459B70F0ACB3413B3906649 /* MuslimData.release.xcconfig */, - ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/MuslimData"; - sourceTree = ""; - }; - 8CB66BA5D960E81A62CF8F97F6FF8576 /* PrayerTimes */ = { - isa = PBXGroup; - children = ( - 5D3E0CD6709358AFF08D1535414B5CC6 /* Prayer.swift */, - 1D9D64AFF2D5180626BD6EE6238EE30D /* PrayerAttribute.swift */, - DA68F2CB5BE572106E41C45020F9797C /* PrayerTime.swift */, - 52D7F3BF5B125E5D8B02C6498D4ED182 /* TimeFormat.swift */, - ); - name = PrayerTimes; - path = PrayerTimes; - sourceTree = ""; - }; - 932B4DC53D5F7057293A5B7BAA72B1C4 /* Repository */ = { - isa = PBXGroup; - children = ( - FD51BACBD28D9EE11984C183825D66AD /* MuslimRepository.swift */, - 1155FBAC7ADB560A7D21F0F646E77F1F /* Repository.swift */, - ); - name = Repository; - path = Sources/MuslimData/Repository; - sourceTree = ""; - }; - 951B761DF3A47FB2C95D04DDE3765644 /* Location */ = { - isa = PBXGroup; - children = ( - 34A9CD20B785EC16445BB4CCD8A65A97 /* Location.swift */, - ); - name = Location; - path = Location; - sourceTree = ""; - }; - 9F20133F8D19C485B833163B11650616 /* Azkars */ = { - isa = PBXGroup; - children = ( - B1080CF86161774FC324D019BB74E7FA /* AzkarCategory.swift */, - 7D6A8BE5B76B247298A79BFF89DF6D29 /* AzkarChapter.swift */, - C6AD0B87216E32B86C7F4855A5F6BDE1 /* AzkarItem.swift */, - ); - name = Azkars; - path = Azkars; - sourceTree = ""; - }; - A57E08E510E2F4BC22C08B498B22445A /* standard */ = { - isa = PBXGroup; - children = ( - DE67BF28E65F99081D8B19B49D8BBA0A /* Association.swift */, - EC1E7ED6955D27B6C52BCB568C182949 /* AssociationAggregate.swift */, - BF82642D2452B676DE57B1758497FD6E /* BelongsToAssociation.swift */, - 992079014BF8ABA32EA866CBF1AEFBDD /* CGFloat.swift */, - 9CE552E45ACF80214D40921DD03CAA67 /* Column.swift */, - 4DD1E81E01020BE507304429A36F9976 /* Configuration.swift */, - 740370A5EC50C2D78ED000F028CEAD26 /* Cursor.swift */, - A83C9A0047B7665B321CE637EBB71CB5 /* Data.swift */, - A594A615D1610A6A82241572E57C4A87 /* Database.swift */, - 6F24513440BECF3F4711B37E2873F911 /* Database+Schema.swift */, - 9F67789688FB3673E6008AEA51847BB9 /* Database+Statements.swift */, - CB1821A1110F31EEDD916328777B65CA /* DatabaseCollation.swift */, - CBCD71E190AB01AEDA957A91752CA0B0 /* DatabaseDateComponents.swift */, - 9810ED848A8370D28A206952D1E634FA /* DatabaseError.swift */, - 6E1D40C1A883759045B7FB69D2D1B0DB /* DatabaseFunction.swift */, - CE7B03B77F2F0A31ED478363C72D8A24 /* DatabaseMigrator.swift */, - 798DB5BE9EB09CBDF299C90C481A9110 /* DatabasePool.swift */, - BFCBA8F76DA14E950E08C706D2A92E64 /* DatabasePromise.swift */, - 2347D1DE9EE5CCD0DE9F7A916A8102F8 /* DatabaseQueue.swift */, - 2F5ADFF5989279CA7A2083ACE8E04686 /* DatabaseReader.swift */, - 56FEEB1D0A0093852C8360424DE7C77C /* DatabaseRegion.swift */, - 61BA38261B622111B36F880E9829A137 /* DatabaseRegionObservation.swift */, - F66B8189DE409C6CE416BAA423ECCE75 /* DatabaseSchemaCache.swift */, - 36043B93868C7DB00D4017D9C4FA38FA /* DatabaseSnapshot.swift */, - 340D6C9CF4EA28E78B5B7EC4BAE876F8 /* DatabaseValue.swift */, - 844CE98E42007DDFB8D4BFF8DAA2EF15 /* DatabaseValueConversion.swift */, - 3D0BFFCE7DA2A58457C26354A62B0987 /* DatabaseValueConvertible.swift */, - 4EED1A4504790AF7E6F5240F27DBEF61 /* DatabaseValueConvertible+Decodable.swift */, - E60A9D3FA5C081F82DB4B0B9178F7405 /* DatabaseValueConvertible+Encodable.swift */, - 8E4E05505643C3270EBD487F65E68FAC /* DatabaseValueConvertible+RawRepresentable.swift */, - BEBAE4960F59932E1A399C109A453E0C /* DatabaseValueConvertible+ReferenceConvertible.swift */, - 5E97570A73E421384DAD384510A90FFF /* DatabaseWriter.swift */, - 9EA31FB39C8D6B4D3E53D80D093D2F6F /* Date.swift */, - 736E75FFBCE1C9C3C052ED6848ECAA3A /* EncodableRecord.swift */, - BBE913A6C322FB7BA4C11487C3ECB221 /* EncodableRecord+Encodable.swift */, - 4468899EAFE6991759EA8A46BB51BA91 /* FetchableRecord.swift */, - CCE86FA4B74834175DEDACF492416DDA /* FetchableRecord+Decodable.swift */, - EA1F96A960AFA0054EB6D2173ADB6993 /* FetchableRecord+QueryInterfaceRequest.swift */, - 6135EABC840E345AC834E8572D35D1B2 /* FetchableRecord+TableRecord.swift */, - A2FCC2BA27CDFBC62682AE669A77AE1D /* FetchedRecordsController.swift */, - 44B93E97B50A2C3968F611666B05EE12 /* FetchRequest.swift */, - 7CC1C60D10CB6A29C0181276AB532200 /* FTS3.swift */, - 00D6C2C95FD0E1A287EA068E42E4A2B2 /* FTS3+QueryInterface.swift */, - 56DEB559B5A5DCE1B324FB12C5E0A1FC /* FTS3Pattern.swift */, - A35410C80E22F178FE1666DEE71A3252 /* FTS3TokenizerDescriptor.swift */, - A9260AA5117FA49534554748ACD1E7BC /* FTS4.swift */, - C4181F7638B42161C4FE446BDEA1ADC5 /* FTS5.swift */, - 612B94F9D0155E187C8B3EC4978453CC /* FTS5+QueryInterface.swift */, - 1428D60F918864DEF88EB111C77C2519 /* FTS5CustomTokenizer.swift */, - E496549682A5A201323B61D591167A4A /* FTS5Pattern.swift */, - C286D53E1D7D0D96BD4C534CFEB86E5E /* FTS5Tokenizer.swift */, - 079E0846208ED8C64AE0141E80D5AF30 /* FTS5TokenizerDescriptor.swift */, - 5376CE97B980678A6B2CE4CDC1F3E1E7 /* FTS5WrapperTokenizer.swift */, - 13088891A66C735364301AC000712CE0 /* GRDB.h */, - 84ADB6717063112A6383A1C160F86C26 /* GRDB-4.0.swift */, - 524CC7BFB573E8D444A899F3AA99FFC6 /* GRDB-Bridging.h */, - 80BC3878E43FC7BC9CC5A386968117CE /* grdb_config.h */, - 08AE18009E789149C931ECC333F2189A /* HasManyAssociation.swift */, - DE8C30B4C6ACCB9F1B626D0CF6DC4D2C /* HasManyThroughAssociation.swift */, - 2E4B908C46D8AC8246EC4E00DC32EE6E /* HasOneAssociation.swift */, - 39DD281AEC3E59FB3A0277BC475473C6 /* HasOneThroughAssociation.swift */, - 4A328852E5AC5CD0A7F532F806C27C46 /* Inflections.swift */, - FDD77D03BF3203412EACD1B9A8B887D5 /* Inflections+English.swift */, - E79461AEF0D85C606ACD69EF9B8C8939 /* Migration.swift */, - F07F62F624F83DF0B8480FCEEFBADA32 /* NSData.swift */, - 11236E27D6499D7928B236123927E583 /* NSNull.swift */, - 664686B6ABA608503F83F85979F0687B /* NSNumber.swift */, - FCCA917D100B6F5A3512DB297210C53C /* NSString.swift */, - E7A10B0C7660263FD83A5CD29F2E1165 /* OrderedDictionary.swift */, - 8E2B6DDCB8FBDC144EFF6CF15E9FAC07 /* PersistableRecord.swift */, - 5422A9FBD155A4783EAB1DBC2D4413EB /* Pool.swift */, - DEE88C13D61A786DFAB09EAD3D25A351 /* QueryInterfaceRequest.swift */, - 4F8B2F0AC21F8A9AA0C4DAF6A289539C /* QueryInterfaceRequest+Association.swift */, - F6119B7DCF1679F35ADE30E741827C78 /* ReadWriteBox.swift */, - E68F0140AC5E63E44C720D4D0D22D415 /* Record.swift */, - F65D060B3ED7C64571E263EC2AA76419 /* RequestProtocols.swift */, - 00E93A5697877EDDADF2B97223FF6260 /* Result.swift */, - BFF1D9F025C44D7FAEEE0206D731A765 /* Row.swift */, - F48E1D2E2EE31EA5F8CDF16FBF28591E /* Row+QueryInterfaceRequest.swift */, - A8FD966EA188EC1FB1DA0C5734E4B36A /* RowAdapter.swift */, - 35B3000913B306C6B9EA60E706939697 /* SchedulingWatchdog.swift */, - 0271944F72BFBCF03BEBC7F9625E332B /* SerializedDatabase.swift */, - DE42771047CDEDC16B7A058FFFC770C7 /* SQLAssociation.swift */, - 35E063D67D1999B9CF83B528F48C749A /* SQLCollatedExpression.swift */, - D30BAFCE984848BDEBF194A2899567EA /* SQLCollection.swift */, - D142D2DDF4BFBB74839269DB42B8692C /* SQLExpressible.swift */, - 64162F22C59C71C0145CBCB56A60959E /* SQLExpression.swift */, - 3A37AB04CE371562BF8E71E72FF7DCC2 /* SQLExpression+QueryInterface.swift */, - C8F096D89EED3D262636E1838D0D2180 /* SQLForeignKeyRequest.swift */, - 3586E5B7A2694DEC693A9A2D081D420A /* SQLFunctions.swift */, - 44E2482E80E8ABCEB62ADF9795702D10 /* SQLGenerationContext.swift */, - 15A7DEB36B2A2D60D21564BC296A4D3B /* SQLInterpolation.swift */, - 0809A71A0BA55AB90A71EC6E1734B81F /* SQLInterpolation+QueryInterface.swift */, - 375F9CF0AC63BC7CF0AF8682C8BF1751 /* SQLiteDateParser.swift */, - 1F72F39252476A5889AC2504BE74ED92 /* SQLLiteral.swift */, - 65AA78E233337BE07809C0BCE36F7925 /* SQLOperators.swift */, - 4D2F8E884941CCCB42A30760A3AEBB42 /* SQLOrdering.swift */, - 6617214BBCD73E8681833F4DEB505C18 /* SQLQuery.swift */, - A3FD392A87C27DC4A006672018F8EAAF /* SQLQueryGenerator.swift */, - 96B1FED296230650927F5C8E53F05DAC /* SQLRelation.swift */, - EEA27CDC4C954599103EAB46FC89D71E /* SQLRequest.swift */, - B635DCB1E6D60260828C27E3C1366FD2 /* SQLSelectable.swift */, - EA5D05CF1C40BFDA3E4AF4AA9FA1AB0B /* SQLSelectable+QueryInterface.swift */, - B15106707D4C78899C33C2C9A781E277 /* SQLSpecificExpressible+QueryInterface.swift */, - A7E99DCA167FB7C8523CBE7E30C75E87 /* StandardLibrary.swift */, - 14A94D67DD3B9C4170250E8C7A307207 /* Statement.swift */, - 76A6406A1762BAFF98F6CD7FF7EE7FF0 /* StatementAuthorizer.swift */, - 1030CDC442B65527D048702297A698A8 /* StatementColumnConvertible.swift */, - B1081094773556A6A464D2CD55EAD506 /* TableDefinition.swift */, - 5951C4A078EF26CE50BDF528E6187642 /* TableRecord.swift */, - 3EE756FB280A4709B342CCB851AF8B87 /* TableRecord+Association.swift */, - 59F05D12626E41B596F1F220097E173A /* TableRecord+QueryInterfaceRequest.swift */, - C351E742746F64DC32068BFDBF920798 /* TransactionObserver.swift */, - 464EAD3E4BAD6DE5D12979750026ACB4 /* URL.swift */, - 5B43031A46D1FB9BDF3622252D66C3CF /* Utils.swift */, - 983C554E80E2287925036A568A9537FB /* UUID.swift */, - EE91E12DE279B781B318C35432A3D8DB /* ValueObservation.swift */, - EEFDF28A6D90C1E561747E5F01EF8D40 /* ValueObservation+Combine.swift */, - A9CAACFD9D4F26952E59D5D9C90D2528 /* ValueObservation+CompactMap.swift */, - 8558236B5D95448121116192CDF82D7C /* ValueObservation+Count.swift */, - BF327E118920934B9AD7EA46DCA48965 /* ValueObservation+DatabaseValueConvertible.swift */, - 6C148EB18C09F4877D62A86109CADBEC /* ValueObservation+DistinctUntilChanged.swift */, - 093944E617B52AF936D889D4EA4FC246 /* ValueObservation+FetchableRecord.swift */, - A151C2196CAB62A5C9D0509FFF5D3BFC /* ValueObservation+Map.swift */, - 00D864FACE1073789EB5028B18AF3981 /* ValueObservation+MapReducer.swift */, - 0D81A451F08F038FA755936DE3D1590A /* ValueObservation+Row.swift */, - A6250B466AAE090B46198B61F8C838EF /* ValueObserver.swift */, - 84505976E3D76B2D94620C69841FCC56 /* ValueReducer.swift */, - CB75F83D1AE48C88A0A85D56CF0F13B0 /* VirtualTableModule.swift */, - ); - name = standard; - sourceTree = ""; - }; - ABCA95CF9BF72190F63EB64F11E378BE /* Names */ = { - isa = PBXGroup; - children = ( - D860051DE87F8574AFEFF56F7C619598 /* Language.swift */, - A020DF84492FD75A8638CB22DFE52845 /* Name.swift */, - ); - name = Names; - path = Names; - sourceTree = ""; - }; - B7C590C380D5FD85D98A6911C4AD19CF /* Pods */ = { - isa = PBXGroup; - children = ( - C9462BE1F590E69CA21CD39B2E5B73E2 /* GRDB.swift */, - ); - name = Pods; - sourceTree = ""; - }; - C8F2A6EDC52AB2BB9A8B3EE835E73CCC /* DB Helper */ = { - isa = PBXGroup; - children = ( - A31E7F6537B28EF0C3FD098B5230A169 /* DBHelper.swift */, - ); - name = "DB Helper"; - path = "Sources/MuslimData/DB Helper"; - sourceTree = ""; - }; - C9462BE1F590E69CA21CD39B2E5B73E2 /* GRDB.swift */ = { - isa = PBXGroup; - children = ( - A57E08E510E2F4BC22C08B498B22445A /* standard */, - 303B6609BD098C07EDE9A0B6608CB913 /* Support Files */, - ); - name = GRDB.swift; - path = GRDB.swift; - sourceTree = ""; - }; - CF1408CF629C7361332E53B88F7BD30C = { - isa = PBXGroup; - children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 4B40FE885F2E1BA5D0B23932769EF3EF /* Development Pods */, - 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, - B7C590C380D5FD85D98A6911C4AD19CF /* Pods */, - 20F90913FCFC574FA2140ED7DB8B31FA /* Products */, - 56E59EAC7BD785ACAD5B73A9F16A4562 /* Targets Support Files */, - ); - sourceTree = ""; - }; - DDB9EAB727B98C9BCBB4F32678BB6B72 /* Resources */ = { - isa = PBXGroup; - children = ( - 80CDA964EF94F8B5E9C39C8F8655A1B7 /* CHANGELOG.md */, - 9E58180EF7E8F6358C3395350061BE44 /* muslim_db_v2.0.0.db */, - ); - name = Resources; - path = Sources/MuslimData/Resources; - sourceTree = ""; - }; - E451C634DC4F2E7A7F35A670F39CEAC7 /* Pods-MuslimData_Example */ = { - isa = PBXGroup; - children = ( - B5376286590A5DC3461F11C7A14157ED /* Pods-MuslimData_Example.modulemap */, - 6C1437F36D038A5734484868100FF202 /* Pods-MuslimData_Example-acknowledgements.markdown */, - A69B31388100FB6249EAEE00F4B20660 /* Pods-MuslimData_Example-acknowledgements.plist */, - E787A815C699A533C7E83D8022D22549 /* Pods-MuslimData_Example-dummy.m */, - BB80C27F1B9A36378FC4A5D7FCBE1E2B /* Pods-MuslimData_Example-frameworks.sh */, - EB87E2DAAEF3AD58CEFA29770C3FB552 /* Pods-MuslimData_Example-Info.plist */, - 3B543DF39D139A8C78771B681C6ADAA2 /* Pods-MuslimData_Example-umbrella.h */, - 65B9B5758E649467E7C7257B2A99B398 /* Pods-MuslimData_Example.debug.xcconfig */, - D846F478C4C834DC00E277228B129083 /* Pods-MuslimData_Example.release.xcconfig */, - ); - name = "Pods-MuslimData_Example"; - path = "Target Support Files/Pods-MuslimData_Example"; - sourceTree = ""; - }; - EF39FA1198FE07E6857835AAF964B8DE /* Models */ = { - isa = PBXGroup; - children = ( - 9F20133F8D19C485B833163B11650616 /* Azkars */, - 951B761DF3A47FB2C95D04DDE3765644 /* Location */, - ABCA95CF9BF72190F63EB64F11E378BE /* Names */, - 8CB66BA5D960E81A62CF8F97F6FF8576 /* PrayerTimes */, - ); - name = Models; - path = Sources/MuslimData/Models; - sourceTree = ""; - }; - F43033D58924C5EF35BC8FC840E14963 /* MuslimData */ = { - isa = PBXGroup; - children = ( - C8F2A6EDC52AB2BB9A8B3EE835E73CCC /* DB Helper */, - 4F77BF0B387D3166EE261DBF7601AD91 /* Extensions */, - EF39FA1198FE07E6857835AAF964B8DE /* Models */, - 710E847FA2562322113B664B655B2716 /* Pod */, - 932B4DC53D5F7057293A5B7BAA72B1C4 /* Repository */, - DDB9EAB727B98C9BCBB4F32678BB6B72 /* Resources */, - 7D21635765A4F7BB81E71D1205E35216 /* Support Files */, - ); - name = MuslimData; - path = ../..; - sourceTree = ""; - }; - FADA63C3804BABFA54DAC9F40016592C /* Pods-MuslimData_Tests */ = { - isa = PBXGroup; - children = ( - F19E5112B837424748266228D81EFD17 /* Pods-MuslimData_Tests.modulemap */, - DEAA9A26723DC474A1C6BA07AB1175DF /* Pods-MuslimData_Tests-acknowledgements.markdown */, - 43CD310101BC030B0E0D7FE2056E0246 /* Pods-MuslimData_Tests-acknowledgements.plist */, - DE2B11CBBBF488B9CB4F133978648866 /* Pods-MuslimData_Tests-dummy.m */, - 289812DA2B6E379C3AD31C339A93F33C /* Pods-MuslimData_Tests-Info.plist */, - 0BD85DBCEEE70ED57287FF3D9DEBDCDB /* Pods-MuslimData_Tests-umbrella.h */, - 626FAFDB2FBA47E8F7DA5BEEC5204BF8 /* Pods-MuslimData_Tests.debug.xcconfig */, - DEF87AE545A42D3F0C700E79EC027126 /* Pods-MuslimData_Tests.release.xcconfig */, - ); - name = "Pods-MuslimData_Tests"; - path = "Target Support Files/Pods-MuslimData_Tests"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 0446D248DCB5D411AA31EC46FB4FC95A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 3CBB30C043CC794613FE17D6DD97672E /* Pods-MuslimData_Tests-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 508FB17862FC53FB42D69FD27DEBB09E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ACFE9DAF630D0B6ED67057C9A6CDA01B /* MuslimData-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 73BF50CE9C2F271A4B2F2CC0D80C93F0 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D91F36DCE86FCA2D5CBCA65C7717910D /* GRDB.h in Headers */, - F6C0E64D046D5A28070C7272E15D8482 /* GRDB-Bridging.h in Headers */, - 3323A5E4F9C70708EB98C2EDDE17C4BF /* grdb_config.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EA540B4C8226FF9873A52704DB65C521 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 5CABF8C1EBECB5937F2AB3EA836680C0 /* Pods-MuslimData_Example-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 0A86C228CFCBC35A1FD284274ED0930F /* GRDB.swift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 379A99B8000D763BFF3B2A3744AE6B96 /* Build configuration list for PBXNativeTarget "GRDB.swift" */; - buildPhases = ( - 73BF50CE9C2F271A4B2F2CC0D80C93F0 /* Headers */, - 4C93671F3EEC628E5DBD75AD7573DD01 /* Sources */, - B0137F0506062E4BBCCEA872D3E655D9 /* Frameworks */, - 8C0255628A32B56A445FE7356BEF4AC8 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = GRDB.swift; - productName = GRDB; - productReference = 17ABD68E920293F080122810A8881638 /* GRDB.swift */; - productType = "com.apple.product-type.framework"; - }; - 35E05502EA95CD6D695F7745FBADAD13 /* MuslimData */ = { - isa = PBXNativeTarget; - buildConfigurationList = C5F36064D02416FA24192939EEFC131D /* Build configuration list for PBXNativeTarget "MuslimData" */; - buildPhases = ( - 508FB17862FC53FB42D69FD27DEBB09E /* Headers */, - A3EACE86C1CF6DC1C20FF0894DEB4C70 /* Sources */, - F31485D8AB729859516E701A1AE872F6 /* Frameworks */, - 16795CB6C1871C16996A24B849F4B455 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 7D64BD038205B726383FCF16E3514F80 /* PBXTargetDependency */, - ); - name = MuslimData; - productName = MuslimData; - productReference = 1BF6C61A2E5710D67D507E6B33189233 /* MuslimData */; - productType = "com.apple.product-type.framework"; - }; - 5C8D8120CE6858E66FCF3281E4AF1DAC /* Pods-MuslimData_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 51E14ECF88587322655EEAB6BFD623C6 /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Tests" */; - buildPhases = ( - 0446D248DCB5D411AA31EC46FB4FC95A /* Headers */, - D60EEA355345897BAE36B654747384D4 /* Sources */, - 47E0B5CD3F296923572A2DE2C2ADAF49 /* Frameworks */, - 09F504ED67423291709FF0990554A0F6 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - B774E6D131EC2C58071366E13D48B7C4 /* PBXTargetDependency */, - ); - name = "Pods-MuslimData_Tests"; - productName = Pods_MuslimData_Tests; - productReference = 07EFAC04C8D1109BF2827F89C521B330 /* Pods-MuslimData_Tests */; - productType = "com.apple.product-type.framework"; - }; - 87B1B784982A5C7E813417C4403B90BB /* Pods-MuslimData_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = D7CC7619793347427BA64518DBA4E51C /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Example" */; - buildPhases = ( - EA540B4C8226FF9873A52704DB65C521 /* Headers */, - 8B0434F70A3EEF182A23496AAC823BEF /* Sources */, - CA0D1BFD9B61D0B814C3C1AB9999E9A9 /* Frameworks */, - 8C6B135E12094C1892B3DF10A6323807 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C45418EB6D65D4B1CE88FBBE563831AF /* PBXTargetDependency */, - C66C74046FE3407D33E5179F1C993677 /* PBXTargetDependency */, - ); - name = "Pods-MuslimData_Example"; - productName = Pods_MuslimData_Example; - productReference = BF6342B1D69B37FF9472ADC4C29DD0FF /* Pods-MuslimData_Example */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1500; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 12.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 20F90913FCFC574FA2140ED7DB8B31FA /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 0A86C228CFCBC35A1FD284274ED0930F /* GRDB.swift */, - 35E05502EA95CD6D695F7745FBADAD13 /* MuslimData */, - 87B1B784982A5C7E813417C4403B90BB /* Pods-MuslimData_Example */, - 5C8D8120CE6858E66FCF3281E4AF1DAC /* Pods-MuslimData_Tests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 09F504ED67423291709FF0990554A0F6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 16795CB6C1871C16996A24B849F4B455 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 10D31D8BB678B6EB68914A683E111988 /* CHANGELOG.md in Resources */, - DE122D9868C51A9D5B987AA3B77FFEE9 /* muslim_db_v2.0.0.db in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8C0255628A32B56A445FE7356BEF4AC8 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8C6B135E12094C1892B3DF10A6323807 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 4C93671F3EEC628E5DBD75AD7573DD01 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 10DCD7C680A125DA378E2A287928A224 /* Association.swift in Sources */, - 9FD87DA03BEEDB346222F6BCDAEA3656 /* AssociationAggregate.swift in Sources */, - 11B2B59960DD92FBA263A2550875D84A /* BelongsToAssociation.swift in Sources */, - 2904CD80CF6A3460802CCE57F69AF41F /* CGFloat.swift in Sources */, - 51724EB13ECD41D68F70A91F1F1984F5 /* Column.swift in Sources */, - C695CAEBD933886E0EFFF9CC21FA4E29 /* Configuration.swift in Sources */, - 86AD1E8D4914031B8CD8BF949863A49F /* Cursor.swift in Sources */, - CC174B9845F2BE188E6D0510D8C01FCB /* Data.swift in Sources */, - 4AF4C9AF66D23732A42A735353F19B2F /* Database.swift in Sources */, - 0BC73C42C51ED8C6436B7F51902C0FAF /* Database+Schema.swift in Sources */, - AEE7AED548822B2FA7D0B699FFA56DCD /* Database+Statements.swift in Sources */, - FBFB19ABAB8EC550D058E3B191B6941E /* DatabaseCollation.swift in Sources */, - 98EB7E3136AEC27D3C061073CE79FBA4 /* DatabaseDateComponents.swift in Sources */, - 381D73BEC869D518610B85004A4446E5 /* DatabaseError.swift in Sources */, - 9CF893777F2FE720B6865DFD347717D9 /* DatabaseFunction.swift in Sources */, - 6D27EC8A41CD39E29C55BA67577F49B5 /* DatabaseMigrator.swift in Sources */, - DBF49477A941C15CB0F2E2B48361ECB8 /* DatabasePool.swift in Sources */, - 672244EBC7B1A639BDA1E2C33CE8D12D /* DatabasePromise.swift in Sources */, - 3218FBB3E09F368DCA0233431A1B31B1 /* DatabaseQueue.swift in Sources */, - 3CBAD9986CBB94D7E861E6480970153C /* DatabaseReader.swift in Sources */, - C592F719FE708288EA8E883E1977C01B /* DatabaseRegion.swift in Sources */, - BF7934391FCB3BE40676060A7A8E3204 /* DatabaseRegionObservation.swift in Sources */, - 3DCD65358513F5390E70A7D95CF0C88E /* DatabaseSchemaCache.swift in Sources */, - 8155942BCF5F48E0AF95AEFBF6ABF225 /* DatabaseSnapshot.swift in Sources */, - E23AB586690BA3D53DFE9B12F7275F95 /* DatabaseValue.swift in Sources */, - 57251BACF5A417BC89DDD4E41BC0A655 /* DatabaseValueConversion.swift in Sources */, - 2CD0DCA547DA3B28AF55214735875060 /* DatabaseValueConvertible.swift in Sources */, - 94383EB3E69C08C18C357AB79F8C21AC /* DatabaseValueConvertible+Decodable.swift in Sources */, - CA924ACD1926D78E1E51BE4651500130 /* DatabaseValueConvertible+Encodable.swift in Sources */, - 5960841EDA5BB846BE1B5C917AA533F5 /* DatabaseValueConvertible+RawRepresentable.swift in Sources */, - 71CD4C1E65C22B207230F68612BF3BD5 /* DatabaseValueConvertible+ReferenceConvertible.swift in Sources */, - E8A7551BF6EE1C5D0012AA37A5513213 /* DatabaseWriter.swift in Sources */, - 8F47FE3A73BCFBB274500D5E81641BD8 /* Date.swift in Sources */, - 423E36F30B6250EB99EB4A50BCC5FEED /* EncodableRecord.swift in Sources */, - 20F21FD4EE04549EC5D901C6A3D42051 /* EncodableRecord+Encodable.swift in Sources */, - 9F2C324F0C115BDAF6770E75E4F6F05A /* FetchableRecord.swift in Sources */, - 14B04D3B54373F036D38086FF7F64AB2 /* FetchableRecord+Decodable.swift in Sources */, - EDB43BAEF8986890368B148A379B8633 /* FetchableRecord+QueryInterfaceRequest.swift in Sources */, - 9A7C136377B26BFDDE85420E955E828F /* FetchableRecord+TableRecord.swift in Sources */, - 08BCCE1C892468BBBA2C6439FC8873EA /* FetchedRecordsController.swift in Sources */, - 4B010272563F53C1F4A7EB56462910DD /* FetchRequest.swift in Sources */, - 5AA5595884C8650C66B5121EB80C664C /* FTS3.swift in Sources */, - DE9E44E1B0A168154335C2BA7E916D05 /* FTS3+QueryInterface.swift in Sources */, - 99A478CF77D56C7AA427BCF1D2185F01 /* FTS3Pattern.swift in Sources */, - 2A48909A7DFBB93E21A01AE9FB9ADE85 /* FTS3TokenizerDescriptor.swift in Sources */, - C5688D950388FE11B862E50DBE273A2A /* FTS4.swift in Sources */, - AFDDB5176E907707C03E3B8BAB9A7DC8 /* FTS5.swift in Sources */, - D6B71CA98BEF138A6C29511B9B770119 /* FTS5+QueryInterface.swift in Sources */, - E4A9CEF4D097E1B33730AC0B34E5B8AB /* FTS5CustomTokenizer.swift in Sources */, - C7BD8290465A335982C2B2817C54F4A6 /* FTS5Pattern.swift in Sources */, - C6CF68FE5F54A33B5CDF53A403801DBE /* FTS5Tokenizer.swift in Sources */, - FDCE9620C8A492D3DB2613DDB2A878E1 /* FTS5TokenizerDescriptor.swift in Sources */, - F261D22CFB15575AF31D11DF7986F1B5 /* FTS5WrapperTokenizer.swift in Sources */, - 9ADD14F94A1622B4755FE115902B50C7 /* GRDB-4.0.swift in Sources */, - 0B13C25DAA332D348C8FE6F35B8E394D /* GRDB.swift-dummy.m in Sources */, - 8623B0145319BCBDCB45911FC3716248 /* HasManyAssociation.swift in Sources */, - 22CC957C16EE9373A9B4290AA4ED6AA0 /* HasManyThroughAssociation.swift in Sources */, - E54D49BF5E856AC43F268EE0A7898FA4 /* HasOneAssociation.swift in Sources */, - 8409A7A3F0A1F44440B560BD02B7EB65 /* HasOneThroughAssociation.swift in Sources */, - B75847CFF2033ED02EAC81E896BDE863 /* Inflections.swift in Sources */, - 31F227659934F4BCFB0042DA89989D94 /* Inflections+English.swift in Sources */, - 0C07B15961DD84423806B3C72C003239 /* Migration.swift in Sources */, - B450FE8985D14C5C157C9BAFEEBE1C7A /* NSData.swift in Sources */, - 6DF9A91F46F052EF0A986515BBA802A6 /* NSNull.swift in Sources */, - 5961CDDE4ED0F98ABAAB378D5AAFDB1D /* NSNumber.swift in Sources */, - 6255128A9FE73C1F4E3229D3320FF0B5 /* NSString.swift in Sources */, - 4C64EBFA94BCD55E127222CFFBC04C69 /* OrderedDictionary.swift in Sources */, - 0AA607557F18B41C3EB5289A5C720F47 /* PersistableRecord.swift in Sources */, - 99A556F66D6F9602445A722A3C49E351 /* Pool.swift in Sources */, - 91F847770D950AB558027CEF5A486872 /* QueryInterfaceRequest.swift in Sources */, - 56646D9949730F756FD5FB4A811E25F1 /* QueryInterfaceRequest+Association.swift in Sources */, - A8624D7D3076BFB54DC2B8542297F2C1 /* ReadWriteBox.swift in Sources */, - 06EA1A8F47135B4A17ACB2D26BAE86A4 /* Record.swift in Sources */, - 1A440A20CE875F61FA4923F236C5DB80 /* RequestProtocols.swift in Sources */, - C91922F852F3CF82A64332CC1C9FC1E8 /* Result.swift in Sources */, - 1F7E49C5DAE888114BCB1517930AB815 /* Row.swift in Sources */, - 6FF06E917D72494A3C652D7E4EA7A8F4 /* Row+QueryInterfaceRequest.swift in Sources */, - 45125BB96512230A2EBF036CC7A69B7E /* RowAdapter.swift in Sources */, - C2C7373F605AF06723C0E1AD25225035 /* SchedulingWatchdog.swift in Sources */, - FD9328E1627DF89B75AC709CE2007134 /* SerializedDatabase.swift in Sources */, - 05792E7B2B1875A8E33AD986310E279F /* SQLAssociation.swift in Sources */, - DC61B7FFFC90E3EF20E3235089040DB2 /* SQLCollatedExpression.swift in Sources */, - 8BE8859153ACFE707E6DDD9FDE619BF9 /* SQLCollection.swift in Sources */, - E67DA81B6D35EC6B20CFF3CB27274710 /* SQLExpressible.swift in Sources */, - 5165B678B8A1A04D0A293E077252DAC0 /* SQLExpression.swift in Sources */, - FE7333505F03EE420F81555B650AC12B /* SQLExpression+QueryInterface.swift in Sources */, - 6BD3AB4777D1498A9B626A9F02D44632 /* SQLForeignKeyRequest.swift in Sources */, - B93CF9C18D6039FBF653B5BA6821251A /* SQLFunctions.swift in Sources */, - DD32D7F782E4361D4C89454C0C32A5F2 /* SQLGenerationContext.swift in Sources */, - ACD80B5FE4A0FBB9BCE79DB7280B74DB /* SQLInterpolation.swift in Sources */, - 0AE33E35827196130F612F39E6AA9511 /* SQLInterpolation+QueryInterface.swift in Sources */, - 017100E67A1E1800897650134CF7DE6A /* SQLiteDateParser.swift in Sources */, - BA5F97861B382AC775297D308D2F5D9E /* SQLLiteral.swift in Sources */, - 5EB37471793B7B00698579768F0C3CFF /* SQLOperators.swift in Sources */, - EA04FA1F59DAE1B863A95D8475DEEBA5 /* SQLOrdering.swift in Sources */, - A47F311157375156772F34DEC79C7AC1 /* SQLQuery.swift in Sources */, - 2AD629C4A4F714BE8FB7A144738E4E5D /* SQLQueryGenerator.swift in Sources */, - 04E95DFE987EA646F95334D48378802E /* SQLRelation.swift in Sources */, - 5AD116150EB0DC2A7040D3D79A524661 /* SQLRequest.swift in Sources */, - F9110500A74A4EDDE31D10A22F4C306A /* SQLSelectable.swift in Sources */, - D12E8348DB93B661BE01F3B989BDBC82 /* SQLSelectable+QueryInterface.swift in Sources */, - A602A8049ECE9D77A9489B39FCDC8BFE /* SQLSpecificExpressible+QueryInterface.swift in Sources */, - 0A7AA860E489240B08A25D41BBA74983 /* StandardLibrary.swift in Sources */, - 09CC7395890EB4D61E6B7AB273AA7D83 /* Statement.swift in Sources */, - A5B00A31722CFF959CAFA83CE1772681 /* StatementAuthorizer.swift in Sources */, - 7FB9ACE4A3141B803006A82963187FDA /* StatementColumnConvertible.swift in Sources */, - 5721EBF6F9407455923DCB004F263158 /* TableDefinition.swift in Sources */, - 0546DA073F90C6118F0257337E143B5C /* TableRecord.swift in Sources */, - 874C20F8BFB0B1F04A58DBD1273620B5 /* TableRecord+Association.swift in Sources */, - A5B7DC70DB74B8D550946CEF1518A466 /* TableRecord+QueryInterfaceRequest.swift in Sources */, - 407F2988EFEF7526F9D1334EDB7F72B6 /* TransactionObserver.swift in Sources */, - 215CD75B1818369F268C2F34C0CE1959 /* URL.swift in Sources */, - 3BB28BF26BFDF0636B75188C9070E7AF /* Utils.swift in Sources */, - 7534E2B56426F355DD978C6224B46FDD /* UUID.swift in Sources */, - 2E4175254C6C530AAA65348527456179 /* ValueObservation.swift in Sources */, - 630D1F558EDEC847D73F2A33AD2BD4C9 /* ValueObservation+Combine.swift in Sources */, - 110AD354AF4B25121D882CEE2E192377 /* ValueObservation+CompactMap.swift in Sources */, - 6739991E2B88A9C6B1F247A32871C77F /* ValueObservation+Count.swift in Sources */, - AD88AF5B3A65CD3423071EB46BB4C78C /* ValueObservation+DatabaseValueConvertible.swift in Sources */, - 1302720D764C0D78217785711574C146 /* ValueObservation+DistinctUntilChanged.swift in Sources */, - 46F4181A36A729B3A8C73F75CE5C0F5A /* ValueObservation+FetchableRecord.swift in Sources */, - B68C64C2CFF1682DC6831206D363F289 /* ValueObservation+Map.swift in Sources */, - CCAE93D8B6E2F417F4A37E519B4BD567 /* ValueObservation+MapReducer.swift in Sources */, - 0AC8CBE32F1F042A4591BF19CFC74D36 /* ValueObservation+Row.swift in Sources */, - 0532A2FFCC1D7BE3AFC1F0BD64FD4E1B /* ValueObserver.swift in Sources */, - 89F8459CC1490BFEFA068D5B87266C99 /* ValueReducer.swift in Sources */, - 93E62306A467841910EE260C3FBBC7D1 /* VirtualTableModule.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8B0434F70A3EEF182A23496AAC823BEF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B155BAD5A7A3CB67D6BD57819071AAE /* Pods-MuslimData_Example-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A3EACE86C1CF6DC1C20FF0894DEB4C70 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 50212346A63C32618C9ADA10A1DF18A9 /* AzkarCategory.swift in Sources */, - CBBB7FA02EAE0C5960DDA6BA3240581F /* AzkarChapter.swift in Sources */, - CD838E8C8C55E9EC4ADF60FD9F3F50B6 /* AzkarItem.swift in Sources */, - A89CD38444529575CDAA3B043B78F82A /* CHANGELOG.md in Sources */, - F7030CD3F4A0A195D82A93FA399DC288 /* DateExtensions.swift in Sources */, - 35DD8491C8257EE510292171F72B16B5 /* DBHelper.swift in Sources */, - 25C1F12A65651337C95CE3AA1C270FFD /* Language.swift in Sources */, - B3666972AADD12C032E180312A6E0054 /* Location.swift in Sources */, - C44C3EB46AB4B908279430092D61BB89 /* muslim_db_v2.0.0.db in Sources */, - D5798123039B4E95BA8E99EB23BA5AA2 /* MuslimData-dummy.m in Sources */, - 581BE2110A4F70454962F512B5CD48D7 /* MuslimRepository.swift in Sources */, - 0CAE2CE3EBA6D91FDE8B144BDC38EA75 /* Name.swift in Sources */, - D4C2A4492A414CE181FDD2825038A37C /* Prayer.swift in Sources */, - 726BDAF6672123C0FC06876E00CF40BB /* PrayerAttribute.swift in Sources */, - 65B76004379D42F12DBC219C4A65A5F1 /* PrayerTime.swift in Sources */, - B119448E22AD6D03A5F0220D8880030D /* Repository.swift in Sources */, - E0B5CEB15E69B7AB763FBF76A835B897 /* String+Extensions.swift in Sources */, - 69D145D32F61AD3E10F27039A4D43230 /* TimeFormat.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D60EEA355345897BAE36B654747384D4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8CB07EE29755E83E64300A3CAF1720E8 /* Pods-MuslimData_Tests-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 7D64BD038205B726383FCF16E3514F80 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GRDB.swift; - target = 0A86C228CFCBC35A1FD284274ED0930F /* GRDB.swift */; - targetProxy = 952DED73CD3493BCE5970144033D1887 /* PBXContainerItemProxy */; - }; - B774E6D131EC2C58071366E13D48B7C4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Pods-MuslimData_Example"; - target = 87B1B784982A5C7E813417C4403B90BB /* Pods-MuslimData_Example */; - targetProxy = DB64360DDEC60608B4D08463E07A8F9B /* PBXContainerItemProxy */; - }; - C45418EB6D65D4B1CE88FBBE563831AF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GRDB.swift; - target = 0A86C228CFCBC35A1FD284274ED0930F /* GRDB.swift */; - targetProxy = B98FCE2CA12598ACDA61883D0FD21409 /* PBXContainerItemProxy */; - }; - C66C74046FE3407D33E5179F1C993677 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MuslimData; - target = 35E05502EA95CD6D695F7745FBADAD13 /* MuslimData */; - targetProxy = 292733CD321409D2EC9B370D7E32087E /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 4C463AA01BF6D8376B48D9446F5F05E7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AB5AEBDF6E57653433892BB405F0FC2 /* GRDB.swift.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/GRDB.swift/GRDB.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GRDB.swift/GRDB.swift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/GRDB.swift/GRDB.swift.modulemap"; - PRODUCT_MODULE_NAME = GRDB; - PRODUCT_NAME = GRDB; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 4D3F40707BD4BDF24350005F427142DA /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 65B9B5758E649467E7C7257B2A99B398 /* Pods-MuslimData_Example.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 590FCC4592BC2EA9E9B7DA477CB49C35 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 626FAFDB2FBA47E8F7DA5BEEC5204BF8 /* Pods-MuslimData_Tests.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 5AAB2DB02D5DED7739205FDB0E5ABB28 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A1003C353C0CF946F8940551748269D2 /* GRDB.swift.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/GRDB.swift/GRDB.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GRDB.swift/GRDB.swift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/GRDB.swift/GRDB.swift.modulemap"; - PRODUCT_MODULE_NAME = GRDB; - PRODUCT_NAME = GRDB; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - CE9FB61519EED0E8E585A81CB1110A5C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D846F478C4C834DC00E277228B129083 /* Pods-MuslimData_Example.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - D066BE4BC2676A5AE6E87DACF7531A78 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = ACBA7BBDC459B70F0ACB3413B3906649 /* MuslimData.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MuslimData/MuslimData-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MuslimData/MuslimData-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/MuslimData/MuslimData.modulemap"; - PRODUCT_MODULE_NAME = MuslimData; - PRODUCT_NAME = MuslimData; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - E17AC1108A87A18C69CFB6D24002121D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0F524B59DAF2332C1379730B07D76C1B /* MuslimData.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MuslimData/MuslimData-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MuslimData/MuslimData-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/MuslimData/MuslimData.modulemap"; - PRODUCT_MODULE_NAME = MuslimData; - PRODUCT_NAME = MuslimData; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.10; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - FF40A1B18D6EC2041A36BB94EDD9554E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DEF87AE545A42D3F0C700E79EC027126 /* Pods-MuslimData_Tests.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 379A99B8000D763BFF3B2A3744AE6B96 /* Build configuration list for PBXNativeTarget "GRDB.swift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4C463AA01BF6D8376B48D9446F5F05E7 /* Debug */, - 5AAB2DB02D5DED7739205FDB0E5ABB28 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */, - 9E406C6AAF85E580207CD97B0044DEAB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 51E14ECF88587322655EEAB6BFD623C6 /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 590FCC4592BC2EA9E9B7DA477CB49C35 /* Debug */, - FF40A1B18D6EC2041A36BB94EDD9554E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C5F36064D02416FA24192939EEFC131D /* Build configuration list for PBXNativeTarget "MuslimData" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E17AC1108A87A18C69CFB6D24002121D /* Debug */, - D066BE4BC2676A5AE6E87DACF7531A78 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D7CC7619793347427BA64518DBA4E51C /* Build configuration list for PBXNativeTarget "Pods-MuslimData_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4D3F40707BD4BDF24350005F427142DA /* Debug */, - CE9FB61519EED0E8E585A81CB1110A5C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; -} diff --git a/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100755 index 919434a..0000000 --- a/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100755 index 18d9810..0000000 --- a/Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-Info.plist b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-Info.plist deleted file mode 100755 index 5ce460e..0000000 --- a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.0.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-dummy.m b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-dummy.m deleted file mode 100755 index a7dc8db..0000000 --- a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_GRDB_swift : NSObject -@end -@implementation PodsDummy_GRDB_swift -@end diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-prefix.pch b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-prefix.pch deleted file mode 100755 index beb2a24..0000000 --- a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.debug.xcconfig b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.debug.xcconfig deleted file mode 100644 index 5199863..0000000 --- a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.debug.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GRDB.swift -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.modulemap b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.modulemap deleted file mode 100755 index 04ac555..0000000 --- a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.modulemap +++ /dev/null @@ -1,8 +0,0 @@ -framework module GRDB { - umbrella header "GRDB.h" - - export * - module * { export * } - - header "grdb_config.h" -} diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.release.xcconfig b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.release.xcconfig deleted file mode 100644 index 5199863..0000000 --- a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.release.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GRDB.swift -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.xcconfig b/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.xcconfig deleted file mode 100755 index c0f2c1e..0000000 --- a/Example/Pods/Target Support Files/GRDB.swift/GRDB.swift.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GRDB.swift -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/GRDB.swift/Info.plist b/Example/Pods/Target Support Files/GRDB.swift/Info.plist deleted file mode 100755 index f4b9ea8..0000000 --- a/Example/Pods/Target Support Files/GRDB.swift/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.6.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/MuslimData/Info.plist b/Example/Pods/Target Support Files/MuslimData/Info.plist deleted file mode 100755 index 2243fe6..0000000 --- a/Example/Pods/Target Support Files/MuslimData/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData-Info.plist b/Example/Pods/Target Support Files/MuslimData/MuslimData-Info.plist deleted file mode 100755 index 2d5470e..0000000 --- a/Example/Pods/Target Support Files/MuslimData/MuslimData-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.6.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData-dummy.m b/Example/Pods/Target Support Files/MuslimData/MuslimData-dummy.m deleted file mode 100755 index 73ac6fb..0000000 --- a/Example/Pods/Target Support Files/MuslimData/MuslimData-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_MuslimData : NSObject -@end -@implementation PodsDummy_MuslimData -@end diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData-prefix.pch b/Example/Pods/Target Support Files/MuslimData/MuslimData-prefix.pch deleted file mode 100755 index beb2a24..0000000 --- a/Example/Pods/Target Support Files/MuslimData/MuslimData-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData-umbrella.h b/Example/Pods/Target Support Files/MuslimData/MuslimData-umbrella.h deleted file mode 100755 index b5086c7..0000000 --- a/Example/Pods/Target Support Files/MuslimData/MuslimData-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double MuslimDataVersionNumber; -FOUNDATION_EXPORT const unsigned char MuslimDataVersionString[]; - diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData.debug.xcconfig b/Example/Pods/Target Support Files/MuslimData/MuslimData.debug.xcconfig deleted file mode 100644 index fa4de3b..0000000 --- a/Example/Pods/Target Support Files/MuslimData/MuslimData.debug.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MuslimData -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "GRDB" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData.modulemap b/Example/Pods/Target Support Files/MuslimData/MuslimData.modulemap deleted file mode 100755 index e86668f..0000000 --- a/Example/Pods/Target Support Files/MuslimData/MuslimData.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module MuslimData { - umbrella header "MuslimData-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData.release.xcconfig b/Example/Pods/Target Support Files/MuslimData/MuslimData.release.xcconfig deleted file mode 100644 index fa4de3b..0000000 --- a/Example/Pods/Target Support Files/MuslimData/MuslimData.release.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MuslimData -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "GRDB" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/MuslimData/MuslimData.xcconfig b/Example/Pods/Target Support Files/MuslimData/MuslimData.xcconfig deleted file mode 100755 index a94d8b1..0000000 --- a/Example/Pods/Target Support Files/MuslimData/MuslimData.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MuslimData -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/MuslimData/ResourceBundle-MuslimData-Info.plist b/Example/Pods/Target Support Files/MuslimData/ResourceBundle-MuslimData-Info.plist deleted file mode 100755 index 99a40ff..0000000 --- a/Example/Pods/Target Support Files/MuslimData/ResourceBundle-MuslimData-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 0.1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Info.plist b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Info.plist deleted file mode 100755 index 2243fe6..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist deleted file mode 100755 index 19cf209..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.markdown deleted file mode 100755 index eef694f..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.markdown +++ /dev/null @@ -1,219 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## GRDB.swift - -Copyright (C) 2019 Gwendal Roué - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -## MuslimData - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.plist deleted file mode 100755 index eb20f81..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-acknowledgements.plist +++ /dev/null @@ -1,257 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright (C) 2019 Gwendal Roué - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - License - MIT - Title - GRDB.swift - Type - PSGroupSpecifier - - - FooterText - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - MIT - Title - MuslimData - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-dummy.m b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-dummy.m deleted file mode 100755 index 133bfe5..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_MuslimData_Example : NSObject -@end -@implementation PodsDummy_Pods_MuslimData_Example -@end diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh deleted file mode 100755 index 4eb56fa..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-frameworks.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -function on_error { - echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" -} -trap 'on_error $LINENO' ERR - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" -BCSYMBOLMAP_DIR="BCSymbolMaps" - - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink -f "${source}")" - fi - - if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then - # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied - find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do - echo "Installing $f" - install_bcsymbolmap "$f" "$destination" - rm "$f" - done - rmdir "${source}/${BCSYMBOLMAP_DIR}" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - elif [ -L "${binary}" ]; then - echo "Destination binary is symlinked..." - dirname="$(dirname "${binary}")" - binary="${dirname}/$(readlink "${binary}")" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - warn_missing_arch=${2:-true} - if [ -r "$source" ]; then - # Copy the dSYM into the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .dSYM "$source")" - binary_name="$(ls "$source/Contents/Resources/DWARF")" - binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" - - # Strip invalid architectures from the dSYM. - if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then - strip_invalid_archs "$binary" "$warn_missing_arch" - fi - if [[ $STRIP_BINARY_RETVAL == 0 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - mkdir -p "${DWARF_DSYM_FOLDER_PATH}" - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" - fi - fi -} - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - warn_missing_arch=${2:-true} - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - if [[ "$warn_missing_arch" == "true" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - fi - STRIP_BINARY_RETVAL=1 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=0 -} - -# Copies the bcsymbolmap files of a vendored framework -install_bcsymbolmap() { - local bcsymbolmap_path="$1" - local destination="${BUILT_PRODUCTS_DIR}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identity - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/GRDB.swift/GRDB.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MuslimData/MuslimData.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/GRDB.swift/GRDB.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MuslimData/MuslimData.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-resources.sh b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-resources.sh deleted file mode 100755 index 345301f..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-resources.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then - # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy - # resources to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -case "${TARGETED_DEVICE_FAMILY:-}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - 3) - TARGET_DEVICE_ARGS="--target-device tv" - ;; - 4) - TARGET_DEVICE_ARGS="--target-device watch" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; -esac - -install_resource() -{ - if [[ "$1" = /* ]] ; then - RESOURCE_PATH="$1" - else - RESOURCE_PATH="${PODS_ROOT}/$1" - fi - if [[ ! -e "$RESOURCE_PATH" ]] ; then - cat << EOM -error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. -EOM - exit 1 - fi - case $RESOURCE_PATH in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true - xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - *) - echo "$RESOURCE_PATH" || true - echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] -then - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "${PODS_ROOT}*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - else - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" - fi -fi diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-umbrella.h b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-umbrella.h deleted file mode 100755 index 6f5d42e..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_MuslimData_ExampleVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_MuslimData_ExampleVersionString[]; - diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig deleted file mode 100755 index 13e9f9d..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.debug.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -framework "GRDB" -framework "MuslimData" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.modulemap b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.modulemap deleted file mode 100755 index 3d39baa..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_MuslimData_Example { - umbrella header "Pods-MuslimData_Example-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig deleted file mode 100755 index 13e9f9d..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Example/Pods-MuslimData_Example.release.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -framework "GRDB" -framework "MuslimData" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Info.plist b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Info.plist deleted file mode 100755 index 2243fe6..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist deleted file mode 100755 index 19cf209..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-acknowledgements.markdown deleted file mode 100755 index 102af75..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-acknowledgements.markdown +++ /dev/null @@ -1,3 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: -Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-acknowledgements.plist deleted file mode 100755 index 7acbad1..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-acknowledgements.plist +++ /dev/null @@ -1,29 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-dummy.m b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-dummy.m deleted file mode 100755 index 8674ab7..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_MuslimData_Tests : NSObject -@end -@implementation PodsDummy_Pods_MuslimData_Tests -@end diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-frameworks.sh b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-frameworks.sh deleted file mode 100755 index 08e3eaa..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-frameworks.sh +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} - -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - if [ -r "$source" ]; then - # Copy the dSYM into a the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .framework.dSYM "$source")" - binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then - strip_invalid_archs "$binary" - fi - - if [[ $STRIP_BINARY_RETVAL == 1 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" - fi - fi -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - STRIP_BINARY_RETVAL=0 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=1 -} - -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-resources.sh b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-resources.sh deleted file mode 100755 index 345301f..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-resources.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then - # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy - # resources to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -case "${TARGETED_DEVICE_FAMILY:-}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - 3) - TARGET_DEVICE_ARGS="--target-device tv" - ;; - 4) - TARGET_DEVICE_ARGS="--target-device watch" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; -esac - -install_resource() -{ - if [[ "$1" = /* ]] ; then - RESOURCE_PATH="$1" - else - RESOURCE_PATH="${PODS_ROOT}/$1" - fi - if [[ ! -e "$RESOURCE_PATH" ]] ; then - cat << EOM -error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. -EOM - exit 1 - fi - case $RESOURCE_PATH in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true - xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - *) - echo "$RESOURCE_PATH" || true - echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] -then - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "${PODS_ROOT}*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - else - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" - fi -fi diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-umbrella.h b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-umbrella.h deleted file mode 100755 index abf9b43..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_MuslimData_TestsVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_MuslimData_TestsVersionString[]; - diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig deleted file mode 100755 index 88be53d..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -framework "GRDB" -framework "MuslimData" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap deleted file mode 100755 index 8be25e0..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_MuslimData_Tests { - umbrella header "Pods-MuslimData_Tests-umbrella.h" - - export * - module * { export * } -} diff --git a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.release.xcconfig deleted file mode 100755 index 88be53d..0000000 --- a/Example/Pods/Target Support Files/Pods-MuslimData_Tests/Pods-MuslimData_Tests.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GRDB.swift/GRDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MuslimData/MuslimData.framework/Headers" -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "Foundation" -framework "GRDB" -framework "MuslimData" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES From 90cb6078f115f4b3f4c4ccdaa6a0ff1c1f29d30d Mon Sep 17 00:00:00 2001 From: Muhammad Azad Date: Sat, 23 Mar 2024 22:36:08 +0300 Subject: [PATCH 07/44] Rename Example to MuslimDataExample. Update ignored file. --- .gitignore | 1 - .../project.pbxproj | 407 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/swiftpm/Package.resolved | 24 ++ .../xcshareddata/xcschemes/Example.xcscheme | 78 ++++ .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Contents.json | 0 .../ic_nav_azkars.imageset/Contents.json | 0 .../ic_nav_azkars.imageset/ic_nav_azkars.pdf | Bin .../ic_nav_location.imageset/Contents.json | 0 .../ic_settings_location.pdf | Bin .../ic_nav_names.imageset/Contents.json | 0 .../ic_nav_names.imageset/ic_nav_names.pdf | Bin .../ic_nav_prayers.imageset/Contents.json | 0 .../ic_nav_my_prayers.pdf | Bin .../ContentView.swift | 0 .../MuslimDataExampleApp.swift} | 6 +- .../Names/NamesRowView.swift | 0 .../Names/NamesScreen.swift | 0 .../Names/NamesViewModel.swift | 0 .../Preview Assets.xcassets/Contents.json | 0 .../Shared/AppTabs.swift | 0 .../Shared/ErrorWithRetryView.swift | 0 24 files changed, 527 insertions(+), 4 deletions(-) create mode 100644 Example/MuslimDataExample.xcodeproj/project.pbxproj create mode 100644 Example/MuslimDataExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 Example/MuslimDataExample.xcodeproj/xcshareddata/xcschemes/Example.xcscheme rename Example/{Example => MuslimDataExample}/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename Example/{Example => MuslimDataExample}/Assets.xcassets/Contents.json (100%) rename Example/{Example => MuslimDataExample}/Assets.xcassets/ic_nav_azkars.imageset/Contents.json (100%) rename Example/{Example => MuslimDataExample}/Assets.xcassets/ic_nav_azkars.imageset/ic_nav_azkars.pdf (100%) rename Example/{Example => MuslimDataExample}/Assets.xcassets/ic_nav_location.imageset/Contents.json (100%) rename Example/{Example => MuslimDataExample}/Assets.xcassets/ic_nav_location.imageset/ic_settings_location.pdf (100%) rename Example/{Example => MuslimDataExample}/Assets.xcassets/ic_nav_names.imageset/Contents.json (100%) rename Example/{Example => MuslimDataExample}/Assets.xcassets/ic_nav_names.imageset/ic_nav_names.pdf (100%) rename Example/{Example => MuslimDataExample}/Assets.xcassets/ic_nav_prayers.imageset/Contents.json (100%) rename Example/{Example => MuslimDataExample}/Assets.xcassets/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf (100%) rename Example/{Example => MuslimDataExample}/ContentView.swift (100%) rename Example/{Example/ExampleApp.swift => MuslimDataExample/MuslimDataExampleApp.swift} (73%) rename Example/{Example => MuslimDataExample}/Names/NamesRowView.swift (100%) rename Example/{Example => MuslimDataExample}/Names/NamesScreen.swift (100%) rename Example/{Example => MuslimDataExample}/Names/NamesViewModel.swift (100%) rename Example/{Example => MuslimDataExample}/Preview Content/Preview Assets.xcassets/Contents.json (100%) rename Example/{Example => MuslimDataExample}/Shared/AppTabs.swift (100%) rename Example/{Example => MuslimDataExample}/Shared/ErrorWithRetryView.swift (100%) diff --git a/.gitignore b/.gitignore index 95f17a1..5d4c3a3 100755 --- a/.gitignore +++ b/.gitignore @@ -30,7 +30,6 @@ Carthage/Build ### SwiftPackageManager ### Packages xcuserdata -*.xcodeproj # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: diff --git a/Example/MuslimDataExample.xcodeproj/project.pbxproj b/Example/MuslimDataExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8d556c8 --- /dev/null +++ b/Example/MuslimDataExample.xcodeproj/project.pbxproj @@ -0,0 +1,407 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 6A22480D2BAED7840094967B /* NamesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A22480C2BAED7840094967B /* NamesScreen.swift */; }; + 6A22480F2BAED7960094967B /* NamesRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A22480E2BAED7960094967B /* NamesRowView.swift */; }; + 6A2248112BAEDAEE0094967B /* NamesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2248102BAEDAED0094967B /* NamesViewModel.swift */; }; + 6A2248152BAEDB4E0094967B /* MuslimData in Frameworks */ = {isa = PBXBuildFile; productRef = 6A2248142BAEDB4E0094967B /* MuslimData */; }; + 6A2248182BAEE1990094967B /* ErrorWithRetryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2248172BAEE1990094967B /* ErrorWithRetryView.swift */; }; + 6A22481A2BAEEBFB0094967B /* AppTabs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2248192BAEEBFB0094967B /* AppTabs.swift */; }; + 6A787B1C2BAECF6F00DA0107 /* MuslimDataExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A787B1B2BAECF6F00DA0107 /* MuslimDataExampleApp.swift */; }; + 6A787B1E2BAECF6F00DA0107 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A787B1D2BAECF6F00DA0107 /* ContentView.swift */; }; + 6A787B202BAECF7200DA0107 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A787B1F2BAECF7200DA0107 /* Assets.xcassets */; }; + 6A787B232BAECF7200DA0107 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A787B222BAECF7200DA0107 /* Preview Assets.xcassets */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 6A22480C2BAED7840094967B /* NamesScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesScreen.swift; sourceTree = ""; }; + 6A22480E2BAED7960094967B /* NamesRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesRowView.swift; sourceTree = ""; }; + 6A2248102BAEDAED0094967B /* NamesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesViewModel.swift; sourceTree = ""; }; + 6A2248132BAEDB050094967B /* muslim-data-ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "muslim-data-ios"; path = ..; sourceTree = ""; }; + 6A2248172BAEE1990094967B /* ErrorWithRetryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorWithRetryView.swift; sourceTree = ""; }; + 6A2248192BAEEBFB0094967B /* AppTabs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppTabs.swift; sourceTree = ""; }; + 6A787B182BAECF6F00DA0107 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 6A787B1B2BAECF6F00DA0107 /* MuslimDataExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MuslimDataExampleApp.swift; sourceTree = ""; }; + 6A787B1D2BAECF6F00DA0107 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 6A787B1F2BAECF7200DA0107 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 6A787B222BAECF7200DA0107 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 6A787B152BAECF6F00DA0107 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A2248152BAEDB4E0094967B /* MuslimData in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 6A22480B2BAED7730094967B /* Names */ = { + isa = PBXGroup; + children = ( + 6A22480C2BAED7840094967B /* NamesScreen.swift */, + 6A22480E2BAED7960094967B /* NamesRowView.swift */, + 6A2248102BAEDAED0094967B /* NamesViewModel.swift */, + ); + path = Names; + sourceTree = ""; + }; + 6A2248122BAEDB050094967B /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6A2248132BAEDB050094967B /* muslim-data-ios */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6A2248162BAEE1880094967B /* Shared */ = { + isa = PBXGroup; + children = ( + 6A2248172BAEE1990094967B /* ErrorWithRetryView.swift */, + 6A2248192BAEEBFB0094967B /* AppTabs.swift */, + ); + path = Shared; + sourceTree = ""; + }; + 6A787B0F2BAECF6F00DA0107 = { + isa = PBXGroup; + children = ( + 6A787B1A2BAECF6F00DA0107 /* MuslimDataExample */, + 6A787B192BAECF6F00DA0107 /* Products */, + 6A2248122BAEDB050094967B /* Frameworks */, + ); + sourceTree = ""; + }; + 6A787B192BAECF6F00DA0107 /* Products */ = { + isa = PBXGroup; + children = ( + 6A787B182BAECF6F00DA0107 /* Example.app */, + ); + name = Products; + sourceTree = ""; + }; + 6A787B1A2BAECF6F00DA0107 /* MuslimDataExample */ = { + isa = PBXGroup; + children = ( + 6A2248162BAEE1880094967B /* Shared */, + 6A22480B2BAED7730094967B /* Names */, + 6A787B1B2BAECF6F00DA0107 /* MuslimDataExampleApp.swift */, + 6A787B1D2BAECF6F00DA0107 /* ContentView.swift */, + 6A787B1F2BAECF7200DA0107 /* Assets.xcassets */, + 6A787B212BAECF7200DA0107 /* Preview Content */, + ); + path = MuslimDataExample; + sourceTree = ""; + }; + 6A787B212BAECF7200DA0107 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 6A787B222BAECF7200DA0107 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 6A787B172BAECF6F00DA0107 /* Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6A787B262BAECF7200DA0107 /* Build configuration list for PBXNativeTarget "Example" */; + buildPhases = ( + 6A787B142BAECF6F00DA0107 /* Sources */, + 6A787B152BAECF6F00DA0107 /* Frameworks */, + 6A787B162BAECF6F00DA0107 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Example; + packageProductDependencies = ( + 6A2248142BAEDB4E0094967B /* MuslimData */, + ); + productName = Example; + productReference = 6A787B182BAECF6F00DA0107 /* Example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6A787B102BAECF6F00DA0107 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1530; + LastUpgradeCheck = 1530; + TargetAttributes = { + 6A787B172BAECF6F00DA0107 = { + CreatedOnToolsVersion = 15.3; + }; + }; + }; + buildConfigurationList = 6A787B132BAECF6F00DA0107 /* Build configuration list for PBXProject "MuslimDataExample" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 6A787B0F2BAECF6F00DA0107; + productRefGroup = 6A787B192BAECF6F00DA0107 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 6A787B172BAECF6F00DA0107 /* Example */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 6A787B162BAECF6F00DA0107 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A787B232BAECF7200DA0107 /* Preview Assets.xcassets in Resources */, + 6A787B202BAECF7200DA0107 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 6A787B142BAECF6F00DA0107 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A22481A2BAEEBFB0094967B /* AppTabs.swift in Sources */, + 6A2248182BAEE1990094967B /* ErrorWithRetryView.swift in Sources */, + 6A22480F2BAED7960094967B /* NamesRowView.swift in Sources */, + 6A22480D2BAED7840094967B /* NamesScreen.swift in Sources */, + 6A787B1E2BAECF6F00DA0107 /* ContentView.swift in Sources */, + 6A787B1C2BAECF6F00DA0107 /* MuslimDataExampleApp.swift in Sources */, + 6A2248112BAEDAEE0094967B /* NamesViewModel.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 6A787B242BAECF7200DA0107 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 6A787B252BAECF7200DA0107 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6A787B272BAECF7200DA0107 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"MuslimDataExample/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.muslim.data.example.Example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 6A787B282BAECF7200DA0107 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"MuslimDataExample/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.muslim.data.example.Example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6A787B132BAECF6F00DA0107 /* Build configuration list for PBXProject "MuslimDataExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6A787B242BAECF7200DA0107 /* Debug */, + 6A787B252BAECF7200DA0107 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6A787B262BAECF7200DA0107 /* Build configuration list for PBXNativeTarget "Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6A787B272BAECF7200DA0107 /* Debug */, + 6A787B282BAECF7200DA0107 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + 6A2248142BAEDB4E0094967B /* MuslimData */ = { + isa = XCSwiftPackageProductDependency; + productName = MuslimData; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 6A787B102BAECF6F00DA0107 /* Project object */; +} diff --git a/Example/MuslimDataExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/MuslimDataExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Example/MuslimDataExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..17c9e0f --- /dev/null +++ b/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,24 @@ +{ + "originHash" : "d74d0ac244973253b6ab6ca55279e1495dd27d9c84571fa4571b37d82a389f45", + "pins" : [ + { + "identity" : "csqlite", + "kind" : "remoteSourceControl", + "location" : "https://github.com/groue/CSQLite.git", + "state" : { + "revision" : "3a405d0ebd8bf07d4c41a8b05a203e4d03415b5b", + "version" : "0.3.0" + } + }, + { + "identity" : "grdb.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/groue/GRDB.swift.git", + "state" : { + "revision" : "49a7b2091c84e8e695e78ada1840eda022e5dc11", + "version" : "4.0.1" + } + } + ], + "version" : 3 +} diff --git a/Example/MuslimDataExample.xcodeproj/xcshareddata/xcschemes/Example.xcscheme b/Example/MuslimDataExample.xcodeproj/xcshareddata/xcschemes/Example.xcscheme new file mode 100644 index 0000000..7639a29 --- /dev/null +++ b/Example/MuslimDataExample.xcodeproj/xcshareddata/xcschemes/Example.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/MuslimDataExample/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Example/MuslimDataExample/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/Example/Example/Assets.xcassets/Contents.json b/Example/MuslimDataExample/Assets.xcassets/Contents.json similarity index 100% rename from Example/Example/Assets.xcassets/Contents.json rename to Example/MuslimDataExample/Assets.xcassets/Contents.json diff --git a/Example/Example/Assets.xcassets/ic_nav_azkars.imageset/Contents.json b/Example/MuslimDataExample/Assets.xcassets/ic_nav_azkars.imageset/Contents.json similarity index 100% rename from Example/Example/Assets.xcassets/ic_nav_azkars.imageset/Contents.json rename to Example/MuslimDataExample/Assets.xcassets/ic_nav_azkars.imageset/Contents.json diff --git a/Example/Example/Assets.xcassets/ic_nav_azkars.imageset/ic_nav_azkars.pdf b/Example/MuslimDataExample/Assets.xcassets/ic_nav_azkars.imageset/ic_nav_azkars.pdf similarity index 100% rename from Example/Example/Assets.xcassets/ic_nav_azkars.imageset/ic_nav_azkars.pdf rename to Example/MuslimDataExample/Assets.xcassets/ic_nav_azkars.imageset/ic_nav_azkars.pdf diff --git a/Example/Example/Assets.xcassets/ic_nav_location.imageset/Contents.json b/Example/MuslimDataExample/Assets.xcassets/ic_nav_location.imageset/Contents.json similarity index 100% rename from Example/Example/Assets.xcassets/ic_nav_location.imageset/Contents.json rename to Example/MuslimDataExample/Assets.xcassets/ic_nav_location.imageset/Contents.json diff --git a/Example/Example/Assets.xcassets/ic_nav_location.imageset/ic_settings_location.pdf b/Example/MuslimDataExample/Assets.xcassets/ic_nav_location.imageset/ic_settings_location.pdf similarity index 100% rename from Example/Example/Assets.xcassets/ic_nav_location.imageset/ic_settings_location.pdf rename to Example/MuslimDataExample/Assets.xcassets/ic_nav_location.imageset/ic_settings_location.pdf diff --git a/Example/Example/Assets.xcassets/ic_nav_names.imageset/Contents.json b/Example/MuslimDataExample/Assets.xcassets/ic_nav_names.imageset/Contents.json similarity index 100% rename from Example/Example/Assets.xcassets/ic_nav_names.imageset/Contents.json rename to Example/MuslimDataExample/Assets.xcassets/ic_nav_names.imageset/Contents.json diff --git a/Example/Example/Assets.xcassets/ic_nav_names.imageset/ic_nav_names.pdf b/Example/MuslimDataExample/Assets.xcassets/ic_nav_names.imageset/ic_nav_names.pdf similarity index 100% rename from Example/Example/Assets.xcassets/ic_nav_names.imageset/ic_nav_names.pdf rename to Example/MuslimDataExample/Assets.xcassets/ic_nav_names.imageset/ic_nav_names.pdf diff --git a/Example/Example/Assets.xcassets/ic_nav_prayers.imageset/Contents.json b/Example/MuslimDataExample/Assets.xcassets/ic_nav_prayers.imageset/Contents.json similarity index 100% rename from Example/Example/Assets.xcassets/ic_nav_prayers.imageset/Contents.json rename to Example/MuslimDataExample/Assets.xcassets/ic_nav_prayers.imageset/Contents.json diff --git a/Example/Example/Assets.xcassets/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf b/Example/MuslimDataExample/Assets.xcassets/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf similarity index 100% rename from Example/Example/Assets.xcassets/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf rename to Example/MuslimDataExample/Assets.xcassets/ic_nav_prayers.imageset/ic_nav_my_prayers.pdf diff --git a/Example/Example/ContentView.swift b/Example/MuslimDataExample/ContentView.swift similarity index 100% rename from Example/Example/ContentView.swift rename to Example/MuslimDataExample/ContentView.swift diff --git a/Example/Example/ExampleApp.swift b/Example/MuslimDataExample/MuslimDataExampleApp.swift similarity index 73% rename from Example/Example/ExampleApp.swift rename to Example/MuslimDataExample/MuslimDataExampleApp.swift index 66d0e52..db0c6f3 100644 --- a/Example/Example/ExampleApp.swift +++ b/Example/MuslimDataExample/MuslimDataExampleApp.swift @@ -1,7 +1,7 @@ // // -// ExampleApp.swift -// Example +// MuslimDataExampleApp.swift +// MuslimDataExample // // Created by Muhammad Azad on 23/03/2024 // Copyright © 2024 MuslimData. All rights reserved. @@ -11,7 +11,7 @@ import SwiftUI @main -struct ExampleApp: App { +struct MuslimDataExampleApp: App { var body: some Scene { WindowGroup { ContentView() diff --git a/Example/Example/Names/NamesRowView.swift b/Example/MuslimDataExample/Names/NamesRowView.swift similarity index 100% rename from Example/Example/Names/NamesRowView.swift rename to Example/MuslimDataExample/Names/NamesRowView.swift diff --git a/Example/Example/Names/NamesScreen.swift b/Example/MuslimDataExample/Names/NamesScreen.swift similarity index 100% rename from Example/Example/Names/NamesScreen.swift rename to Example/MuslimDataExample/Names/NamesScreen.swift diff --git a/Example/Example/Names/NamesViewModel.swift b/Example/MuslimDataExample/Names/NamesViewModel.swift similarity index 100% rename from Example/Example/Names/NamesViewModel.swift rename to Example/MuslimDataExample/Names/NamesViewModel.swift diff --git a/Example/Example/Preview Content/Preview Assets.xcassets/Contents.json b/Example/MuslimDataExample/Preview Content/Preview Assets.xcassets/Contents.json similarity index 100% rename from Example/Example/Preview Content/Preview Assets.xcassets/Contents.json rename to Example/MuslimDataExample/Preview Content/Preview Assets.xcassets/Contents.json diff --git a/Example/Example/Shared/AppTabs.swift b/Example/MuslimDataExample/Shared/AppTabs.swift similarity index 100% rename from Example/Example/Shared/AppTabs.swift rename to Example/MuslimDataExample/Shared/AppTabs.swift diff --git a/Example/Example/Shared/ErrorWithRetryView.swift b/Example/MuslimDataExample/Shared/ErrorWithRetryView.swift similarity index 100% rename from Example/Example/Shared/ErrorWithRetryView.swift rename to Example/MuslimDataExample/Shared/ErrorWithRetryView.swift From 46828efd532867c52c5e6842aa95963e9eb50a23 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 14:12:40 +0300 Subject: [PATCH 08/44] Update GRDB version to v6.26.0 --- Package.resolved | 15 +---- Package.swift | 8 ++- Sources/MuslimData/DB Helper/DBHelper.swift | 60 ++++++++----------- .../Repository/MuslimRepository.swift | 4 +- Tests/MuslimDataTests/PrayerTests.swift | 2 +- 5 files changed, 37 insertions(+), 52 deletions(-) diff --git a/Package.resolved b/Package.resolved index 2a0b594..fa2297b 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,22 +1,13 @@ { - "originHash" : "6b5e8dea1dfb4220663d356a716f5ce2511b938bcd3b8cd4b5e578593240140e", + "originHash" : "8c31a9ebb45254e9bc0b36d90521d6765648b8096a56e4b9d125a6ff9014239c", "pins" : [ - { - "identity" : "csqlite", - "kind" : "remoteSourceControl", - "location" : "https://github.com/groue/CSQLite.git", - "state" : { - "revision" : "3a405d0ebd8bf07d4c41a8b05a203e4d03415b5b", - "version" : "0.3.0" - } - }, { "identity" : "grdb.swift", "kind" : "remoteSourceControl", "location" : "https://github.com/groue/GRDB.swift.git", "state" : { - "revision" : "49a7b2091c84e8e695e78ada1840eda022e5dc11", - "version" : "4.0.1" + "revision" : "77b85bed259b7f107710a0b78c439b1c5839dc45", + "version" : "6.26.0" } } ], diff --git a/Package.swift b/Package.swift index 6c9befa..222634c 100644 --- a/Package.swift +++ b/Package.swift @@ -6,7 +6,11 @@ import PackageDescription let package = Package( name: "muslim-data-ios", platforms: [ - .iOS(.v13) + .iOS(.v13), + .macOS(.v12), + .tvOS(.v13), + .visionOS(.v1), + .watchOS(.v6) ], products: [ // Products define the executables and libraries a package produces, making them visible to other packages. @@ -15,7 +19,7 @@ let package = Package( targets: ["MuslimData"]), ], dependencies: [ - .package(url: "https://github.com/groue/GRDB.swift.git", exact: "4.0.1") + .package(url: "https://github.com/groue/GRDB.swift.git", exact: "6.26.0") ], targets: [ // Targets are the basic building blocks of a package, defining a module or a test suite. diff --git a/Sources/MuslimData/DB Helper/DBHelper.swift b/Sources/MuslimData/DB Helper/DBHelper.swift index fd9dd9f..86aef5a 100755 --- a/Sources/MuslimData/DB Helper/DBHelper.swift +++ b/Sources/MuslimData/DB Helper/DBHelper.swift @@ -6,41 +6,33 @@ // import GRDB -import UIKit +import Foundation class DBHelper { // MARK: - Properties + let dbName = "muslim_db_v2.0.0" var dbPool: DatabasePool? static let shared = DBHelper() + var dbPath: String { + #if SWIFT_PACKAGE + // SPM Access + return Bundle.module.path(forResource: dbName, ofType: "db")! + #else + // CocoaPods Access + return Bundle(for: DBHelper.self).path(forResource: dbName, ofType: "db")! + #endif + } + // MARK: - Life cycle private init() { var configuration = Configuration() configuration.readonly = true - let databaseURL = pathForDatabase() - dbPool = try? DatabasePool(path: databaseURL, configuration: configuration) - - // Be a nice iOS citizen, and don’t consume too much memory - // See https://github.com/groue/GRDB.swift/#memory-management - dbPool?.setupMemoryManagement(in: UIApplication.shared) - } - - //MARK: - Private Methods - - /// Provides the appropriate file path string for the muslim database, - /// taking into account whether the code is integrated using Swift Package Manager or CocoaPods. - /// - /// - Returns: A string representing the full file path to the database. - private func pathForDatabase() -> String { - #if SWIFT_PACKAGE - // SPM Access - return Bundle.module.path(forResource: "muslim_db_v2.0.0", ofType: "db")! - #else - // CocoaPods Access - return Bundle(for: DBHelper.self).path(forResource: "muslim_db_v2.0.0", ofType: "db")! - #endif + dbPool = try? DatabasePool(path: dbPath, configuration: configuration) + + dbPool?.releaseMemoryEventually() } // MARK: - Public Methods @@ -52,7 +44,7 @@ class DBHelper { /// - Returns: PrayerTime instance. func prayerTimes(location: Location, date: Date) async throws -> PrayerTime? { do { - return try dbPool?.read { dbConnect in + return try await dbPool?.read { dbConnect in let result = try Row.fetchOne(dbConnect, sql: """ SELECT * FROM prayer_time WHERE location_id = '\(location.prayerDependentId ?? location.id)' @@ -97,7 +89,7 @@ class DBHelper { /// - Returns: List of [name]? of Allah func names(language: Language) async throws -> [Name]? { do { - return try dbPool?.read { dbConnect in + return try await dbPool?.read { dbConnect in let names = try Name.fetchAll(dbConnect, sql: """ SELECT name.name , transl.name as translated FROM name @@ -118,7 +110,7 @@ class DBHelper { /// - Returns: List of [AzkarCategory]? func azkarCategories(language: Language) async throws -> [AzkarCategory]? { do { - return try dbPool?.read { dbConnect in + return try await dbPool?.read { dbConnect in let categories = try AzkarCategory.fetchAll(dbConnect, sql: """ SELECT category._id, category_name FROM azkar_category as category @@ -140,12 +132,10 @@ class DBHelper { /// - categoryId: Optional category id /// - Returns: List of [AzkarChapter]? func azkarChapters(language: Language, categoryId: Int? = nil) async throws -> [AzkarChapter]? { - var category = "" - if let categoryId = categoryId { - category = " and category_id = \(categoryId)" - } + let category = categoryId == nil ? "" : " and category_id = \(String(describing: categoryId!))" + do { - return try dbPool?.read { dbConnect in + return try await dbPool?.read { dbConnect in let chapters = try AzkarChapter.fetchAll(dbConnect, sql: """ SELECT chapter._id, category_id, chapter_name FROM azkar_chapter as chapter @@ -168,7 +158,7 @@ class DBHelper { /// - Returns: List of [AskarItem]? func azkarItems(language: Language, chapterId: Int) async throws -> [AzkarItem]? { do { - return try dbPool?.read { dbConnect in + return try await dbPool?.read { dbConnect in let items = try AzkarItem.fetchAll(dbConnect, sql: """ SELECT item._id, item.chapter_id, item.item, transl.item_translation, ref_transl.reference FROM azkar_item as item @@ -194,7 +184,7 @@ class DBHelper { /// - Returns: List of found locations public func searchLocation(_ locationName: String) async throws -> [Location]? { do { - return try dbPool?.read { dbConnect in + return try await dbPool?.read { dbConnect in let locations = try Location.fetchAll(dbConnect, sql: """ SELECT location._id as _id, country.code as country_code, country.name as country_name, location.name as name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id @@ -218,7 +208,7 @@ class DBHelper { /// - Returns: geocoded location public func geocoder(countryCode: String, locationName: String) async throws -> Location? { do { - return try dbPool?.read { dbConnect in + return try await dbPool?.read { dbConnect in let location = try Location.fetchOne(dbConnect, sql: """ SELECT location._id as _id, country.code as country_code, country.name as country_name, location.name as name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id @@ -243,7 +233,7 @@ class DBHelper { /// - Returns: reverse geocoded location public func reverseGeocoder(latitude: Double, longitude: Double) async throws -> Location? { do { - return try dbPool?.read { dbConnect in + return try await dbPool?.read { dbConnect in let location = try Location.fetchOne(dbConnect, sql: """ SELECT location._id as _id, country.code as country_code, country.name as country_name, location.name as name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id diff --git a/Sources/MuslimData/Repository/MuslimRepository.swift b/Sources/MuslimData/Repository/MuslimRepository.swift index c18b162..d6f01d5 100644 --- a/Sources/MuslimData/Repository/MuslimRepository.swift +++ b/Sources/MuslimData/Repository/MuslimRepository.swift @@ -102,7 +102,7 @@ public class MuslimRepository: Repository { } // TODO: it needs to be deleted when the tests migrated to the package itself. - public func getAllFixedPrayerLocations() async throws -> [Location]? { - return try await DBHelper.shared.fixedPrayerTimesList() + public func getAllFixedPrayerLocations() -> [Location]? { + return DBHelper.shared.fixedPrayerTimesList() } } diff --git a/Tests/MuslimDataTests/PrayerTests.swift b/Tests/MuslimDataTests/PrayerTests.swift index bd2d23b..b959991 100755 --- a/Tests/MuslimDataTests/PrayerTests.swift +++ b/Tests/MuslimDataTests/PrayerTests.swift @@ -30,7 +30,7 @@ class PrayerTests: XCTestCase { } func testAllFixedPrayerTimes() async throws { - let locations = try await MuslimRepository().getAllFixedPrayerLocations() + let locations = MuslimRepository().getAllFixedPrayerLocations() let date = Date(timeIntervalSince1970: 1_709_206_718) // 2024/02/29 for location in locations! { print(location) From 08ec3d70a6f616429cd94fe305f8b66075f99337 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 14:18:23 +0300 Subject: [PATCH 09/44] Remove scripts folder as it is not used --- scripts/push.sh | 5 ----- 1 file changed, 5 deletions(-) delete mode 100755 scripts/push.sh diff --git a/scripts/push.sh b/scripts/push.sh deleted file mode 100755 index 3f8b834..0000000 --- a/scripts/push.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source ~/.rvm/scripts/rvm -rvm use default -pod trunk push --allow-warnings From 2495f363dc2cf82fd6593997f144a25e43d3a76f Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 16:36:45 +0300 Subject: [PATCH 10/44] Improve azkar repository and tests --- Sources/MuslimData/DB Helper/DBHelper.swift | 35 +++- .../Extensions/DateExtensions.swift | 2 +- .../Extensions/SequenceExtensions.swift | 15 ++ ...xtensions.swift => StringExtensions.swift} | 0 .../Repository/MuslimRepository.swift | 21 ++- .../MuslimData/Repository/Repository.swift | 8 +- .../MuslimDataTests/AzkarCategoryTests.swift | 46 ++++++ Tests/MuslimDataTests/AzkarChapterTests.swift | 121 ++++++++++++++ Tests/MuslimDataTests/AzkarItemTests.swift | 46 ++++++ Tests/MuslimDataTests/AzkarTests.swift | 155 ------------------ Tests/MuslimDataTests/PrayerTests.swift | 2 +- 11 files changed, 276 insertions(+), 175 deletions(-) create mode 100644 Sources/MuslimData/Extensions/SequenceExtensions.swift rename Sources/MuslimData/Extensions/{String+Extensions.swift => StringExtensions.swift} (100%) create mode 100644 Tests/MuslimDataTests/AzkarCategoryTests.swift create mode 100644 Tests/MuslimDataTests/AzkarChapterTests.swift create mode 100755 Tests/MuslimDataTests/AzkarItemTests.swift delete mode 100755 Tests/MuslimDataTests/AzkarTests.swift diff --git a/Sources/MuslimData/DB Helper/DBHelper.swift b/Sources/MuslimData/DB Helper/DBHelper.swift index 86aef5a..dfb6bf1 100755 --- a/Sources/MuslimData/DB Helper/DBHelper.swift +++ b/Sources/MuslimData/DB Helper/DBHelper.swift @@ -131,8 +131,8 @@ class DBHelper { /// - language: Language of the chapter. /// - categoryId: Optional category id /// - Returns: List of [AzkarChapter]? - func azkarChapters(language: Language, categoryId: Int? = nil) async throws -> [AzkarChapter]? { - let category = categoryId == nil ? "" : " and category_id = \(String(describing: categoryId!))" + func azkarChapters(language: Language, categoryId: Int = -1) async throws -> [AzkarChapter]? { + let category = categoryId == -1 ? "" : " and category_id = \(String(describing: categoryId))" do { return try await dbPool?.read { dbConnect in @@ -150,6 +150,29 @@ class DBHelper { } } + /// Get azkar chapters from database which is localized by given language and filtered by chapter ids. + /// + /// - Parameters: + /// - language: Language of the chapter. + /// - chapterIds: Array of chapter ids + /// - Returns: List of [AzkarChapter]? + func azkarChapters(language: Language, chapterIds: [Int]) async throws -> [AzkarChapter]? { + do { + return try await dbPool?.read { dbConnect in + let chapters = try AzkarChapter.fetchAll(dbConnect, sql: """ + SELECT chapter._id, category_id, chapter_name + FROM azkar_chapter as chapter + INNER JOIN azkar_chapter_translation as transl on transl.chapter_id = chapter._id + and language = '\(language)' AND chapter._id IN (\(chapterIds.minimalDescription)) + """) + return chapters + } + } catch { + print("Error: \(error.localizedDescription)") + return nil + } + } + /// Get azkar items for specific azkar chapter from database which is localized by given language. /// /// - Parameters: @@ -182,7 +205,7 @@ class DBHelper { /// - locationName: location name /// - callback: Callback that returns a Location object. /// - Returns: List of found locations - public func searchLocation(_ locationName: String) async throws -> [Location]? { + func searchLocation(_ locationName: String) async throws -> [Location]? { do { return try await dbPool?.read { dbConnect in let locations = try Location.fetchAll(dbConnect, sql: """ @@ -206,7 +229,7 @@ class DBHelper { /// - countryCode: Country code /// - locationName: location name /// - Returns: geocoded location - public func geocoder(countryCode: String, locationName: String) async throws -> Location? { + func geocoder(countryCode: String, locationName: String) async throws -> Location? { do { return try await dbPool?.read { dbConnect in let location = try Location.fetchOne(dbConnect, sql: """ @@ -231,7 +254,7 @@ class DBHelper { /// - latitude: Location latitude. /// - longitude: Location longitude. /// - Returns: reverse geocoded location - public func reverseGeocoder(latitude: Double, longitude: Double) async throws -> Location? { + func reverseGeocoder(latitude: Double, longitude: Double) async throws -> Location? { do { return try await dbPool?.read { dbConnect in let location = try Location.fetchOne(dbConnect, sql: """ @@ -252,7 +275,7 @@ class DBHelper { /// Get all the locations that has fixed prayer times. /// - Returns: Location list - public func fixedPrayerTimesList() -> [Location]? { + func fixedPrayerTimesList() -> [Location]? { do { return try dbPool?.read { dbConnect in let locations = try Location.fetchAll(dbConnect, sql: """ diff --git a/Sources/MuslimData/Extensions/DateExtensions.swift b/Sources/MuslimData/Extensions/DateExtensions.swift index 0c3c794..a6c0bd7 100755 --- a/Sources/MuslimData/Extensions/DateExtensions.swift +++ b/Sources/MuslimData/Extensions/DateExtensions.swift @@ -9,7 +9,7 @@ import Foundation // MARK: - Date Extensions -public extension Date { +extension Date { /// Format date to "MM-dd" pattern which will be used to get prayers fro this date in the prayer database. /// diff --git a/Sources/MuslimData/Extensions/SequenceExtensions.swift b/Sources/MuslimData/Extensions/SequenceExtensions.swift new file mode 100644 index 0000000..8946350 --- /dev/null +++ b/Sources/MuslimData/Extensions/SequenceExtensions.swift @@ -0,0 +1,15 @@ +// +// File.swift +// +// +// Created by Kosrat Ahmed on 24/03/2024. +// + +import Foundation + +extension Sequence { + /// Return a string of the array values without brackets. + var minimalDescription: String { + return map { "\($0)" }.joined(separator: ", ") + } +} diff --git a/Sources/MuslimData/Extensions/String+Extensions.swift b/Sources/MuslimData/Extensions/StringExtensions.swift similarity index 100% rename from Sources/MuslimData/Extensions/String+Extensions.swift rename to Sources/MuslimData/Extensions/StringExtensions.swift diff --git a/Sources/MuslimData/Repository/MuslimRepository.swift b/Sources/MuslimData/Repository/MuslimRepository.swift index d6f01d5..2815852 100644 --- a/Sources/MuslimData/Repository/MuslimRepository.swift +++ b/Sources/MuslimData/Repository/MuslimRepository.swift @@ -87,22 +87,27 @@ public class MuslimRepository: Repository { /// - language: Language of the azkar chapters. /// - categoryId: Optional category id /// - Returns: List of [AzkarChapter]? - public func getAzkarChapters(language: Language, categoryId: Int? = nil) async throws -> [AzkarChapter]? { + public func getAzkarChapters(language: Language, categoryId: Int = -1) async throws -> [AzkarChapter]? { return try await DBHelper.shared.azkarChapters(language: language, categoryId: categoryId) } + /// Get azkar chapters from the database for the specified language and category id. + /// + /// - Parameters: + /// - language: Language of the azkar chapters. + /// - categoryId: Optional category id + /// - Returns: List of [AzkarChapter]? + public func getAzkarChapters(language: Language, chapterIds: [Int]) async throws -> [AzkarChapter]? { + return try await DBHelper.shared.azkarChapters(language: language, chapterIds: chapterIds) + } + /// Get azkar items for specific azkar chapter from database which is localized by the given language. /// /// - Parameters: - /// - language: Language of the chapter. /// - chapterId: Chapter id for the azkar items. + /// - language: Language of the chapter. /// - Returns: List of [AzkarItem]? - public func getAzkarItems(language: Language, chapterId: Int) async throws -> [AzkarItem]? { + public func getAzkarItems(chapterId: Int, language: Language) async throws -> [AzkarItem]? { return try await DBHelper.shared.azkarItems(language: language, chapterId: chapterId) } - - // TODO: it needs to be deleted when the tests migrated to the package itself. - public func getAllFixedPrayerLocations() -> [Location]? { - return DBHelper.shared.fixedPrayerTimesList() - } } diff --git a/Sources/MuslimData/Repository/Repository.swift b/Sources/MuslimData/Repository/Repository.swift index 94e875d..f3ac7fa 100644 --- a/Sources/MuslimData/Repository/Repository.swift +++ b/Sources/MuslimData/Repository/Repository.swift @@ -20,9 +20,9 @@ public protocol Repository { func getAzkarCategories(language: Language) async throws -> [AzkarCategory]? - func getAzkarChapters(language: Language, categoryId: Int?) async throws -> [AzkarChapter]? + func getAzkarChapters(language: Language, categoryId: Int) async throws -> [AzkarChapter]? + + func getAzkarChapters(language: Language, chapterIds: [Int]) async throws -> [AzkarChapter]? - func getAzkarItems(language: Language, chapterId: Int) async throws -> [AzkarItem]? - - func getAllFixedPrayerLocations() async throws -> [Location]? + func getAzkarItems(chapterId: Int, language: Language) async throws -> [AzkarItem]? } diff --git a/Tests/MuslimDataTests/AzkarCategoryTests.swift b/Tests/MuslimDataTests/AzkarCategoryTests.swift new file mode 100644 index 0000000..8ee9b19 --- /dev/null +++ b/Tests/MuslimDataTests/AzkarCategoryTests.swift @@ -0,0 +1,46 @@ +// +// File.swift +// +// +// Created by Kosrat Ahmed on 24/03/2024. +// + +@testable import MuslimData +import XCTest + +class AzkarCategoryTests: XCTestCase { + override func setUp() { + super.setUp() + } + + override func tearDown() { + super.tearDown() + } + + func testEnAzkarCategories() async throws { + try await assesAzkarCategories(language: .en) + } + + func testArAzkarCategories() async throws { + try await assesAzkarCategories(language: .ar) + } + + func testCkbAzkarCategories() async throws { + try await assesAzkarCategories(language: .ckb) + } + + func testFaAzkarCategories() async throws { + try await assesAzkarCategories(language: .fa) + } + + func testRuAzkarCategories() async throws { + try await assesAzkarCategories(language: .ru) + } + + private func assesAzkarCategories(language: Language) async throws { + let categories = try await MuslimRepository().getAzkarCategories(language: language) + XCTAssertNotNil(categories) + XCTAssertEqual(categories!.count, 11) + XCTAssertNotNil(categories![Int.random(in: 0 ..< 11)].name) + } +} diff --git a/Tests/MuslimDataTests/AzkarChapterTests.swift b/Tests/MuslimDataTests/AzkarChapterTests.swift new file mode 100644 index 0000000..ffe56c1 --- /dev/null +++ b/Tests/MuslimDataTests/AzkarChapterTests.swift @@ -0,0 +1,121 @@ +// +// File.swift +// +// +// Created by Kosrat Ahmed on 24/03/2024. +// + +@testable import MuslimData +import XCTest + +class AzkarChapterTests: XCTestCase { + override func setUp() { + super.setUp() + } + + override func tearDown() { + super.tearDown() + } + + func testEnAzkarChapters() async throws { + try await assesAzkarChapters(language: .en) + } + + func testArAzkarChapters() async throws { + try await assesAzkarChapters(language: .ar) + } + + func testCkbAzkarChapters() async throws { + try await assesAzkarChapters(language: .ckb) + } + + func testFaAzkarChapters() async throws { + try await assesAzkarChapters(language: .fa) + } + + func testRuAzkarChapters() async throws { + try await assesAzkarChapters(language: .ru) + } + + private func assesAzkarChapters(language: Language, categoryId: Int = -1, total: Int = 133) async throws { + let chapters = try await MuslimRepository().getAzkarChapters(language: language, categoryId: categoryId) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, total) + } + + func testAzkarChaptersByChapterIds() async throws { + let chapters = try await MuslimRepository().getAzkarChapters(language: .en, chapterIds: Array(1...133)) + XCTAssertNotNil(chapters) + XCTAssertEqual(chapters!.count, 133) + } + + func testEnAzkarChaptersByCategory() async throws { + try await assesAzkarChapters(language: .en, categoryId: 1, total: 7) + try await assesAzkarChapters(language: .en, categoryId: 2, total: 14) + try await assesAzkarChapters(language: .en, categoryId: 3, total: 7) + try await assesAzkarChapters(language: .en, categoryId: 4, total: 15) + try await assesAzkarChapters(language: .en, categoryId: 5, total: 11) + try await assesAzkarChapters(language: .en, categoryId: 6, total: 19) + try await assesAzkarChapters(language: .en, categoryId: 7, total: 9) + try await assesAzkarChapters(language: .en, categoryId: 8, total: 8) + try await assesAzkarChapters(language: .en, categoryId: 9, total: 20) + try await assesAzkarChapters(language: .en, categoryId: 10, total: 10) + try await assesAzkarChapters(language: .en, categoryId: 11, total: 13) + } + + func testArAzkarChaptersByCategory() async throws { + try await assesAzkarChapters(language: .ar, categoryId: 1, total: 7) + try await assesAzkarChapters(language: .ar, categoryId: 2, total: 14) + try await assesAzkarChapters(language: .ar, categoryId: 3, total: 7) + try await assesAzkarChapters(language: .ar, categoryId: 4, total: 15) + try await assesAzkarChapters(language: .ar, categoryId: 5, total: 11) + try await assesAzkarChapters(language: .ar, categoryId: 6, total: 19) + try await assesAzkarChapters(language: .ar, categoryId: 7, total: 9) + try await assesAzkarChapters(language: .ar, categoryId: 8, total: 8) + try await assesAzkarChapters(language: .ar, categoryId: 9, total: 20) + try await assesAzkarChapters(language: .ar, categoryId: 10, total: 10) + try await assesAzkarChapters(language: .ar, categoryId: 11, total: 13) + } + + func testCkbAzkarChaptersByCategory() async throws { + try await assesAzkarChapters(language: .ckb, categoryId: 1, total: 7) + try await assesAzkarChapters(language: .ckb, categoryId: 2, total: 14) + try await assesAzkarChapters(language: .ckb, categoryId: 3, total: 7) + try await assesAzkarChapters(language: .ckb, categoryId: 4, total: 15) + try await assesAzkarChapters(language: .ckb, categoryId: 5, total: 11) + try await assesAzkarChapters(language: .ckb, categoryId: 6, total: 19) + try await assesAzkarChapters(language: .ckb, categoryId: 7, total: 9) + try await assesAzkarChapters(language: .ckb, categoryId: 8, total: 8) + try await assesAzkarChapters(language: .ckb, categoryId: 9, total: 20) + try await assesAzkarChapters(language: .ckb, categoryId: 10, total: 10) + try await assesAzkarChapters(language: .ckb, categoryId: 11, total: 13) + } + + func testFaAzkarChaptersByCategory() async throws { + try await assesAzkarChapters(language: .fa, categoryId: 1, total: 7) + try await assesAzkarChapters(language: .fa, categoryId: 2, total: 14) + try await assesAzkarChapters(language: .fa, categoryId: 3, total: 7) + try await assesAzkarChapters(language: .fa, categoryId: 4, total: 15) + try await assesAzkarChapters(language: .fa, categoryId: 5, total: 11) + try await assesAzkarChapters(language: .fa, categoryId: 6, total: 19) + try await assesAzkarChapters(language: .fa, categoryId: 7, total: 9) + try await assesAzkarChapters(language: .fa, categoryId: 8, total: 8) + try await assesAzkarChapters(language: .fa, categoryId: 9, total: 20) + try await assesAzkarChapters(language: .fa, categoryId: 10, total: 10) + try await assesAzkarChapters(language: .fa, categoryId: 11, total: 13) + } + + func testRuAzkarChaptersByCategory() async throws { + try await assesAzkarChapters(language: .ru, categoryId: 1, total: 7) + try await assesAzkarChapters(language: .ru, categoryId: 2, total: 14) + try await assesAzkarChapters(language: .ru, categoryId: 3, total: 7) + try await assesAzkarChapters(language: .ru, categoryId: 4, total: 15) + try await assesAzkarChapters(language: .ru, categoryId: 5, total: 11) + try await assesAzkarChapters(language: .ru, categoryId: 6, total: 19) + try await assesAzkarChapters(language: .ru, categoryId: 7, total: 9) + try await assesAzkarChapters(language: .ru, categoryId: 8, total: 8) + try await assesAzkarChapters(language: .ru, categoryId: 9, total: 20) + try await assesAzkarChapters(language: .ru, categoryId: 10, total: 10) + try await assesAzkarChapters(language: .ru, categoryId: 11, total: 13) + } +} diff --git a/Tests/MuslimDataTests/AzkarItemTests.swift b/Tests/MuslimDataTests/AzkarItemTests.swift new file mode 100755 index 0000000..c0778dd --- /dev/null +++ b/Tests/MuslimDataTests/AzkarItemTests.swift @@ -0,0 +1,46 @@ +// +// AzkarTests.swift +// MuslimData_Tests +// +// Created by Kosrat D. Ahmad on 10/13/18. +// Copyright © 2018 CocoaPods. All rights reserved. +// + +@testable import MuslimData +import XCTest + +class AzkarItemTests: XCTestCase { + override func setUp() { + super.setUp() + } + + override func tearDown() { + super.tearDown() + } + + func testEnAzkarItems() async throws { + try await assesAzkarItems(language: .en, id: 1, total: 4) + } + + func testArAzkarItems() async throws { + try await assesAzkarItems(language: .ar, id: 25, total: 8) + } + + func testCkbAzkarItems() async throws { + try await assesAzkarItems(language: .ckb, id: 50, total: 2) + } + + func testFaAzkarItems() async throws { + try await assesAzkarItems(language: .fa, id: 75, total: 1) + } + + func testRuAzkarItems() async throws { + try await assesAzkarItems(language: .ru, id: 100, total: 1) + } + + func assesAzkarItems(language: Language, id: Int, total: Int) async throws { + let items = try await MuslimRepository().getAzkarItems(chapterId: id, language: language) + XCTAssertNotNil(items) + XCTAssertEqual(items!.count, total) + } +} diff --git a/Tests/MuslimDataTests/AzkarTests.swift b/Tests/MuslimDataTests/AzkarTests.swift deleted file mode 100755 index 6a887af..0000000 --- a/Tests/MuslimDataTests/AzkarTests.swift +++ /dev/null @@ -1,155 +0,0 @@ -// -// AzkarTests.swift -// MuslimData_Tests -// -// Created by Kosrat D. Ahmad on 10/13/18. -// Copyright © 2018 CocoaPods. All rights reserved. -// - -@testable import MuslimData -import XCTest - -class AzkarTests: XCTestCase { - override func setUp() { - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testEnAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .en) - assesAzkarCategories(categories: categories) - } - - func testArAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .ar) - assesAzkarCategories(categories: categories) - } - - func testCkbAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .ckb) - assesAzkarCategories(categories: categories) - } - - func testFaAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .fa) - assesAzkarCategories(categories: categories) - } - - func testRuAzkarCategories() async throws { - let categories = try await MuslimRepository().getAzkarCategories(language: .ru) - assesAzkarCategories(categories: categories) - } - - private func assesAzkarCategories(categories: [AzkarCategory]?) { - XCTAssertNotNil(categories) - XCTAssertEqual(categories!.count, 11) - XCTAssertNotNil(categories![Int.random(in: 0 ..< 11)].name) - } - - func testEnAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .en) - assesAzkarChapters(chapters: chapters) - } - - func testArAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .ar) - assesAzkarChapters(chapters: chapters) - } - - func testCkbAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .ckb) - assesAzkarChapters(chapters: chapters) - } - - func testFaAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .fa) - assesAzkarChapters(chapters: chapters) - } - - func testRuAzkarChapters() async throws { - let chapters = try await MuslimRepository().getAzkarChapters(language: .ru) - assesAzkarChapters(chapters: chapters) - } - - private func assesAzkarChapters(chapters: [AzkarChapter]?) { - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 133) - } - - func testAzkarChaptersByCategory() async throws { - // Test English azkar chapters for category id = 1 - var chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 1) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 7) - - // Test English azkar chapters for category id = 2 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 2) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 14) - - // Test English azkar chapters for category id = 3 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 3) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 7) - - // Test English azkar chapters for category id = 4 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 4) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 15) - - // Test English azkar chapters for category id = 5 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 5) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 11) - - // Test English azkar chapters for category id = 6 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 6) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 19) - - // Test English azkar chapters for category id = 7 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 7) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 9) - - // Test English azkar chapters for category id = 8 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 8) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 8) - - // Test English azkar chapters for category id = 9 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 9) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 20) - - // Test English azkar chapters for category id = 10 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 10) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 10) - - // Test English azkar chapters for category id = 11 - chapters = try await MuslimRepository().getAzkarChapters(language: .en, categoryId: 11) - XCTAssertNotNil(chapters) - XCTAssertEqual(chapters!.count, 13) - } - - func testAzkarItems() async throws { - // Test English azkar items for chapter id = 1 - var items = try await MuslimRepository().getAzkarItems(language: .en, chapterId: 1) - XCTAssertNotNil(items) - XCTAssertEqual(items!.count, 4) - - // Test English azkar items for chapter id = 10 - items = try await MuslimRepository().getAzkarItems(language: .en, chapterId: 10) - XCTAssertNotNil(items) - XCTAssertEqual(items!.count, 2) - - // Test English azkar items for chapter id = 100 - items = try await MuslimRepository().getAzkarItems(language: .en, chapterId: 100) - XCTAssertNotNil(items) - XCTAssertEqual(items!.count, 1) - } -} diff --git a/Tests/MuslimDataTests/PrayerTests.swift b/Tests/MuslimDataTests/PrayerTests.swift index b959991..7ba169c 100755 --- a/Tests/MuslimDataTests/PrayerTests.swift +++ b/Tests/MuslimDataTests/PrayerTests.swift @@ -30,7 +30,7 @@ class PrayerTests: XCTestCase { } func testAllFixedPrayerTimes() async throws { - let locations = MuslimRepository().getAllFixedPrayerLocations() + let locations = DBHelper.shared.fixedPrayerTimesList() let date = Date(timeIntervalSince1970: 1_709_206_718) // 2024/02/29 for location in locations! { print(location) From 60a064b4dd1485fae2a005d575995e26b3e269d2 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 16:49:20 +0300 Subject: [PATCH 11/44] Move language to outside of the name folder --- Sources/MuslimData/Models/{Names => }/Language.swift | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Sources/MuslimData/Models/{Names => }/Language.swift (100%) diff --git a/Sources/MuslimData/Models/Names/Language.swift b/Sources/MuslimData/Models/Language.swift similarity index 100% rename from Sources/MuslimData/Models/Names/Language.swift rename to Sources/MuslimData/Models/Language.swift From eaf3dc6fddbd13181baed47384e0e68abe58e251 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 16:49:39 +0300 Subject: [PATCH 12/44] Format database queries --- Sources/MuslimData/DB Helper/DBHelper.swift | 64 ++++++++++----------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/Sources/MuslimData/DB Helper/DBHelper.swift b/Sources/MuslimData/DB Helper/DBHelper.swift index dfb6bf1..523eb90 100755 --- a/Sources/MuslimData/DB Helper/DBHelper.swift +++ b/Sources/MuslimData/DB Helper/DBHelper.swift @@ -48,7 +48,7 @@ class DBHelper { let result = try Row.fetchOne(dbConnect, sql: """ SELECT * FROM prayer_time WHERE location_id = '\(location.prayerDependentId ?? location.id)' - and date = '\(date.toDBDate())' + AND date = '\(date.toDBDate())' """) guard let row = result else { @@ -91,9 +91,9 @@ class DBHelper { do { return try await dbPool?.read { dbConnect in let names = try Name.fetchAll(dbConnect, sql: """ - SELECT name.name , transl.name as translated + SELECT name.name , transl.name AS translated FROM name - INNER JOIN name_translation as transl on transl.name_id = name._id and transl.language = '\(language)' + INNER JOIN name_translation AS transl ON transl.name_id = name._id AND transl.language = '\(language)' """) return names } @@ -113,9 +113,9 @@ class DBHelper { return try await dbPool?.read { dbConnect in let categories = try AzkarCategory.fetchAll(dbConnect, sql: """ SELECT category._id, category_name - FROM azkar_category as category - INNER JOIN azkar_category_translation as transl on transl.category_id = category._id - and language = '\(language)' + FROM azkar_category AS category + INNER JOIN azkar_category_translation AS transl ON transl.category_id = category._id + AND language = '\(language)' """) return categories } @@ -132,15 +132,15 @@ class DBHelper { /// - categoryId: Optional category id /// - Returns: List of [AzkarChapter]? func azkarChapters(language: Language, categoryId: Int = -1) async throws -> [AzkarChapter]? { - let category = categoryId == -1 ? "" : " and category_id = \(String(describing: categoryId))" + let category = categoryId == -1 ? "" : " AND category_id = \(String(describing: categoryId))" do { return try await dbPool?.read { dbConnect in let chapters = try AzkarChapter.fetchAll(dbConnect, sql: """ SELECT chapter._id, category_id, chapter_name - FROM azkar_chapter as chapter - INNER JOIN azkar_chapter_translation as transl on transl.chapter_id = chapter._id - and language = '\(language)' \(category) + FROM azkar_chapter AS chapter + INNER JOIN azkar_chapter_translation AS transl ON transl.chapter_id = chapter._id + AND language = '\(language)' \(category) """) return chapters } @@ -161,9 +161,9 @@ class DBHelper { return try await dbPool?.read { dbConnect in let chapters = try AzkarChapter.fetchAll(dbConnect, sql: """ SELECT chapter._id, category_id, chapter_name - FROM azkar_chapter as chapter - INNER JOIN azkar_chapter_translation as transl on transl.chapter_id = chapter._id - and language = '\(language)' AND chapter._id IN (\(chapterIds.minimalDescription)) + FROM azkar_chapter AS chapter + INNER JOIN azkar_chapter_translation AS transl ON transl.chapter_id = chapter._id + AND language = '\(language)' AND chapter._id IN (\(chapterIds.minimalDescription)) """) return chapters } @@ -184,12 +184,12 @@ class DBHelper { return try await dbPool?.read { dbConnect in let items = try AzkarItem.fetchAll(dbConnect, sql: """ SELECT item._id, item.chapter_id, item.item, transl.item_translation, ref_transl.reference - FROM azkar_item as item - INNER JOIN azkar_item_translation as transl on transl.item_id = item._id - and transl.language = '\(language)' and item.chapter_id = \(chapterId) - INNER JOIN azkar_reference as ref on ref.item_id = item._id - INNER JOIN azkar_reference_translation as ref_transl on ref_transl.reference_id = ref._id - and ref_transl.language = '\(language)' + FROM azkar_item AS item + INNER JOIN azkar_item_translation AS transl ON transl.item_id = item._id + AND transl.language = '\(language)' AND item.chapter_id = \(chapterId) + INNER JOIN azkar_reference AS ref ON ref.item_id = item._id + INNER JOIN azkar_reference_translation AS ref_transl ON ref_transl.reference_id = ref._id + AND ref_transl.language = '\(language)' """) return items } @@ -209,10 +209,10 @@ class DBHelper { do { return try await dbPool?.read { dbConnect in let locations = try Location.fetchAll(dbConnect, sql: """ - SELECT location._id as _id, country.code as country_code, country.name as country_name, - location.name as name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id + SELECT location._id AS _id, country.code AS country_code, country.name AS country_name, + location.name AS name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id FROM location - INNER JOIN country on country._id = location.country_id + INNER JOIN country ON country._id = location.country_id WHERE location.name like '\(locationName)%' """) return locations @@ -233,12 +233,12 @@ class DBHelper { do { return try await dbPool?.read { dbConnect in let location = try Location.fetchOne(dbConnect, sql: """ - SELECT location._id as _id, country.code as country_code, country.name as country_name, - location.name as name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id + SELECT location._id AS _id, country.code AS country_code, country.name AS country_name, + location.name AS name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id FROM location - INNER JOIN country on country._id = location.country_id + INNER JOIN country ON country._id = location.country_id WHERE country.code = '\(countryCode)' COLLATE NOCASE - and location.name = '\(locationName)' COLLATE NOCASE + AND location.name = '\(locationName)' COLLATE NOCASE """) return location } @@ -258,10 +258,10 @@ class DBHelper { do { return try await dbPool?.read { dbConnect in let location = try Location.fetchOne(dbConnect, sql: """ - SELECT location._id as _id, country.code as country_code, country.name as country_name, - location.name as name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id + SELECT location._id AS _id, country.code AS country_code, country.name AS country_name, + location.name AS name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id FROM location - INNER JOIN country on country._id = location.country_id + INNER JOIN country ON country._id = location.country_id ORDER BY abs(latitude - (\(latitude))) + abs(longitude - (\(longitude))) LIMIT 1 """) @@ -279,10 +279,10 @@ class DBHelper { do { return try dbPool?.read { dbConnect in let locations = try Location.fetchAll(dbConnect, sql: """ - SELECT location._id as _id, country.code as country_code, country.name as country_name, - location.name as name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id + SELECT location._id AS _id, country.code AS country_code, country.name AS country_name, + location.name AS name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id FROM location - INNER JOIN country on country._id = location.country_id + INNER JOIN country ON country._id = location.country_id WHERE has_fixed_prayer_time=1 """) return locations From b64a126a34b712268d97f546564cfd200ed15716 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 16:53:19 +0300 Subject: [PATCH 13/44] Format database queries --- Sources/MuslimData/DB Helper/DBHelper.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Sources/MuslimData/DB Helper/DBHelper.swift b/Sources/MuslimData/DB Helper/DBHelper.swift index 523eb90..0208c3d 100755 --- a/Sources/MuslimData/DB Helper/DBHelper.swift +++ b/Sources/MuslimData/DB Helper/DBHelper.swift @@ -11,7 +11,7 @@ import Foundation class DBHelper { // MARK: - Properties - let dbName = "muslim_db_v2.0.0" + private let dbName = "muslim_db_v2.0.0" var dbPool: DatabasePool? static let shared = DBHelper() @@ -91,7 +91,7 @@ class DBHelper { do { return try await dbPool?.read { dbConnect in let names = try Name.fetchAll(dbConnect, sql: """ - SELECT name.name , transl.name AS translated + SELECT name.name, transl.name AS translated FROM name INNER JOIN name_translation AS transl ON transl.name_id = name._id AND transl.language = '\(language)' """) @@ -125,8 +125,8 @@ class DBHelper { } } - /// Get azkar chapters from database which is localized by given language. - /// + /// Get azkar chapters from database which is localized by given language and filtered by category id. + /// /// - Parameters: /// - language: Language of the chapter. /// - categoryId: Optional category id @@ -262,7 +262,7 @@ class DBHelper { location.name AS name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id FROM location INNER JOIN country ON country._id = location.country_id - ORDER BY abs(latitude - (\(latitude))) + abs(longitude - (\(longitude))) + ORDER BY ABS(latitude - (\(latitude))) + ABS(longitude - (\(longitude))) LIMIT 1 """) return location @@ -283,7 +283,7 @@ class DBHelper { location.name AS name, latitude, longitude, has_fixed_prayer_time, prayer_dependent_id FROM location INNER JOIN country ON country._id = location.country_id - WHERE has_fixed_prayer_time=1 + WHERE has_fixed_prayer_time = 1 """) return locations } From 7c2513656cac827823cfcab98bcca4a7426ad0eb Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 16:54:26 +0300 Subject: [PATCH 14/44] Format extension files --- Sources/MuslimData/Extensions/DateExtensions.swift | 2 -- Sources/MuslimData/Extensions/StringExtensions.swift | 2 -- 2 files changed, 4 deletions(-) diff --git a/Sources/MuslimData/Extensions/DateExtensions.swift b/Sources/MuslimData/Extensions/DateExtensions.swift index a6c0bd7..e627ec3 100755 --- a/Sources/MuslimData/Extensions/DateExtensions.swift +++ b/Sources/MuslimData/Extensions/DateExtensions.swift @@ -7,8 +7,6 @@ import Foundation -// MARK: - Date Extensions - extension Date { /// Format date to "MM-dd" pattern which will be used to get prayers fro this date in the prayer database. diff --git a/Sources/MuslimData/Extensions/StringExtensions.swift b/Sources/MuslimData/Extensions/StringExtensions.swift index fda8c0e..d98666e 100755 --- a/Sources/MuslimData/Extensions/StringExtensions.swift +++ b/Sources/MuslimData/Extensions/StringExtensions.swift @@ -7,8 +7,6 @@ import Foundation -// MARK: - String Extensions - extension String { /// Convert string time to date object. /// From 13e0da43e8e703ff11e8e642500b4a6902323ffe Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 16:59:11 +0300 Subject: [PATCH 15/44] Remove internal access as it is a default access --- Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift b/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift index 653f017..5bbe561 100755 --- a/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift +++ b/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift @@ -23,7 +23,7 @@ public struct PrayerTime { /// Apply offests to the current prayer times. /// /// - Parameter offsets: List of double values as prayer offsets. - internal mutating func applyOffsets(_ offsets: [Double]) { + mutating func applyOffsets(_ offsets: [Double]) { fajr = fajr.addMinutes(offsets[0]) sunrise = sunrise.addMinutes(offsets[1]) dhuhr = dhuhr.addMinutes(offsets[2]) @@ -33,7 +33,7 @@ public struct PrayerTime { } /// Apply daylight saving time to the current prayer times. - internal mutating func applyDST() { + mutating func applyDST() { let isDST = TimeZone.current.isDaylightSavingTime() if isDST { From 8f1f2cf4aa489c14d294d8b85367cb6c0a9ec309 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 17:03:23 +0300 Subject: [PATCH 16/44] Refactor names of allah tests --- Tests/MuslimDataTests/NamesTest.swift | 29 ++++++++++++--------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Tests/MuslimDataTests/NamesTest.swift b/Tests/MuslimDataTests/NamesTest.swift index 4e245b1..b055e4a 100755 --- a/Tests/MuslimDataTests/NamesTest.swift +++ b/Tests/MuslimDataTests/NamesTest.swift @@ -18,32 +18,29 @@ class NamesTest: XCTestCase { // Put teardown code here. This method is called after the invocation of each test method in the class. } - func testEnglishNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .en) - assesNames(names: names) + func testEnNamesOfAllah() async throws { + try await assesNames(language: .en) } - func testArabicNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .ar) - assesNames(names: names) + func testArNamesOfAllah() async throws { + try await assesNames(language: .ar) } - func testKurdishNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .ckb) - assesNames(names: names) + func testCkbNamesOfAllah() async throws { + try await assesNames(language: .ckb) } - func testFarsiNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .fa) - assesNames(names: names) + func testFaNamesOfAllah() async throws { + try await assesNames(language: .fa) + } - func testRussianNames() async throws { - let names = try await MuslimRepository().getNamesOfAllah(language: .ru) - assesNames(names: names) + func testRuNamesOfAllah() async throws { + try await assesNames(language: .ru) } - private func assesNames(names: [Name]?) { + private func assesNames(language: Language) async throws { + let names = try await MuslimRepository().getNamesOfAllah(language: language) XCTAssertNotNil(names) XCTAssertEqual(names!.count, 99) } From 264d9a59f661670b26777a80cac1ced9ae5762a6 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 20:00:09 +0300 Subject: [PATCH 17/44] Improve prayer times tests --- .../{PrayerTests.swift => PrayerTimesTests.swift} | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) rename Tests/MuslimDataTests/{PrayerTests.swift => PrayerTimesTests.swift} (84%) diff --git a/Tests/MuslimDataTests/PrayerTests.swift b/Tests/MuslimDataTests/PrayerTimesTests.swift similarity index 84% rename from Tests/MuslimDataTests/PrayerTests.swift rename to Tests/MuslimDataTests/PrayerTimesTests.swift index 7ba169c..fdeb81a 100755 --- a/Tests/MuslimDataTests/PrayerTests.swift +++ b/Tests/MuslimDataTests/PrayerTimesTests.swift @@ -11,22 +11,17 @@ import XCTest class PrayerTests: XCTestCase { var attributes: PrayerAttribute! - var date: Date! var offsets: [Double]! override func setUp() { super.setUp() - // Put setup code here. This method is called before the invocation of each test method in the class. - date = Date(timeIntervalSince1970: 1_538_956_800) // 2018/10/08 offsets = [1, 1, 1, -1, -1, -1] attributes = PrayerAttribute(method: .makkah, asrMethod: .shafii, adjustAngle: .angleBased, offsets: offsets) } override func tearDown() { - date = nil attributes = nil super.tearDown() - // Put teardown code here. This method is called after the invocation of each test method in the class. } func testAllFixedPrayerTimes() async throws { @@ -43,6 +38,7 @@ class PrayerTests: XCTestCase { // Test calculated prayer times for Mecca, Saudi Arabia let mecca = Location(id: 119_496, name: "Mecca", latitude: 21.42664, longitude: 39.82563, countryCode: "SA", countryName: "Saudi Arabia", hasFixedPrayerTime: false, prayerDependentId: nil) + let date = Date(timeIntervalSince1970: 1_538_956_800) // 2018/10/08 let prayer = try await MuslimRepository().getPrayerTimes(location: mecca, date: date, attributes: attributes) XCTAssertNotNil(prayer) From 8a5a30adf9e3aaeb04ed48492c74c9ae8fb2e20b Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 21:27:55 +0300 Subject: [PATCH 18/44] Add unit tests to date format and prayers --- .../Extensions/DateExtensions.swift | 27 +++++--- .../Models/PrayerTimes/PrayerTime.swift | 19 +++++- Tests/MuslimDataTests/DateFormatTests.swift | 64 +++++++++++++++++++ Tests/MuslimDataTests/NamesTest.swift | 4 +- Tests/MuslimDataTests/PrayerTests.swift | 54 ++++++++++++++++ Tests/MuslimDataTests/PrayerTimesTests.swift | 2 +- Tests/MuslimDataTests/Utils/TestUtils.swift | 49 ++++++++++++++ 7 files changed, 205 insertions(+), 14 deletions(-) create mode 100644 Tests/MuslimDataTests/DateFormatTests.swift create mode 100644 Tests/MuslimDataTests/PrayerTests.swift create mode 100644 Tests/MuslimDataTests/Utils/TestUtils.swift diff --git a/Sources/MuslimData/Extensions/DateExtensions.swift b/Sources/MuslimData/Extensions/DateExtensions.swift index e627ec3..40188af 100755 --- a/Sources/MuslimData/Extensions/DateExtensions.swift +++ b/Sources/MuslimData/Extensions/DateExtensions.swift @@ -23,19 +23,30 @@ extension Date { /// /// - Parameter format: TimeFormat object. /// - Returns: Formatted date to string time. - func toTime(format: TimeFormat) -> String { - let dateFormatter = DateFormatter() - switch format { + func format(format: TimeFormat, locale: Locale) -> String { + return switch format { case .time24: - dateFormatter.dateFormat = "HH:mm" - dateFormatter.locale = Locale(identifier: "en_GB") + formatTime24(locale: locale) case .time12: - dateFormatter.dateFormat = "hh:mm a" - dateFormatter.locale = Locale(identifier: "en_US_POSIX") + formatTime12(locale: locale) } - return dateFormatter.string(from: self) + } + private func formatTime24(locale: Locale) -> String { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "HH:mm" + dateFormatter.locale = locale + return dateFormatter.string(from: self) + } + + private func formatTime12(locale: Locale) -> String { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "hh:mm a" + dateFormatter.locale = locale + return dateFormatter.string(from: self) + } + /// Add minutes to the date. /// /// - Parameter minutes: minutes to be added to the date. diff --git a/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift b/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift index 5bbe561..a402120 100755 --- a/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift +++ b/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift @@ -53,9 +53,13 @@ public struct PrayerTime { /// /// - Parameter format: TimeFormat instance. /// - Returns: Array of formatted prayer times - public func formatPrayers(_ format: TimeFormat) -> [String] { - [fajr.toTime(format: format), sunrise.toTime(format: format), dhuhr.toTime(format: format), - asr.toTime(format: format), maghrib.toTime(format: format), isha.toTime(format: format)] + public func formatPrayers(_ format: TimeFormat, locale: Locale = Locale(identifier: "en_US")) -> [String] { + [fajr.format(format: format, locale: locale), + sunrise.format(format: format, locale: locale), + dhuhr.format(format: format, locale: locale), + asr.format(format: format, locale: locale), + maghrib.format(format: format, locale: locale), + isha.format(format: format, locale: locale)] } /// Get next prayer index and if all prayer times passed it will return 0. @@ -100,4 +104,13 @@ public struct PrayerTime { let seconds = Int(time) % 60 return String(format: "%02i:%02i:%02i", hours, minutes, seconds) } + + public subscript(index: Int) -> Date { + let prayers = [fajr, sunrise, dhuhr, asr, maghrib, isha] + return if (index < 0) { + prayers[5] + } else { + prayers[index] + } + } } diff --git a/Tests/MuslimDataTests/DateFormatTests.swift b/Tests/MuslimDataTests/DateFormatTests.swift new file mode 100644 index 0000000..73f4667 --- /dev/null +++ b/Tests/MuslimDataTests/DateFormatTests.swift @@ -0,0 +1,64 @@ +// +// File.swift +// +// +// Created by Kosrat Ahmed on 24/03/2024. +// + +@testable import MuslimData +import XCTest + +class DateFormatTests: XCTestCase { + override func setUp() { + super.setUp() + } + + override func tearDown() { + super.tearDown() + } + + func testToDBDate() { + XCTAssertEqual(TestUtils.getDate().toDBDate(), "03-11") + } + + func testEnFormatTime24() { + XCTAssertEqual(TestUtils.getDate().format(format: .time24, locale: Locale(identifier: "en_US")), "10:10") + } + + func testArFormatTime24() { + XCTAssertEqual(TestUtils.getDate().format(format: .time24, locale: Locale(identifier: "ar")), "١٠:١٠") + } + + func testCkbFormatTime24() { + XCTAssertEqual(TestUtils.getDate().format(format: .time24, locale: Locale(identifier: "ckb")), "١٠:١٠") + } + + func testEnFormatTime12() { + XCTAssertEqual(TestUtils.getDate().format(format: .time12, locale: Locale(identifier: "en_US")), "10:10 AM") + XCTAssertEqual(TestUtils.getDate().addHours(12).format(format: .time12, locale: Locale(identifier: "en_US")), "10:10 PM") + } + + func testArFormatTime12() { + XCTAssertEqual(TestUtils.getDate().format(format: .time12, locale: Locale(identifier: "ar")), "١٠:١٠ ص") + XCTAssertEqual(TestUtils.getDate().addHours(12).format(format: .time12, locale: Locale(identifier: "ar")), "١٠:١٠ م") + } + + func testCkbFormatTime12() { + XCTAssertEqual(TestUtils.getDate().format(format: .time12, locale: Locale(identifier: "ckb")), "١٠:١٠ ب.ن") + XCTAssertEqual(TestUtils.getDate().addHours(12).format(format: .time12, locale: Locale(identifier: "ckb")), "١٠:١٠ د.ن") + } + + func testStringToDate() { + let actualDate = TestUtils.getDate(year: 2024, month: 3, day: 11, hour: 15, minute: 15, second: 0) + XCTAssertEqual("15:15".toDate(TestUtils.getDate()), actualDate) + XCTAssertEqual("10:10".toDate(TestUtils.getDate(hour: 11, minute: 15)), TestUtils.getDate()) + } + + func testAddHoursToDate() { + XCTAssertEqual(TestUtils.getDate().addHours(5), TestUtils.getDate(hour: 15)) + } + + func testAddMinutesToDate() { + XCTAssertEqual(TestUtils.getDate().addMinutes(5), TestUtils.getDate(minute: 15)) + } +} diff --git a/Tests/MuslimDataTests/NamesTest.swift b/Tests/MuslimDataTests/NamesTest.swift index b055e4a..e37449a 100755 --- a/Tests/MuslimDataTests/NamesTest.swift +++ b/Tests/MuslimDataTests/NamesTest.swift @@ -11,11 +11,11 @@ import XCTest class NamesTest: XCTestCase { override func setUp() { - // Put setup code here. This method is called before the invocation of each test method in the class. + super.setUp() } override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() } func testEnNamesOfAllah() async throws { diff --git a/Tests/MuslimDataTests/PrayerTests.swift b/Tests/MuslimDataTests/PrayerTests.swift new file mode 100644 index 0000000..bfd850c --- /dev/null +++ b/Tests/MuslimDataTests/PrayerTests.swift @@ -0,0 +1,54 @@ +// +// File.swift +// +// +// Created by Kosrat Ahmed on 24/03/2024. +// + +@testable import MuslimData +import XCTest + +class PrayerTests: XCTestCase { + override func setUp() { + super.setUp() + } + + override func tearDown() { + super.tearDown() + } + + func testPrayerTimesOffset() { + var prayer = TestUtils.getPrayers() + prayer.applyOffsets([1, 2, 3, 2, 1, 5]) + + XCTAssertEqual(prayer.fajr, TestUtils.getDate(hour: 5, minute: 1, second: 0)) + XCTAssertEqual(prayer.sunrise, TestUtils.getDate(hour: 7, minute: 2, second: 0)) + XCTAssertEqual(prayer.dhuhr, TestUtils.getDate(hour: 12, minute: 3, second: 0)) + XCTAssertEqual(prayer.asr, TestUtils.getDate(hour: 15, minute: 2, second: 0)) + XCTAssertEqual(prayer.maghrib, TestUtils.getDate(hour: 18, minute: 1, second: 0)) + XCTAssertEqual(prayer.isha, TestUtils.getDate(hour: 19, minute: 5, second: 0)) + } + + func testFormatPrayers() { + let prayer = TestUtils.getPrayers() + let formattedPrayers = prayer.formatPrayers(.time12, locale: Locale(identifier: "en_US")) + + XCTAssertEqual(formattedPrayers[0], "05:00 AM") + XCTAssertEqual(formattedPrayers[1], "07:00 AM") + XCTAssertEqual(formattedPrayers[2], "12:00 PM") + XCTAssertEqual(formattedPrayers[3], "03:00 PM") + XCTAssertEqual(formattedPrayers[4], "06:00 PM") + XCTAssertEqual(formattedPrayers[5], "07:00 PM") + } + + func testPrayerSubscripts() { + let prayer = TestUtils.getPrayers() + + XCTAssertEqual(prayer[0], TestUtils.getDate(hour: 5, minute: 0, second: 0)) + XCTAssertEqual(prayer[1], TestUtils.getDate(hour: 7, minute: 0, second: 0)) + XCTAssertEqual(prayer[2], TestUtils.getDate(hour: 12, minute: 0, second: 0)) + XCTAssertEqual(prayer[3], TestUtils.getDate(hour: 15, minute: 0, second: 0)) + XCTAssertEqual(prayer[4], TestUtils.getDate(hour: 18, minute: 0, second: 0)) + XCTAssertEqual(prayer[5], TestUtils.getDate(hour: 19, minute: 0, second: 0)) + } +} diff --git a/Tests/MuslimDataTests/PrayerTimesTests.swift b/Tests/MuslimDataTests/PrayerTimesTests.swift index fdeb81a..2987b2e 100755 --- a/Tests/MuslimDataTests/PrayerTimesTests.swift +++ b/Tests/MuslimDataTests/PrayerTimesTests.swift @@ -9,7 +9,7 @@ @testable import MuslimData import XCTest -class PrayerTests: XCTestCase { +class PrayerTimesTests: XCTestCase { var attributes: PrayerAttribute! var offsets: [Double]! diff --git a/Tests/MuslimDataTests/Utils/TestUtils.swift b/Tests/MuslimDataTests/Utils/TestUtils.swift new file mode 100644 index 0000000..304cc25 --- /dev/null +++ b/Tests/MuslimDataTests/Utils/TestUtils.swift @@ -0,0 +1,49 @@ +// +// File.swift +// +// +// Created by Kosrat Ahmed on 24/03/2024. +// + +@testable import MuslimData +import Foundation + +struct TestUtils { + /// Generate date (2024/3/11 10:10:00). Also, gets value for each portion of the date. + static func getDate( + year: Int = 2024, + month: Int = 3, + day: Int = 11, + hour: Int = 10, + minute: Int = 10, + second: Int = 0 + ) -> Date { + var components = DateComponents() + components.year = year + components.month = month + components.day = day + components.hour = hour + components.minute = minute + components.second = second + + return Calendar.current.date(from: components)! + } + + /// Generate a prayer time with following times: + /// Fajr = 05:00 + /// Sunrise = 07:00 + /// Dhuhr = 12:00 + /// Asr = 15:00 + /// Maghrib = 18:00 + /// Isha = 19:00 + static func getPrayers() -> PrayerTime { + return PrayerTime( + fajr: getDate(hour: 5, minute: 0, second: 0), + sunrise: getDate(hour: 7, minute: 0, second: 0), + dhuhr: getDate(hour: 12, minute: 0, second: 0), + asr: getDate(hour: 15, minute: 0, second: 0), + maghrib: getDate(hour: 18, minute: 0, second: 0), + isha: getDate(hour: 19, minute: 0, second: 0) + ) + } +} From 5029245571eff2f269d30fc3f4cd8b3bc11db373 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 21:39:08 +0300 Subject: [PATCH 19/44] Rearrange test files in the folders --- Tests/MuslimDataTests/{ => AzkarTests}/AzkarCategoryTests.swift | 0 Tests/MuslimDataTests/{ => AzkarTests}/AzkarChapterTests.swift | 0 Tests/MuslimDataTests/{ => AzkarTests}/AzkarItemTests.swift | 0 Tests/MuslimDataTests/{ => LocationTests}/LocationTests.swift | 0 .../{NamesTest.swift => NamesTests/NamesTests.swift} | 2 +- Tests/MuslimDataTests/{ => PrayerTests}/DateFormatTests.swift | 0 Tests/MuslimDataTests/{ => PrayerTests}/PrayerTests.swift | 0 Tests/MuslimDataTests/{ => PrayerTests}/PrayerTimesTests.swift | 0 8 files changed, 1 insertion(+), 1 deletion(-) rename Tests/MuslimDataTests/{ => AzkarTests}/AzkarCategoryTests.swift (100%) rename Tests/MuslimDataTests/{ => AzkarTests}/AzkarChapterTests.swift (100%) rename Tests/MuslimDataTests/{ => AzkarTests}/AzkarItemTests.swift (100%) rename Tests/MuslimDataTests/{ => LocationTests}/LocationTests.swift (100%) rename Tests/MuslimDataTests/{NamesTest.swift => NamesTests/NamesTests.swift} (97%) rename Tests/MuslimDataTests/{ => PrayerTests}/DateFormatTests.swift (100%) rename Tests/MuslimDataTests/{ => PrayerTests}/PrayerTests.swift (100%) rename Tests/MuslimDataTests/{ => PrayerTests}/PrayerTimesTests.swift (100%) diff --git a/Tests/MuslimDataTests/AzkarCategoryTests.swift b/Tests/MuslimDataTests/AzkarTests/AzkarCategoryTests.swift similarity index 100% rename from Tests/MuslimDataTests/AzkarCategoryTests.swift rename to Tests/MuslimDataTests/AzkarTests/AzkarCategoryTests.swift diff --git a/Tests/MuslimDataTests/AzkarChapterTests.swift b/Tests/MuslimDataTests/AzkarTests/AzkarChapterTests.swift similarity index 100% rename from Tests/MuslimDataTests/AzkarChapterTests.swift rename to Tests/MuslimDataTests/AzkarTests/AzkarChapterTests.swift diff --git a/Tests/MuslimDataTests/AzkarItemTests.swift b/Tests/MuslimDataTests/AzkarTests/AzkarItemTests.swift similarity index 100% rename from Tests/MuslimDataTests/AzkarItemTests.swift rename to Tests/MuslimDataTests/AzkarTests/AzkarItemTests.swift diff --git a/Tests/MuslimDataTests/LocationTests.swift b/Tests/MuslimDataTests/LocationTests/LocationTests.swift similarity index 100% rename from Tests/MuslimDataTests/LocationTests.swift rename to Tests/MuslimDataTests/LocationTests/LocationTests.swift diff --git a/Tests/MuslimDataTests/NamesTest.swift b/Tests/MuslimDataTests/NamesTests/NamesTests.swift similarity index 97% rename from Tests/MuslimDataTests/NamesTest.swift rename to Tests/MuslimDataTests/NamesTests/NamesTests.swift index e37449a..a2a2737 100755 --- a/Tests/MuslimDataTests/NamesTest.swift +++ b/Tests/MuslimDataTests/NamesTests/NamesTests.swift @@ -9,7 +9,7 @@ @testable import MuslimData import XCTest -class NamesTest: XCTestCase { +class NamesTests: XCTestCase { override func setUp() { super.setUp() } diff --git a/Tests/MuslimDataTests/DateFormatTests.swift b/Tests/MuslimDataTests/PrayerTests/DateFormatTests.swift similarity index 100% rename from Tests/MuslimDataTests/DateFormatTests.swift rename to Tests/MuslimDataTests/PrayerTests/DateFormatTests.swift diff --git a/Tests/MuslimDataTests/PrayerTests.swift b/Tests/MuslimDataTests/PrayerTests/PrayerTests.swift similarity index 100% rename from Tests/MuslimDataTests/PrayerTests.swift rename to Tests/MuslimDataTests/PrayerTests/PrayerTests.swift diff --git a/Tests/MuslimDataTests/PrayerTimesTests.swift b/Tests/MuslimDataTests/PrayerTests/PrayerTimesTests.swift similarity index 100% rename from Tests/MuslimDataTests/PrayerTimesTests.swift rename to Tests/MuslimDataTests/PrayerTests/PrayerTimesTests.swift From 2d99345b825454336f39d4b0fecfad328d6fb92b Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 22:08:08 +0300 Subject: [PATCH 20/44] Update package specs --- MuslimData.podspec | 12 ++++++------ Package.swift | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/MuslimData.podspec b/MuslimData.podspec index 26d98fa..dcdbb07 100755 --- a/MuslimData.podspec +++ b/MuslimData.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'MuslimData' - s.version = '1.6.0' + s.version = '2.0.0' s.summary = 'Islamic library (Prayer Times [fixed and calculated], Names of Allah, and Azkars).' # This description is used to generate tags and improve search results. @@ -24,11 +24,11 @@ Pod::Spec.new do |s| Most cities around the world find their prayer times by using some calculations which is based on location (longitude and latitude) but some other cities have fixed time table for their prayer times. This library contains most fixed and calculated prayer times. Now you can contribute it to improve it and also you can use it in Muslim communities or Muslim apps. DESC - s.homepage = 'https://github.com/KosratDAhmad/MuslimData' + s.homepage = 'https://github.com/kosratdev/muslim-data-ios' # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' - s.license = { :type => 'MIT', :file => 'LICENSE' } + s.license = { :type => 'Apache 2.0', :file => 'LICENSE' } s.author = { 'Kosrat D. Ahmad' => 'kosrat.d.ahmad@gmail.com' } - s.source = { :git => 'https://github.com/KosratDAhmad/MuslimData.git', :tag => s.version.to_s } + s.source = { :git => 'https://github.com/kosratdev/muslim-data-ios.git', :tag => s.version.to_s } # s.social_media_url = 'https://twitter.com/' s.ios.deployment_target = '13.0' @@ -43,6 +43,6 @@ Pod::Spec.new do |s| s.resources = 'Sources/MuslimData/Resources/**/*' # s.public_header_files = 'Pod/Classes/**/*.h' - s.frameworks = 'UIKit' - s.dependency 'GRDB.swift', '~> 4.0.1' + s.frameworks = 'Foundation' + s.dependency 'GRDB.swift', '6.26.0' end diff --git a/Package.swift b/Package.swift index 222634c..e7ff948 100644 --- a/Package.swift +++ b/Package.swift @@ -4,7 +4,7 @@ import PackageDescription let package = Package( - name: "muslim-data-ios", + name: "MuslimData", platforms: [ .iOS(.v13), .macOS(.v12), From 801ec025bfcf55082ad8425d8daf4bc5c21545e1 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 22:16:35 +0300 Subject: [PATCH 21/44] Remove _Pods.xcodeproj file, it is not needed anymore --- _Pods.xcodeproj | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 _Pods.xcodeproj diff --git a/_Pods.xcodeproj b/_Pods.xcodeproj deleted file mode 100755 index e69de29..0000000 From 33f6fb5b1d6e0610ec29405a781179b9d9f1892b Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 22:47:19 +0300 Subject: [PATCH 22/44] Update migration guide to include muslim repository --- MIGRATION_GUIDE.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index fe9e485..b637c43 100644 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -3,13 +3,32 @@ ## MuslimDate Version 1.x to 2.x ### Introduction -This migration guide assists developers in transitioning from version 1.x to version 2.x of the `muslim-data-ios` library. Version 2 introduces improvements in database schema and table relations, including changes to the `Location` object structure. +This migration guide assists developers in transitioning from version 1.x to version 2.x of the `muslim-data-ios` library. Version 2 introduces improvements in database schema and table relations, including changes to the `Location` object structure and accessing its data through repository pattern. ### Changes Overview - Improved database table normalization and rearranged table relations. - Restructured the `Location` object schema for better data management and consistency. +- Implemented the Repository pattern for accessing data, replacing direct access through class methods. + ### Migration Steps +** Repository Pattern ** +- Refactor your code to utilize the MuslimRepository for accessing data instead of direct access through class methods. +- Replace instances of direct data access with calls to appropriate methods provided by `MuslimRepository` class. +- Update your codebase to follow the repository pattern for improved testability and ease of mocking. +The following code snippet shows how to access to PrayerTimes via MuslimRepository and the reset other changes can be found in the [README](README.md) file. +```swift +// Version 1.x +// Get prayer times +PrayerTime.getPrayerTimes(location: location, date: Date(), attributes: attributes) { prayerTime, error in + print("prayer times: \(prayerTime!)") +} + +// Version 2.x +let prayerTime = try await MuslimRepository().getPrayerTimes(location: location, date: Date(), attributes: attributes) +print("prayer times: \(prayerTime!)") +``` + **Update Location Object** - Modify the `Location` object structure in your code to align with version 2.x. ```swift From 9a1fcf2f5f63e987722ffc9b8e10aae8bfcc3811 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 22:50:01 +0300 Subject: [PATCH 23/44] Update readme file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cca26c3..fe9fbe9 100755 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ If you prefer to manage your Swift packages via Xcode, you can also add Muslim D 1. Open your Xcode project. 2. Navigate to the `File` menu > `Swift Packages` > `Add Package Dependency...`. 3. Paste the Muslim Data GitHub repository URL (`https://github.com/kosratdev/muslim-data-ios.git`) into the search bar and click `Next`. -4. Choose the version rule (`Up to Next Major` from version `1.0.0`) and click `Next`. +4. Choose the version rule (`Up to Next Major` from version `2.0.0`) and click `Next`. 5. Xcode will resolve the package and integrate it into your project. ## Usage From 21f2d7484c1d38a088c5a1c0db6c93da9b7436d9 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 22:51:07 +0300 Subject: [PATCH 24/44] Fix a bold style issue in migration file --- MIGRATION_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index b637c43..95c195f 100644 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -12,7 +12,7 @@ This migration guide assists developers in transitioning from version 1.x to ver ### Migration Steps -** Repository Pattern ** +**Repository Pattern** - Refactor your code to utilize the MuslimRepository for accessing data instead of direct access through class methods. - Replace instances of direct data access with calls to appropriate methods provided by `MuslimRepository` class. - Update your codebase to follow the repository pattern for improved testability and ease of mocking. From 4c423fa3102695918243a12584326a0c9690fe5c Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 22:52:47 +0300 Subject: [PATCH 25/44] Improve migration file --- MIGRATION_GUIDE.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index 95c195f..0e31da0 100644 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -16,10 +16,9 @@ This migration guide assists developers in transitioning from version 1.x to ver - Refactor your code to utilize the MuslimRepository for accessing data instead of direct access through class methods. - Replace instances of direct data access with calls to appropriate methods provided by `MuslimRepository` class. - Update your codebase to follow the repository pattern for improved testability and ease of mocking. -The following code snippet shows how to access to PrayerTimes via MuslimRepository and the reset other changes can be found in the [README](README.md) file. +The following code snippet shows how to access to PrayerTimes via `MuslimRepository` and the reset other examples can be found in the [README](README.md) file. ```swift // Version 1.x -// Get prayer times PrayerTime.getPrayerTimes(location: location, date: Date(), attributes: attributes) { prayerTime, error in print("prayer times: \(prayerTime!)") } From 95bf977c8c7923b5e0078589cd3bd7271413148f Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 22:53:32 +0300 Subject: [PATCH 26/44] Improve migration file --- MIGRATION_GUIDE.md | 1 + 1 file changed, 1 insertion(+) diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index 0e31da0..1e2fadf 100644 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -16,6 +16,7 @@ This migration guide assists developers in transitioning from version 1.x to ver - Refactor your code to utilize the MuslimRepository for accessing data instead of direct access through class methods. - Replace instances of direct data access with calls to appropriate methods provided by `MuslimRepository` class. - Update your codebase to follow the repository pattern for improved testability and ease of mocking. + The following code snippet shows how to access to PrayerTimes via `MuslimRepository` and the reset other examples can be found in the [README](README.md) file. ```swift // Version 1.x From 03e06fd90d77f4435f09aef74d6746e77cf6dc0c Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 23:03:32 +0300 Subject: [PATCH 27/44] Update GitHub action CI tests --- .github/workflows/tests.yml | 17 ++++++++--------- .travis.yml | 13 ------------- 2 files changed, 8 insertions(+), 22 deletions(-) delete mode 100755 .travis.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 02fdd4a..b134955 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,12 +9,11 @@ jobs: - uses: szenius/set-timezone@v1.2 with: timezoneMacos: "Asia/Baghdad" - - uses: actions/checkout@v3 - - name: Install Cocoapods - run: | - gem install cocoapods - pod install --project-directory=Example - - name: Run Tests - run: | - set -eo pipefail - xcodebuild test -enableCodeCoverage YES -workspace Example/MuslimData.xcworkspace -scheme MuslimData-Example -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 14 Pro' | xcpretty + - uses: swift-actions/setup-swift@v2 + with: + swift-version: "5.10" + - uses: actions/checkout@v4 + - name: Build + run: swift build + - name: Run tests + run: swift test diff --git a/.travis.yml b/.travis.yml deleted file mode 100755 index 4a2d9ab..0000000 --- a/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -osx_image: xcode10.2 -language: swift -before_script: - - sudo systemsetup -settimezone Asia/Baghdad -script: - - set -o pipefail && xcodebuild -enableCodeCoverage YES -workspace Example/MuslimData.xcworkspace -scheme MuslimData-Example -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO -destination 'platform=iOS Simulator,name=iPhone XS,OS=12.2' test | xcpretty --test --color - - pod repo update - - pod lib lint --allow-warnings -deploy: - provider: script - script: bash scripts/push.sh - on: - tags: true From a027304fc603851d99081f58e2d377249253fff0 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 23:08:04 +0300 Subject: [PATCH 28/44] Update GitHub action CI tests --- .github/workflows/tests.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b134955..7bb27c4 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,10 +10,10 @@ jobs: with: timezoneMacos: "Asia/Baghdad" - uses: swift-actions/setup-swift@v2 - with: - swift-version: "5.10" - - uses: actions/checkout@v4 - - name: Build - run: swift build - - name: Run tests - run: swift test + with: + swift-version: "5.10" + - uses: actions/checkout@v4 + - name: Build + run: swift build + - name: Run tests + run: swift test From 09f07b6eccb68a362893e59d23549b5b4ee26030 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 24 Mar 2024 23:16:22 +0300 Subject: [PATCH 29/44] Remove print statement in the tests --- Tests/MuslimDataTests/PrayerTests/PrayerTimesTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/MuslimDataTests/PrayerTests/PrayerTimesTests.swift b/Tests/MuslimDataTests/PrayerTests/PrayerTimesTests.swift index 2987b2e..7c89c66 100755 --- a/Tests/MuslimDataTests/PrayerTests/PrayerTimesTests.swift +++ b/Tests/MuslimDataTests/PrayerTests/PrayerTimesTests.swift @@ -28,7 +28,7 @@ class PrayerTimesTests: XCTestCase { let locations = DBHelper.shared.fixedPrayerTimesList() let date = Date(timeIntervalSince1970: 1_709_206_718) // 2024/02/29 for location in locations! { - print(location) + // print(location) let prayerTimes = try await MuslimRepository().getPrayerTimes(location: location, date: date, attributes: attributes) XCTAssertNotNil(prayerTimes) } From 9ce71b735497f28d641c363e167132f8b2c6b0d9 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Mon, 25 Mar 2024 14:00:22 +0300 Subject: [PATCH 30/44] Simplify names screen in the Example app --- .../project.pbxproj | 16 ------- .../xcshareddata/swiftpm/Package.resolved | 15 ++----- Example/MuslimDataExample/ContentView.swift | 18 +++++--- .../Names/NamesRowView.swift | 3 +- .../MuslimDataExample/Names/NamesScreen.swift | 17 ++------ .../Names/NamesViewModel.swift | 15 +++---- .../MuslimDataExample/Shared/AppTabs.swift | 22 ---------- .../Shared/ErrorWithRetryView.swift | 42 ------------------- 8 files changed, 27 insertions(+), 121 deletions(-) delete mode 100644 Example/MuslimDataExample/Shared/AppTabs.swift delete mode 100644 Example/MuslimDataExample/Shared/ErrorWithRetryView.swift diff --git a/Example/MuslimDataExample.xcodeproj/project.pbxproj b/Example/MuslimDataExample.xcodeproj/project.pbxproj index 8d556c8..8cedc7b 100644 --- a/Example/MuslimDataExample.xcodeproj/project.pbxproj +++ b/Example/MuslimDataExample.xcodeproj/project.pbxproj @@ -11,8 +11,6 @@ 6A22480F2BAED7960094967B /* NamesRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A22480E2BAED7960094967B /* NamesRowView.swift */; }; 6A2248112BAEDAEE0094967B /* NamesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2248102BAEDAED0094967B /* NamesViewModel.swift */; }; 6A2248152BAEDB4E0094967B /* MuslimData in Frameworks */ = {isa = PBXBuildFile; productRef = 6A2248142BAEDB4E0094967B /* MuslimData */; }; - 6A2248182BAEE1990094967B /* ErrorWithRetryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2248172BAEE1990094967B /* ErrorWithRetryView.swift */; }; - 6A22481A2BAEEBFB0094967B /* AppTabs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2248192BAEEBFB0094967B /* AppTabs.swift */; }; 6A787B1C2BAECF6F00DA0107 /* MuslimDataExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A787B1B2BAECF6F00DA0107 /* MuslimDataExampleApp.swift */; }; 6A787B1E2BAECF6F00DA0107 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A787B1D2BAECF6F00DA0107 /* ContentView.swift */; }; 6A787B202BAECF7200DA0107 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A787B1F2BAECF7200DA0107 /* Assets.xcassets */; }; @@ -24,8 +22,6 @@ 6A22480E2BAED7960094967B /* NamesRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesRowView.swift; sourceTree = ""; }; 6A2248102BAEDAED0094967B /* NamesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesViewModel.swift; sourceTree = ""; }; 6A2248132BAEDB050094967B /* muslim-data-ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "muslim-data-ios"; path = ..; sourceTree = ""; }; - 6A2248172BAEE1990094967B /* ErrorWithRetryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorWithRetryView.swift; sourceTree = ""; }; - 6A2248192BAEEBFB0094967B /* AppTabs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppTabs.swift; sourceTree = ""; }; 6A787B182BAECF6F00DA0107 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6A787B1B2BAECF6F00DA0107 /* MuslimDataExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MuslimDataExampleApp.swift; sourceTree = ""; }; 6A787B1D2BAECF6F00DA0107 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -63,15 +59,6 @@ name = Frameworks; sourceTree = ""; }; - 6A2248162BAEE1880094967B /* Shared */ = { - isa = PBXGroup; - children = ( - 6A2248172BAEE1990094967B /* ErrorWithRetryView.swift */, - 6A2248192BAEEBFB0094967B /* AppTabs.swift */, - ); - path = Shared; - sourceTree = ""; - }; 6A787B0F2BAECF6F00DA0107 = { isa = PBXGroup; children = ( @@ -92,7 +79,6 @@ 6A787B1A2BAECF6F00DA0107 /* MuslimDataExample */ = { isa = PBXGroup; children = ( - 6A2248162BAEE1880094967B /* Shared */, 6A22480B2BAED7730094967B /* Names */, 6A787B1B2BAECF6F00DA0107 /* MuslimDataExampleApp.swift */, 6A787B1D2BAECF6F00DA0107 /* ContentView.swift */, @@ -183,8 +169,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6A22481A2BAEEBFB0094967B /* AppTabs.swift in Sources */, - 6A2248182BAEE1990094967B /* ErrorWithRetryView.swift in Sources */, 6A22480F2BAED7960094967B /* NamesRowView.swift in Sources */, 6A22480D2BAED7840094967B /* NamesScreen.swift in Sources */, 6A787B1E2BAECF6F00DA0107 /* ContentView.swift in Sources */, diff --git a/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 17c9e0f..4a52a9c 100644 --- a/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Example/MuslimDataExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,22 +1,13 @@ { - "originHash" : "d74d0ac244973253b6ab6ca55279e1495dd27d9c84571fa4571b37d82a389f45", + "originHash" : "3b2a1b99aedb4ce24cdd643637ecbc2ac01b64f9fcc6462aa023925eb3dfc85c", "pins" : [ - { - "identity" : "csqlite", - "kind" : "remoteSourceControl", - "location" : "https://github.com/groue/CSQLite.git", - "state" : { - "revision" : "3a405d0ebd8bf07d4c41a8b05a203e4d03415b5b", - "version" : "0.3.0" - } - }, { "identity" : "grdb.swift", "kind" : "remoteSourceControl", "location" : "https://github.com/groue/GRDB.swift.git", "state" : { - "revision" : "49a7b2091c84e8e695e78ada1840eda022e5dc11", - "version" : "4.0.1" + "revision" : "77b85bed259b7f107710a0b78c439b1c5839dc45", + "version" : "6.26.0" } } ], diff --git a/Example/MuslimDataExample/ContentView.swift b/Example/MuslimDataExample/ContentView.swift index db48d50..f8b297c 100644 --- a/Example/MuslimDataExample/ContentView.swift +++ b/Example/MuslimDataExample/ContentView.swift @@ -11,24 +11,30 @@ import SwiftUI struct ContentView: View { - @State private var tab: AppTabs = .prayerTime + @State private var selection: AppTabs = .prayerTime + enum AppTabs { + case prayerTime + case names + case azkar + } + var body: some View { - TabView(selection: $tab) { + TabView(selection: $selection) { Text("Prayer Time") .tabItem { Image("ic_nav_prayers") - Text("Prayer Time") - }.tag(1) + Text("Prayer Times") + }.tag(AppTabs.prayerTime) NamesScreen() .tabItem { Image("ic_nav_names") Text("Names") - }.tag(2) + }.tag(AppTabs.names) Text("Azkar") .tabItem { Image("ic_nav_azkars") Text("Azkar") - }.tag(3) + }.tag(AppTabs.azkar) } } } diff --git a/Example/MuslimDataExample/Names/NamesRowView.swift b/Example/MuslimDataExample/Names/NamesRowView.swift index 6bae283..9ca1390 100644 --- a/Example/MuslimDataExample/Names/NamesRowView.swift +++ b/Example/MuslimDataExample/Names/NamesRowView.swift @@ -17,6 +17,7 @@ import MuslimData /// - name: The `Name` data to be displayed in the row. struct NamesRowView: View { let name: Name + var body: some View { VStack(alignment: .leading){ Text(name.name) @@ -28,5 +29,5 @@ struct NamesRowView: View { } #Preview { - NamesRowView(name: .init(name: "", translated: "")) + NamesRowView(name: .init(name: "اللە", translated: "Allah")) } diff --git a/Example/MuslimDataExample/Names/NamesScreen.swift b/Example/MuslimDataExample/Names/NamesScreen.swift index 28279ba..68c7849 100644 --- a/Example/MuslimDataExample/Names/NamesScreen.swift +++ b/Example/MuslimDataExample/Names/NamesScreen.swift @@ -10,24 +10,15 @@ import SwiftUI -/// Displays a list of the Names of Allah. Handles loading, error states, and data presentation. +/// Displays a list of the Names of Allah. struct NamesScreen: View { - @ObservedObject private var viewModel = NamesViewModel() + private var viewModel = NamesViewModel() var body: some View { NavigationStack{ List { - if viewModel.isLoading { - ProgressView("Loading...") - } else if let error = viewModel.error { - ErrorWithRetryView(title: "Error loading names!", - errorMessage: error.localizedDescription) { - viewModel.getNamesOfAllah() - } - } else { - ForEach(viewModel.names, id: \.name) { name in - NamesRowView(name: name) - } + ForEach(viewModel.names, id: \.name) { name in + NamesRowView(name: name) } } .listStyle(.plain) diff --git a/Example/MuslimDataExample/Names/NamesViewModel.swift b/Example/MuslimDataExample/Names/NamesViewModel.swift index d1fa4d0..e6d38eb 100644 --- a/Example/MuslimDataExample/Names/NamesViewModel.swift +++ b/Example/MuslimDataExample/Names/NamesViewModel.swift @@ -11,27 +11,24 @@ import Foundation import MuslimData -/// Manages the state for a list of Names of Allah. Responsible for fetching data, handling loading states, and potential errors. -class NamesViewModel: ObservableObject { - @Published private(set) var names: [Name] = [] - @Published private(set) var isLoading = false - @Published private(set) var error: Error? = nil +/// Manages the state for a list of Names of Allah. Responsible for fetching data. +@Observable +class NamesViewModel { + private(set) var names: [Name] = [] /// Initializes the view model and starts fetching the Names of Allah. init() { getNamesOfAllah() } - /// Fetches the Names of Allah from the `MuslimRepository`. Manages loading and error states. + /// Fetches the Names of Allah from the `MuslimRepository`. func getNamesOfAllah() { Task { - isLoading = true do { names = try await MuslimRepository().getNamesOfAllah(language: .en) ?? [] } catch { - self.error = error + print("Error getting names: \(error.localizedDescription)") } - isLoading = false } } } diff --git a/Example/MuslimDataExample/Shared/AppTabs.swift b/Example/MuslimDataExample/Shared/AppTabs.swift deleted file mode 100644 index 7d319c4..0000000 --- a/Example/MuslimDataExample/Shared/AppTabs.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// -// AppTabs.swift -// Example -// -// Created by Muhammad Azad on 23/03/2024 -// Copyright © 2024 MuslimData. All rights reserved. -// - - -import Foundation - -/// Represents the different tabs that can be displayed within the application. -enum AppTabs { - /// The tab for displaying prayer times. - case prayerTime - /// The tab for displaying the Names of Allah. - case names - /// The tab for displaying Azkar (remembrances). - case azkar -} - diff --git a/Example/MuslimDataExample/Shared/ErrorWithRetryView.swift b/Example/MuslimDataExample/Shared/ErrorWithRetryView.swift deleted file mode 100644 index 10f4bfe..0000000 --- a/Example/MuslimDataExample/Shared/ErrorWithRetryView.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// -// ErrorWithRetryView.swift -// Example -// -// Created by Muhammad Azad on 23/03/2024 -// Copyright © 2024 MuslimData. All rights reserved. -// - - -import SwiftUI - -/// Displays an error message with a button to retry an action. -/// -/// - Parameters: -/// - title: The title text displayed above the error message. -/// - errorMessage: The detailed error message to be presented to the user. -/// - retryAction: The closure to be executed when the "Retry" button is tapped. -struct ErrorWithRetryView: View { - let title: String - let errorMessage: String - let retryAction: () -> Void - - var body: some View { - VStack(spacing: 12) { - Text(title) - .font(.headline) - Text(errorMessage) - .multilineTextAlignment(.center) - Button(action: retryAction) { - Label("Retry", systemImage: "arrow.clockwise") - } - } - } -} - -#Preview { - ErrorWithRetryView(title: "Error loading data!", - errorMessage: "This is error messgae."){ - print("Retry") - } -} From c9d23b18cd93b42e09f985ea90515a158680aa94 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Mon, 25 Mar 2024 15:44:26 +0300 Subject: [PATCH 31/44] Add azkar chapter and items screens --- .../project.pbxproj | 48 +++++++++++++++++++ .../AzkarChapters/AzkarChaptersScreen.swift | 35 ++++++++++++++ .../Azkars/AzkarChapters/ChapterRow.swift | 28 +++++++++++ .../AzkarChapters/ChapterViewModel.swift | 30 ++++++++++++ .../Azkars/AzkarItems/AzkarItemsScreen.swift | 33 +++++++++++++ .../Azkars/AzkarItems/ItemRow.swift | 41 ++++++++++++++++ .../Azkars/AzkarItems/ItemViewModel.swift | 32 +++++++++++++ Example/MuslimDataExample/ContentView.swift | 2 +- .../Names/NamesRowView.swift | 7 +-- .../MuslimDataExample/Names/NamesScreen.swift | 1 - .../Names/NamesViewModel.swift | 3 +- 11 files changed, 253 insertions(+), 7 deletions(-) create mode 100644 Example/MuslimDataExample/Azkars/AzkarChapters/AzkarChaptersScreen.swift create mode 100644 Example/MuslimDataExample/Azkars/AzkarChapters/ChapterRow.swift create mode 100644 Example/MuslimDataExample/Azkars/AzkarChapters/ChapterViewModel.swift create mode 100644 Example/MuslimDataExample/Azkars/AzkarItems/AzkarItemsScreen.swift create mode 100644 Example/MuslimDataExample/Azkars/AzkarItems/ItemRow.swift create mode 100644 Example/MuslimDataExample/Azkars/AzkarItems/ItemViewModel.swift diff --git a/Example/MuslimDataExample.xcodeproj/project.pbxproj b/Example/MuslimDataExample.xcodeproj/project.pbxproj index 8cedc7b..fb3dac4 100644 --- a/Example/MuslimDataExample.xcodeproj/project.pbxproj +++ b/Example/MuslimDataExample.xcodeproj/project.pbxproj @@ -7,6 +7,12 @@ objects = { /* Begin PBXBuildFile section */ + 2D9B68CA2BB190E30029E4D0 /* ChapterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68C92BB190E30029E4D0 /* ChapterViewModel.swift */; }; + 2D9B68CD2BB191270029E4D0 /* ChapterRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68CC2BB191270029E4D0 /* ChapterRow.swift */; }; + 2D9B68CF2BB1913A0029E4D0 /* AzkarChaptersScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68CE2BB1913A0029E4D0 /* AzkarChaptersScreen.swift */; }; + 2D9B68D22BB195FF0029E4D0 /* AzkarItemsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68D12BB195FF0029E4D0 /* AzkarItemsScreen.swift */; }; + 2D9B68D42BB19AFB0029E4D0 /* ItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68D32BB19AFB0029E4D0 /* ItemViewModel.swift */; }; + 2D9B68D62BB19B0F0029E4D0 /* ItemRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68D52BB19B0F0029E4D0 /* ItemRow.swift */; }; 6A22480D2BAED7840094967B /* NamesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A22480C2BAED7840094967B /* NamesScreen.swift */; }; 6A22480F2BAED7960094967B /* NamesRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A22480E2BAED7960094967B /* NamesRowView.swift */; }; 6A2248112BAEDAEE0094967B /* NamesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2248102BAEDAED0094967B /* NamesViewModel.swift */; }; @@ -18,6 +24,12 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 2D9B68C92BB190E30029E4D0 /* ChapterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChapterViewModel.swift; sourceTree = ""; }; + 2D9B68CC2BB191270029E4D0 /* ChapterRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChapterRow.swift; sourceTree = ""; }; + 2D9B68CE2BB1913A0029E4D0 /* AzkarChaptersScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarChaptersScreen.swift; sourceTree = ""; }; + 2D9B68D12BB195FF0029E4D0 /* AzkarItemsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarItemsScreen.swift; sourceTree = ""; }; + 2D9B68D32BB19AFB0029E4D0 /* ItemViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemViewModel.swift; sourceTree = ""; }; + 2D9B68D52BB19B0F0029E4D0 /* ItemRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemRow.swift; sourceTree = ""; }; 6A22480C2BAED7840094967B /* NamesScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesScreen.swift; sourceTree = ""; }; 6A22480E2BAED7960094967B /* NamesRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesRowView.swift; sourceTree = ""; }; 6A2248102BAEDAED0094967B /* NamesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesViewModel.swift; sourceTree = ""; }; @@ -41,6 +53,35 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2D9B68CB2BB190F30029E4D0 /* Azkars */ = { + isa = PBXGroup; + children = ( + 2D9B68D72BB1A3600029E4D0 /* AzkarChapters */, + 2D9B68D02BB191870029E4D0 /* AzkarItems */, + ); + path = Azkars; + sourceTree = ""; + }; + 2D9B68D02BB191870029E4D0 /* AzkarItems */ = { + isa = PBXGroup; + children = ( + 2D9B68D12BB195FF0029E4D0 /* AzkarItemsScreen.swift */, + 2D9B68D52BB19B0F0029E4D0 /* ItemRow.swift */, + 2D9B68D32BB19AFB0029E4D0 /* ItemViewModel.swift */, + ); + path = AzkarItems; + sourceTree = ""; + }; + 2D9B68D72BB1A3600029E4D0 /* AzkarChapters */ = { + isa = PBXGroup; + children = ( + 2D9B68CE2BB1913A0029E4D0 /* AzkarChaptersScreen.swift */, + 2D9B68CC2BB191270029E4D0 /* ChapterRow.swift */, + 2D9B68C92BB190E30029E4D0 /* ChapterViewModel.swift */, + ); + path = AzkarChapters; + sourceTree = ""; + }; 6A22480B2BAED7730094967B /* Names */ = { isa = PBXGroup; children = ( @@ -80,6 +121,7 @@ isa = PBXGroup; children = ( 6A22480B2BAED7730094967B /* Names */, + 2D9B68CB2BB190F30029E4D0 /* Azkars */, 6A787B1B2BAECF6F00DA0107 /* MuslimDataExampleApp.swift */, 6A787B1D2BAECF6F00DA0107 /* ContentView.swift */, 6A787B1F2BAECF7200DA0107 /* Assets.xcassets */, @@ -169,11 +211,17 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 2D9B68CA2BB190E30029E4D0 /* ChapterViewModel.swift in Sources */, + 2D9B68CF2BB1913A0029E4D0 /* AzkarChaptersScreen.swift in Sources */, + 2D9B68CD2BB191270029E4D0 /* ChapterRow.swift in Sources */, + 2D9B68D42BB19AFB0029E4D0 /* ItemViewModel.swift in Sources */, 6A22480F2BAED7960094967B /* NamesRowView.swift in Sources */, 6A22480D2BAED7840094967B /* NamesScreen.swift in Sources */, 6A787B1E2BAECF6F00DA0107 /* ContentView.swift in Sources */, 6A787B1C2BAECF6F00DA0107 /* MuslimDataExampleApp.swift in Sources */, + 2D9B68D62BB19B0F0029E4D0 /* ItemRow.swift in Sources */, 6A2248112BAEDAEE0094967B /* NamesViewModel.swift in Sources */, + 2D9B68D22BB195FF0029E4D0 /* AzkarItemsScreen.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Example/MuslimDataExample/Azkars/AzkarChapters/AzkarChaptersScreen.swift b/Example/MuslimDataExample/Azkars/AzkarChapters/AzkarChaptersScreen.swift new file mode 100644 index 0000000..c75e276 --- /dev/null +++ b/Example/MuslimDataExample/Azkars/AzkarChapters/AzkarChaptersScreen.swift @@ -0,0 +1,35 @@ +// +// AzkarsScreen.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import SwiftUI + +/// Display the azkar chapter list. +struct AzkarChaptersScreen: View { + private var azkarViewModel = ChapterViewModel() + + var body: some View { + NavigationSplitView { + List { + ForEach(azkarViewModel.azkarChapters, id: \.id) { chapter in + NavigationLink { + AzkarItemsScreen(chapterId: chapter.id) + } label: { + ChapterRow(azkarChapter: chapter) + .frame(height: 36) + } + } + } + .navigationTitle("Azkars") + } detail: { + Text("Select an Azkar") + } + } +} + +#Preview { + AzkarChaptersScreen() +} diff --git a/Example/MuslimDataExample/Azkars/AzkarChapters/ChapterRow.swift b/Example/MuslimDataExample/Azkars/AzkarChapters/ChapterRow.swift new file mode 100644 index 0000000..9b2c37b --- /dev/null +++ b/Example/MuslimDataExample/Azkars/AzkarChapters/ChapterRow.swift @@ -0,0 +1,28 @@ +// +// AzkarRow.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import SwiftUI +import MuslimData + +/// Displays a single row that is representing an azkar chapter. +/// +/// - Parameters: +/// - azkarChapter: the `AzkarChapter` instance that needs to be displayed in the row. +struct ChapterRow: View { + var azkarChapter: AzkarChapter + + var body: some View { + VStack(alignment: .leading) { + Text(azkarChapter.name) + .font(.body) + } + } +} + +#Preview { + ChapterRow(azkarChapter: AzkarChapter(id: 1, categoryId: 1, name: "Morning Azkars")) +} diff --git a/Example/MuslimDataExample/Azkars/AzkarChapters/ChapterViewModel.swift b/Example/MuslimDataExample/Azkars/AzkarChapters/ChapterViewModel.swift new file mode 100644 index 0000000..38c33e3 --- /dev/null +++ b/Example/MuslimDataExample/Azkars/AzkarChapters/ChapterViewModel.swift @@ -0,0 +1,30 @@ +// +// AzkarViewModel.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import Foundation +import MuslimData + +@Observable +/// Manages the state for the azkar chapters list and responsible for fetching data. +class ChapterViewModel { + private(set) var azkarChapters: [AzkarChapter] = [] + + init() { + getAzkarChapters() + } + + /// Fetches the azkar chapters from the `MuslimRepository`. + private func getAzkarChapters() { + Task { + do { + azkarChapters = try await MuslimRepository().getAzkarChapters(language: .en) ?? [] + } catch { + print("Error loading azkars: \(error.localizedDescription)") + } + } + } +} diff --git a/Example/MuslimDataExample/Azkars/AzkarItems/AzkarItemsScreen.swift b/Example/MuslimDataExample/Azkars/AzkarItems/AzkarItemsScreen.swift new file mode 100644 index 0000000..03890a1 --- /dev/null +++ b/Example/MuslimDataExample/Azkars/AzkarItems/AzkarItemsScreen.swift @@ -0,0 +1,33 @@ +// +// AzkarDetailScreen.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import SwiftUI + +/// Display the detail of the selected azkar chapter. +struct AzkarItemsScreen: View { + var chapterId: Int + var itemsViewModel: ItemViewModel + + init(chapterId: Int) { + self.chapterId = chapterId + itemsViewModel = ItemViewModel(chapterId: chapterId) + } + + var body: some View { + List { + ForEach(itemsViewModel.azkarItems, id: \.id) { item in + ItemRow(azkarItem: item) + } + } + .listRowSpacing(8) + .navigationTitle("Azkar Details") + } +} + +#Preview { + AzkarItemsScreen(chapterId: 1) +} diff --git a/Example/MuslimDataExample/Azkars/AzkarItems/ItemRow.swift b/Example/MuslimDataExample/Azkars/AzkarItems/ItemRow.swift new file mode 100644 index 0000000..fa80249 --- /dev/null +++ b/Example/MuslimDataExample/Azkars/AzkarItems/ItemRow.swift @@ -0,0 +1,41 @@ +// +// ItemRow.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import SwiftUI +import MuslimData + +/// Displays a single row that is representing an Azkar Item. Includes the Arabic azkar, its tranlation, +/// and the azkar reference. +/// +/// - Parameters: +/// - azkarItem: the `AzkarItem` instance that needs to be displayed in the row. +struct ItemRow: View { + var azkarItem: AzkarItem + + var body: some View { + VStack(alignment: .leading) { + Text(azkarItem.item) + .font(.headline) + .padding(.bottom, 4) + Text(azkarItem.translation) + .font(.body) + .padding(.bottom, 8) + Text(azkarItem.reference) + .font(.caption) + } + } +} + +#Preview { + ItemRow(azkarItem: AzkarItem( + id: 1, + chapterId: 1, + item: "Azkar detail in Arabic language", + translation: "translated azkar into user's language", + reference: "Azkar references") + ) +} diff --git a/Example/MuslimDataExample/Azkars/AzkarItems/ItemViewModel.swift b/Example/MuslimDataExample/Azkars/AzkarItems/ItemViewModel.swift new file mode 100644 index 0000000..a063af6 --- /dev/null +++ b/Example/MuslimDataExample/Azkars/AzkarItems/ItemViewModel.swift @@ -0,0 +1,32 @@ +// +// ItemViewModel.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import Foundation +import MuslimData + +@Observable +/// Manages the state for the azkar item list and responsible for fetching data. +class ItemViewModel { + private(set) var azkarItems: [AzkarItem] = [] + let chapterId: Int + + init(chapterId: Int) { + self.chapterId = chapterId + getAzkarItems() + } + + /// Fetches the azkar items from the `MuslimRepository`. + private func getAzkarItems() { + Task { + do { + azkarItems = try await MuslimRepository().getAzkarItems(chapterId: chapterId, language: .en) ?? [] + } catch { + print("Error getting azkar items: \(error.localizedDescription)") + } + } + } +} diff --git a/Example/MuslimDataExample/ContentView.swift b/Example/MuslimDataExample/ContentView.swift index f8b297c..abbc925 100644 --- a/Example/MuslimDataExample/ContentView.swift +++ b/Example/MuslimDataExample/ContentView.swift @@ -30,7 +30,7 @@ struct ContentView: View { Image("ic_nav_names") Text("Names") }.tag(AppTabs.names) - Text("Azkar") + AzkarChaptersScreen() .tabItem { Image("ic_nav_azkars") Text("Azkar") diff --git a/Example/MuslimDataExample/Names/NamesRowView.swift b/Example/MuslimDataExample/Names/NamesRowView.swift index 9ca1390..e081fb5 100644 --- a/Example/MuslimDataExample/Names/NamesRowView.swift +++ b/Example/MuslimDataExample/Names/NamesRowView.swift @@ -11,10 +11,11 @@ import SwiftUI import MuslimData -/// Displays a single row representing a Name of Allah. Includes the Arabic name and its translation. +/// Displays a single row which is representing a Name of Allah. Includes the Arabic name +/// and its translation. /// -/// - Parameter: -/// - name: The `Name` data to be displayed in the row. +/// - Parameters: +/// - name: The `Name` instance that needs to be displayed in the row. struct NamesRowView: View { let name: Name diff --git a/Example/MuslimDataExample/Names/NamesScreen.swift b/Example/MuslimDataExample/Names/NamesScreen.swift index 68c7849..ff8a701 100644 --- a/Example/MuslimDataExample/Names/NamesScreen.swift +++ b/Example/MuslimDataExample/Names/NamesScreen.swift @@ -21,7 +21,6 @@ struct NamesScreen: View { NamesRowView(name: name) } } - .listStyle(.plain) .navigationTitle("Names of Allah") } } diff --git a/Example/MuslimDataExample/Names/NamesViewModel.swift b/Example/MuslimDataExample/Names/NamesViewModel.swift index e6d38eb..dc074b2 100644 --- a/Example/MuslimDataExample/Names/NamesViewModel.swift +++ b/Example/MuslimDataExample/Names/NamesViewModel.swift @@ -11,12 +11,11 @@ import Foundation import MuslimData -/// Manages the state for a list of Names of Allah. Responsible for fetching data. @Observable +/// Manages the state for a list of Names of Allah and responsible for fetching data. class NamesViewModel { private(set) var names: [Name] = [] - /// Initializes the view model and starts fetching the Names of Allah. init() { getNamesOfAllah() } From 963c58dd5824da4c0dfdce86281bfd98556105cd Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Mon, 25 Mar 2024 22:31:26 +0300 Subject: [PATCH 32/44] Add my prayers screen to the example app --- .../project.pbxproj | 32 +++++++++++ .../ic_location.imageset/Contents.json | 15 +++++ .../ic_settings_location.pdf | Bin 0 -> 18572 bytes Example/MuslimDataExample/ContentView.swift | 2 +- .../Extensions/LocationExtensions.swift | 45 +++++++++++++++ .../PrayerTimes/PrayerRowView.swift | 31 ++++++++++ .../PrayerTimes/PrayerScreen.swift | 53 ++++++++++++++++++ .../PrayerTimes/PrayerViewModel.swift | 44 +++++++++++++++ .../Models/PrayerTimes/PrayerTime.swift | 9 +++ 9 files changed, 230 insertions(+), 1 deletion(-) create mode 100644 Example/MuslimDataExample/Assets.xcassets/ic_location.imageset/Contents.json create mode 100644 Example/MuslimDataExample/Assets.xcassets/ic_location.imageset/ic_settings_location.pdf create mode 100644 Example/MuslimDataExample/Extensions/LocationExtensions.swift create mode 100644 Example/MuslimDataExample/PrayerTimes/PrayerRowView.swift create mode 100644 Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift create mode 100644 Example/MuslimDataExample/PrayerTimes/PrayerViewModel.swift diff --git a/Example/MuslimDataExample.xcodeproj/project.pbxproj b/Example/MuslimDataExample.xcodeproj/project.pbxproj index fb3dac4..c8e067b 100644 --- a/Example/MuslimDataExample.xcodeproj/project.pbxproj +++ b/Example/MuslimDataExample.xcodeproj/project.pbxproj @@ -7,12 +7,16 @@ objects = { /* Begin PBXBuildFile section */ + 2D13C26A2BB1E582007081CA /* PrayerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D13C2692BB1E582007081CA /* PrayerViewModel.swift */; }; + 2D13C26C2BB1E9C9007081CA /* LocationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D13C26B2BB1E9C9007081CA /* LocationExtensions.swift */; }; + 2D13C26E2BB1F1F9007081CA /* PrayerRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D13C26D2BB1F1F9007081CA /* PrayerRowView.swift */; }; 2D9B68CA2BB190E30029E4D0 /* ChapterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68C92BB190E30029E4D0 /* ChapterViewModel.swift */; }; 2D9B68CD2BB191270029E4D0 /* ChapterRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68CC2BB191270029E4D0 /* ChapterRow.swift */; }; 2D9B68CF2BB1913A0029E4D0 /* AzkarChaptersScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68CE2BB1913A0029E4D0 /* AzkarChaptersScreen.swift */; }; 2D9B68D22BB195FF0029E4D0 /* AzkarItemsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68D12BB195FF0029E4D0 /* AzkarItemsScreen.swift */; }; 2D9B68D42BB19AFB0029E4D0 /* ItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68D32BB19AFB0029E4D0 /* ItemViewModel.swift */; }; 2D9B68D62BB19B0F0029E4D0 /* ItemRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68D52BB19B0F0029E4D0 /* ItemRow.swift */; }; + 2D9B68D92BB1A9410029E4D0 /* PrayerScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68D82BB1A9410029E4D0 /* PrayerScreen.swift */; }; 6A22480D2BAED7840094967B /* NamesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A22480C2BAED7840094967B /* NamesScreen.swift */; }; 6A22480F2BAED7960094967B /* NamesRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A22480E2BAED7960094967B /* NamesRowView.swift */; }; 6A2248112BAEDAEE0094967B /* NamesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A2248102BAEDAED0094967B /* NamesViewModel.swift */; }; @@ -24,12 +28,16 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 2D13C2692BB1E582007081CA /* PrayerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrayerViewModel.swift; sourceTree = ""; }; + 2D13C26B2BB1E9C9007081CA /* LocationExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationExtensions.swift; sourceTree = ""; }; + 2D13C26D2BB1F1F9007081CA /* PrayerRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrayerRowView.swift; sourceTree = ""; }; 2D9B68C92BB190E30029E4D0 /* ChapterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChapterViewModel.swift; sourceTree = ""; }; 2D9B68CC2BB191270029E4D0 /* ChapterRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChapterRow.swift; sourceTree = ""; }; 2D9B68CE2BB1913A0029E4D0 /* AzkarChaptersScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarChaptersScreen.swift; sourceTree = ""; }; 2D9B68D12BB195FF0029E4D0 /* AzkarItemsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarItemsScreen.swift; sourceTree = ""; }; 2D9B68D32BB19AFB0029E4D0 /* ItemViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemViewModel.swift; sourceTree = ""; }; 2D9B68D52BB19B0F0029E4D0 /* ItemRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemRow.swift; sourceTree = ""; }; + 2D9B68D82BB1A9410029E4D0 /* PrayerScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrayerScreen.swift; sourceTree = ""; }; 6A22480C2BAED7840094967B /* NamesScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesScreen.swift; sourceTree = ""; }; 6A22480E2BAED7960094967B /* NamesRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesRowView.swift; sourceTree = ""; }; 6A2248102BAEDAED0094967B /* NamesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamesViewModel.swift; sourceTree = ""; }; @@ -53,6 +61,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2D13C2712BB204DC007081CA /* Extensions */ = { + isa = PBXGroup; + children = ( + 2D13C26B2BB1E9C9007081CA /* LocationExtensions.swift */, + ); + path = Extensions; + sourceTree = ""; + }; 2D9B68CB2BB190F30029E4D0 /* Azkars */ = { isa = PBXGroup; children = ( @@ -82,6 +98,16 @@ path = AzkarChapters; sourceTree = ""; }; + 2D9B68DA2BB1A9490029E4D0 /* PrayerTimes */ = { + isa = PBXGroup; + children = ( + 2D9B68D82BB1A9410029E4D0 /* PrayerScreen.swift */, + 2D13C26D2BB1F1F9007081CA /* PrayerRowView.swift */, + 2D13C2692BB1E582007081CA /* PrayerViewModel.swift */, + ); + path = PrayerTimes; + sourceTree = ""; + }; 6A22480B2BAED7730094967B /* Names */ = { isa = PBXGroup; children = ( @@ -120,8 +146,10 @@ 6A787B1A2BAECF6F00DA0107 /* MuslimDataExample */ = { isa = PBXGroup; children = ( + 2D9B68DA2BB1A9490029E4D0 /* PrayerTimes */, 6A22480B2BAED7730094967B /* Names */, 2D9B68CB2BB190F30029E4D0 /* Azkars */, + 2D13C2712BB204DC007081CA /* Extensions */, 6A787B1B2BAECF6F00DA0107 /* MuslimDataExampleApp.swift */, 6A787B1D2BAECF6F00DA0107 /* ContentView.swift */, 6A787B1F2BAECF7200DA0107 /* Assets.xcassets */, @@ -212,6 +240,7 @@ buildActionMask = 2147483647; files = ( 2D9B68CA2BB190E30029E4D0 /* ChapterViewModel.swift in Sources */, + 2D9B68D92BB1A9410029E4D0 /* PrayerScreen.swift in Sources */, 2D9B68CF2BB1913A0029E4D0 /* AzkarChaptersScreen.swift in Sources */, 2D9B68CD2BB191270029E4D0 /* ChapterRow.swift in Sources */, 2D9B68D42BB19AFB0029E4D0 /* ItemViewModel.swift in Sources */, @@ -220,8 +249,11 @@ 6A787B1E2BAECF6F00DA0107 /* ContentView.swift in Sources */, 6A787B1C2BAECF6F00DA0107 /* MuslimDataExampleApp.swift in Sources */, 2D9B68D62BB19B0F0029E4D0 /* ItemRow.swift in Sources */, + 2D13C26A2BB1E582007081CA /* PrayerViewModel.swift in Sources */, 6A2248112BAEDAEE0094967B /* NamesViewModel.swift in Sources */, + 2D13C26C2BB1E9C9007081CA /* LocationExtensions.swift in Sources */, 2D9B68D22BB195FF0029E4D0 /* AzkarItemsScreen.swift in Sources */, + 2D13C26E2BB1F1F9007081CA /* PrayerRowView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Example/MuslimDataExample/Assets.xcassets/ic_location.imageset/Contents.json b/Example/MuslimDataExample/Assets.xcassets/ic_location.imageset/Contents.json new file mode 100644 index 0000000..e5bd772 --- /dev/null +++ b/Example/MuslimDataExample/Assets.xcassets/ic_location.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "ic_settings_location.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Example/MuslimDataExample/Assets.xcassets/ic_location.imageset/ic_settings_location.pdf b/Example/MuslimDataExample/Assets.xcassets/ic_location.imageset/ic_settings_location.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0861274ab4ed6671188e8197113a334680044904 GIT binary patch literal 18572 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 Location { + let defaults = UserDefaults.standard + let id = defaults.object(forKey: "id") as? Int ?? 77359 + let name = defaults.string(forKey: "name") ?? "Erbil" + var latitude = defaults.double(forKey: "latitude") + latitude = latitude == 0.0 ? 36.188204 : latitude + var longitude = defaults.double(forKey: "longitude") + longitude = longitude == 0.0 ? 43.966606 : longitude + let countryCode = defaults.string(forKey: "countryCode") ?? "IQ" + let countryName = defaults.string(forKey: "countryName") ?? "Iraq" + let hasFixedPrayerTime = (defaults.object(forKey: "hasFixedPrayerTime") as? Bool) ?? true + let prayerDependentId = defaults.object(forKey: "prayerDependentId") as? Int + + return Location(id: id, name: name, latitude: latitude, longitude: longitude, + countryCode: countryCode, countryName: countryName, hasFixedPrayerTime: hasFixedPrayerTime, + prayerDependentId: prayerDependentId) + } +} diff --git a/Example/MuslimDataExample/PrayerTimes/PrayerRowView.swift b/Example/MuslimDataExample/PrayerTimes/PrayerRowView.swift new file mode 100644 index 0000000..605cfd0 --- /dev/null +++ b/Example/MuslimDataExample/PrayerTimes/PrayerRowView.swift @@ -0,0 +1,31 @@ +// +// PrayerRow.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import SwiftUI +import MuslimData + +/// Displays a single row of the prayer times. Includes the prayer name and time. +/// +/// - Parameters: +/// - prayerName: The prayer name string. +/// - prayerTime: The formatted prayer time string. +struct PrayerRowView: View { + let prayerName: String + let prayerTime: String + + var body: some View { + HStack { + Text(prayerName) + Spacer() + Text(prayerTime) + } + } +} + +#Preview { + PrayerRowView(prayerName: "Fajr", prayerTime: "04:55 AM") +} diff --git a/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift b/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift new file mode 100644 index 0000000..160de80 --- /dev/null +++ b/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift @@ -0,0 +1,53 @@ +// +// PrayerTimes.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import SwiftUI +import MuslimData + +/// Displays a list of the prayer times. +struct PrayerScreen: View { + var prayerViewModel = PrayerViewModel() + var prayerNames: [String] { + prayerViewModel.prayerNames + } + var location: Location { + prayerViewModel.location + } + var prayerTimes: [String] { + prayerViewModel.prayerTimes + } + + var body: some View { + NavigationView { + List { + VStack(alignment: .leading) { + Text("\(location.name), \(location.countryCode)") + .font(.headline) + Text(prayerViewModel.todayString()) + }.padding(.bottom) + + if prayerTimes.count > 0 { + ForEach(Array(prayerNames.enumerated()), id: \.offset) { index, name in + PrayerRowView(prayerName: name, prayerTime: prayerTimes[index]) + } + } + } + .navigationTitle("My Prayers") + .toolbar { + Button { + print("Navigate to location screen") + } label: { + Image("ic_location") + } + } + } + } +} + +#Preview { + PrayerScreen() +} diff --git a/Example/MuslimDataExample/PrayerTimes/PrayerViewModel.swift b/Example/MuslimDataExample/PrayerTimes/PrayerViewModel.swift new file mode 100644 index 0000000..1c8eae1 --- /dev/null +++ b/Example/MuslimDataExample/PrayerTimes/PrayerViewModel.swift @@ -0,0 +1,44 @@ +// +// PrayerViewModel.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import Foundation +import MuslimData + +@Observable +/// Manages the state for the prayer times and responsible for fetching data. +class PrayerViewModel { + private(set) var location: Location + private(set) var prayerTimes: [String] = [] + private(set) var prayerNames = ["Fajr", "Sunrise", "Dhuhr", "Asr", "Maghrib", "Isha"] + + init() { + location = Location.loadSavedLocation() + getPrayerTimes() + } + + /// Fetches the prayer times from the `MuslimRepository` and then assign it to the local variable. + private func getPrayerTimes() { + Task { + do { + let offsets: [Double] = [0, 0, 0, 0, 0, 0] + let prayerAttribute = PrayerAttribute(method: .makkah, asrMethod: .shafii, adjustAngle: .angleBased, offsets: offsets) + let prayer = try await MuslimRepository().getPrayerTimes(location: location, date: Date(), attributes: prayerAttribute) + prayerTimes = prayer?.formatPrayers(.time12) ?? [] + } catch { + print("Error Loading prayer times: \(error.localizedDescription)") + } + } + } + + /// Formate today's date as `dd MMM yyyy` and return it as string. + /// - Returns: Formatted today's date. + func todayString() -> String { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "dd MMM yyyy" + return dateFormatter.string(from: Date()) + } +} diff --git a/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift b/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift index a402120..ef6bd67 100755 --- a/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift +++ b/Sources/MuslimData/Models/PrayerTimes/PrayerTime.swift @@ -18,6 +18,15 @@ public struct PrayerTime { public var maghrib: Date public var isha: Date + public init(fajr: Date, sunrise: Date, dhuhr: Date, asr: Date, maghrib: Date, isha: Date) { + self.fajr = fajr + self.sunrise = sunrise + self.dhuhr = dhuhr + self.asr = asr + self.maghrib = maghrib + self.isha = isha + } + // MARK: - Internal Methods /// Apply offests to the current prayer times. From 0501eb1a60ec075e9ebd78dc92144ab3b9e367a8 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Wed, 27 Mar 2024 00:56:25 +0300 Subject: [PATCH 33/44] Add location screen for the example app --- .../project.pbxproj | 20 ++++++ .../Location/LocationRowView.swift | 46 +++++++++++++ .../Location/LocationScreen.swift | 64 +++++++++++++++++++ .../Location/LocationViewModel.swift | 27 ++++++++ .../PrayerTimes/PrayerScreen.swift | 8 +-- .../PrayerTimes/PrayerViewModel.swift | 8 ++- 6 files changed, 168 insertions(+), 5 deletions(-) create mode 100644 Example/MuslimDataExample/Location/LocationRowView.swift create mode 100644 Example/MuslimDataExample/Location/LocationScreen.swift create mode 100644 Example/MuslimDataExample/Location/LocationViewModel.swift diff --git a/Example/MuslimDataExample.xcodeproj/project.pbxproj b/Example/MuslimDataExample.xcodeproj/project.pbxproj index c8e067b..691f396 100644 --- a/Example/MuslimDataExample.xcodeproj/project.pbxproj +++ b/Example/MuslimDataExample.xcodeproj/project.pbxproj @@ -10,6 +10,9 @@ 2D13C26A2BB1E582007081CA /* PrayerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D13C2692BB1E582007081CA /* PrayerViewModel.swift */; }; 2D13C26C2BB1E9C9007081CA /* LocationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D13C26B2BB1E9C9007081CA /* LocationExtensions.swift */; }; 2D13C26E2BB1F1F9007081CA /* PrayerRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D13C26D2BB1F1F9007081CA /* PrayerRowView.swift */; }; + 2D13C2742BB20AA6007081CA /* LocationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D13C2732BB20AA6007081CA /* LocationViewModel.swift */; }; + 2D13C2762BB20ABA007081CA /* LocationRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D13C2752BB20ABA007081CA /* LocationRowView.swift */; }; + 2D13C2782BB20AC9007081CA /* LocationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D13C2772BB20AC9007081CA /* LocationScreen.swift */; }; 2D9B68CA2BB190E30029E4D0 /* ChapterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68C92BB190E30029E4D0 /* ChapterViewModel.swift */; }; 2D9B68CD2BB191270029E4D0 /* ChapterRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68CC2BB191270029E4D0 /* ChapterRow.swift */; }; 2D9B68CF2BB1913A0029E4D0 /* AzkarChaptersScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9B68CE2BB1913A0029E4D0 /* AzkarChaptersScreen.swift */; }; @@ -31,6 +34,9 @@ 2D13C2692BB1E582007081CA /* PrayerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrayerViewModel.swift; sourceTree = ""; }; 2D13C26B2BB1E9C9007081CA /* LocationExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationExtensions.swift; sourceTree = ""; }; 2D13C26D2BB1F1F9007081CA /* PrayerRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrayerRowView.swift; sourceTree = ""; }; + 2D13C2732BB20AA6007081CA /* LocationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationViewModel.swift; sourceTree = ""; }; + 2D13C2752BB20ABA007081CA /* LocationRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationRowView.swift; sourceTree = ""; }; + 2D13C2772BB20AC9007081CA /* LocationScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationScreen.swift; sourceTree = ""; }; 2D9B68C92BB190E30029E4D0 /* ChapterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChapterViewModel.swift; sourceTree = ""; }; 2D9B68CC2BB191270029E4D0 /* ChapterRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChapterRow.swift; sourceTree = ""; }; 2D9B68CE2BB1913A0029E4D0 /* AzkarChaptersScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzkarChaptersScreen.swift; sourceTree = ""; }; @@ -69,6 +75,16 @@ path = Extensions; sourceTree = ""; }; + 2D13C2722BB20A82007081CA /* Location */ = { + isa = PBXGroup; + children = ( + 2D13C2772BB20AC9007081CA /* LocationScreen.swift */, + 2D13C2752BB20ABA007081CA /* LocationRowView.swift */, + 2D13C2732BB20AA6007081CA /* LocationViewModel.swift */, + ); + path = Location; + sourceTree = ""; + }; 2D9B68CB2BB190F30029E4D0 /* Azkars */ = { isa = PBXGroup; children = ( @@ -147,6 +163,7 @@ isa = PBXGroup; children = ( 2D9B68DA2BB1A9490029E4D0 /* PrayerTimes */, + 2D13C2722BB20A82007081CA /* Location */, 6A22480B2BAED7730094967B /* Names */, 2D9B68CB2BB190F30029E4D0 /* Azkars */, 2D13C2712BB204DC007081CA /* Extensions */, @@ -243,9 +260,12 @@ 2D9B68D92BB1A9410029E4D0 /* PrayerScreen.swift in Sources */, 2D9B68CF2BB1913A0029E4D0 /* AzkarChaptersScreen.swift in Sources */, 2D9B68CD2BB191270029E4D0 /* ChapterRow.swift in Sources */, + 2D13C2762BB20ABA007081CA /* LocationRowView.swift in Sources */, 2D9B68D42BB19AFB0029E4D0 /* ItemViewModel.swift in Sources */, + 2D13C2782BB20AC9007081CA /* LocationScreen.swift in Sources */, 6A22480F2BAED7960094967B /* NamesRowView.swift in Sources */, 6A22480D2BAED7840094967B /* NamesScreen.swift in Sources */, + 2D13C2742BB20AA6007081CA /* LocationViewModel.swift in Sources */, 6A787B1E2BAECF6F00DA0107 /* ContentView.swift in Sources */, 6A787B1C2BAECF6F00DA0107 /* MuslimDataExampleApp.swift in Sources */, 2D9B68D62BB19B0F0029E4D0 /* ItemRow.swift in Sources */, diff --git a/Example/MuslimDataExample/Location/LocationRowView.swift b/Example/MuslimDataExample/Location/LocationRowView.swift new file mode 100644 index 0000000..f9bdd68 --- /dev/null +++ b/Example/MuslimDataExample/Location/LocationRowView.swift @@ -0,0 +1,46 @@ +// +// LocationRowView.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import SwiftUI +import MuslimData + +/// Displays a single row of the prayer times. Includes the prayer name and time. +/// +/// - Parameters: +/// - location: The location instance. +/// - selectedLocation: The selected location instance. +struct LocationRowView: View { + var location: Location + @Binding var selectedLocation: Location + + var body: some View { + HStack { + VStack(alignment: .leading) { + Text(location.name) + .font(.headline) + Text(location.countryName) + } + + Spacer() + + if selectedLocation.id == location.id { + Image(systemName: "checkmark") + .foregroundColor(.accentColor) + } + } + .contentShape(Rectangle()) + .onTapGesture { + self.selectedLocation = location + } + } +} + +#Preview { + LocationRowView(location: Location.loadSavedLocation(), + selectedLocation: .constant(Location.loadSavedLocation()) + ) +} diff --git a/Example/MuslimDataExample/Location/LocationScreen.swift b/Example/MuslimDataExample/Location/LocationScreen.swift new file mode 100644 index 0000000..89ebc99 --- /dev/null +++ b/Example/MuslimDataExample/Location/LocationScreen.swift @@ -0,0 +1,64 @@ +// +// LocationScreen.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import SwiftUI +import MuslimData + +/// Location screen that displays the selected location and searching for locations. +struct LocationScreen: View { + @Environment(\.dismiss) private var dismiss + + var locationViewModel = LocationViewModel() + var prayerViewModel: PrayerViewModel + + @State var searchKeyword: String = "" + @State var selectedLocation: Location = Location.loadSavedLocation() + + var body: some View { + List { + Section(header: Text("Selected location")) { + VStack(alignment: .leading){ + Text(selectedLocation.name) + .font(.headline) + Text(selectedLocation.countryName) + } + } + + if locationViewModel.locations.count > 0 { + Section(header: Text("Search Result")) { + ForEach(locationViewModel.locations, id: \.id) { location in + LocationRowView(location: location, selectedLocation: $selectedLocation) + } + } + } + } + .listSectionSpacing(8) + .navigationTitle("Locations") + .searchable(text: $searchKeyword, + placement: .navigationBarDrawer(displayMode: .always)) + .onChange(of: searchKeyword) { oldValue, newValue in + if !newValue.isEmpty && newValue.count > 2 { + locationViewModel.searchResult(searchKeyword: newValue) + } else { + locationViewModel.locations.removeAll() + } + } + .toolbar { + Button { + selectedLocation.saveLocation() + prayerViewModel.updatePrayerTimes() + dismiss() + } label: { + Text("Save") + } + } + } +} + +#Preview { + LocationScreen(prayerViewModel: PrayerViewModel()) +} diff --git a/Example/MuslimDataExample/Location/LocationViewModel.swift b/Example/MuslimDataExample/Location/LocationViewModel.swift new file mode 100644 index 0000000..acec437 --- /dev/null +++ b/Example/MuslimDataExample/Location/LocationViewModel.swift @@ -0,0 +1,27 @@ +// +// LocationViewModel.swift +// Example +// +// Created by Kosrat Ahmed on 25/03/2024. +// + +import Foundation +import MuslimData + +@Observable +/// Manages the state for the location list and responsible for searching a location in the MuslimData. +class LocationViewModel { + var locations: [Location] = [] + + /// Search for location in the `MuslimRepository`. + /// - Parameter searchKeyword: Location search keyword. + func searchResult(searchKeyword: String) { + Task { + do { + locations = try await MuslimRepository().searchLocation(locationName: searchKeyword) ?? [] + } catch { + print("Error searching for locations: \(error.localizedDescription)") + } + } + } +} diff --git a/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift b/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift index 160de80..daded58 100644 --- a/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift +++ b/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift @@ -20,9 +20,9 @@ struct PrayerScreen: View { var prayerTimes: [String] { prayerViewModel.prayerTimes } - + var body: some View { - NavigationView { + NavigationStack { List { VStack(alignment: .leading) { Text("\(location.name), \(location.countryCode)") @@ -38,8 +38,8 @@ struct PrayerScreen: View { } .navigationTitle("My Prayers") .toolbar { - Button { - print("Navigate to location screen") + NavigationLink { + LocationScreen(prayerViewModel: prayerViewModel) } label: { Image("ic_location") } diff --git a/Example/MuslimDataExample/PrayerTimes/PrayerViewModel.swift b/Example/MuslimDataExample/PrayerTimes/PrayerViewModel.swift index 1c8eae1..403b0da 100644 --- a/Example/MuslimDataExample/PrayerTimes/PrayerViewModel.swift +++ b/Example/MuslimDataExample/PrayerTimes/PrayerViewModel.swift @@ -11,7 +11,7 @@ import MuslimData @Observable /// Manages the state for the prayer times and responsible for fetching data. class PrayerViewModel { - private(set) var location: Location + var location: Location private(set) var prayerTimes: [String] = [] private(set) var prayerNames = ["Fajr", "Sunrise", "Dhuhr", "Asr", "Maghrib", "Isha"] @@ -41,4 +41,10 @@ class PrayerViewModel { dateFormatter.dateFormat = "dd MMM yyyy" return dateFormatter.string(from: Date()) } + + /// Update location and prayer times. + func updatePrayerTimes() { + location = Location.loadSavedLocation() + getPrayerTimes() + } } From 573ed3309e831b571fb6fce6026c955b12f1023b Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Wed, 27 Mar 2024 01:01:30 +0300 Subject: [PATCH 34/44] Update prayer screen title --- Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift b/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift index daded58..994b497 100644 --- a/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift +++ b/Example/MuslimDataExample/PrayerTimes/PrayerScreen.swift @@ -36,7 +36,7 @@ struct PrayerScreen: View { } } } - .navigationTitle("My Prayers") + .navigationTitle("Prayer Times") .toolbar { NavigationLink { LocationScreen(prayerViewModel: prayerViewModel) From 0a14cedfe80d9a56406fb9ae1e1d37dff2b29581 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Wed, 27 Mar 2024 01:05:00 +0300 Subject: [PATCH 35/44] Update screenshots --- README.md | 2 +- screenshots/1-prayer-times.png | Bin 158355 -> 158798 bytes screenshots/2-locations-search.png | Bin 0 -> 317791 bytes screenshots/2-locations.png | Bin 180618 -> 127572 bytes screenshots/3-names.png | Bin 194947 -> 335990 bytes screenshots/4-azkars.png | Bin 206436 -> 366340 bytes screenshots/5-azkar-detail.png | Bin 414027 -> 523261 bytes 7 files changed, 1 insertion(+), 1 deletion(-) mode change 100755 => 100644 screenshots/1-prayer-times.png create mode 100644 screenshots/2-locations-search.png mode change 100755 => 100644 screenshots/2-locations.png mode change 100755 => 100644 screenshots/3-names.png mode change 100755 => 100644 screenshots/4-azkars.png mode change 100755 => 100644 screenshots/5-azkar-detail.png diff --git a/README.md b/README.md index fe9fbe9..e5cccd1 100755 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ If you're upgrading from version 1.x to version 2.x of `muslim-data-ios`, please To run the example project, clone the repo, and run `pod install` from the Example directory first. - + ## Requirements diff --git a/screenshots/1-prayer-times.png b/screenshots/1-prayer-times.png old mode 100755 new mode 100644 index d455bd03ab9ce0f777660730d7421f5b33dd25c5..58d0c31c368baa002f533d2fdcc8b67000741b10 GIT binary patch literal 158798 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%0Aq)pVvC0&~k9Nks%S= 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�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 diff --git a/screenshots/2-locations-search.png b/screenshots/2-locations-search.png new file mode 100644 index 0000000000000000000000000000000000000000..e536e029aec0c25f07bdea496d144fbd0a77f940 GIT binary patch literal 317791 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ȭ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 literal 0 HcmV?d00001 diff --git a/screenshots/2-locations.png b/screenshots/2-locations.png old mode 100755 new mode 100644 index 4920296b5b845a5426236a2656ac04e119d13da9..4cfa00b1d24448c71f0d9576444658f1e27c7448 GIT binary patch literal 127572 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

+SoQbGBzf; z#%ffb4H7t{^EBgZDEarzWk!PuyvlmS^}BvwuF1wd(IThtlQNJ#YqG@55~B` z8$F7==sk$_J}mN|xDfp12PK?MSsq%Hhk(&TZhFOL&x>_OYX-@lWUIFjSv#XG&8&lK z!@mZ0enK z%J@sG<|-;B`|L$+tRI770a8KLfOA^9~o^{(Dq|`)o{-M@IYUAAYy*a-*i0(+SQORl(v5 zL$Me$f_@#kzf+8V7Pb*=0k`KrZvSf?{#-vwUa%SihxR~3?w>dK*I&LsVTp$2dh&l9 zuV4QwN(*?^S5A}ErZG27(l}j zF9d-=GQ~p@l$+e0=9N^mtF0fnxh=MGM3&A2p|K?tw2vHJycKgx$VEy?sf;z0B)#F$ z8cMxAa|V%=l=ON(`r5eyl%X1!8C5I0U1XrE%Q%$nMLXXX5?SYH288*#7iT|V6Nb=0 zASxtWwhzJV?uTnE8&v3H0@$zeR0S=2@o$+SQG2Uq0 zdniZW?Etp|NrjNy>5gy;l9Uqv3+wO{A+Fiu@J1fnse4+Du1X#GCS6hC>%|QZjL8Ik z0-nGi+?RzhfPq$e8E&Q}(CdI!J%-y(R`;IpYm?{NKTQ$z%F=Igf1rSj)d)h!oGCSz0euCkZ4D9uO+dKRHQs4 zhFPo1QVoc8kh2+n%yQ_YMvED!{IdmbNUHkt5VxeYA23bYNBA zdme9c-P{TrkmSqvi~Hms(4nS*7Y;_M#oZI;_W>OcO^O$%c3UV~_iU8j1GVL}L2@SA zfTe(5>|!W!c=Tbg+~n4HnNffdx?=EyH@VAZ7lDWLVwYR>D>=X@6WdOH>@jw*sV?~q zxsfR~)0HZMZH?!#x58?wNY~#<%H{hAWk;?JnOY2~s%E>EvlD#us05)$- zXku-?Fhmh&spi4OkmLVBiYMmrK`utoK8S6 zX@RSUb$y_$#&Wcn2@q*EOgVI8WL6@g%Z%EAM{a>J)%Pd z(wl|1Anbf=Alu~+l>Ee7ul&9Gr$h<(UzV`SWGVDu%T3t8ns#DaPPE+jR%jU18C_mJ z3g^gzTmpTzxPYYd0V@H!MHtli^F<;k1WQLDkl7^23D88qSUol@jc}jM)Z!#S`GL!4 zj~R1{03@VsW%2jQoTV2JhBo;~JDUb|jexpQ|A26$zDBHED9L_!S>e`Gs=lEZ$@&*{ zq44~T>82oJx*(@iDZZS;1HdZ8JdaY=aI`2|#COCxXYp78XUc8tVNs4e9u;=FwC<%j zJ$72*H(hCCo$-~cNV^KyFwckh&$L0MdAKfANulm|OK4o1oTMUj;K}bh7S;yJaSoj} zDQqU?+a;^ZUBSddw>Tf-DV`kEaCO04@M8h_$d^hA65qPnS6ikpHsbW@MCW&x`ye+D zl4;MR86H@U^X;{fmUL2JTs=OU-7V5*euwm0| z$5H3`H9vS(d>baVC^{fKwA+X24$QW$NrTkrd+nP5ZA767TmM_Dj&oyr!n+~-d;KX!E`D@6`pus4 zD=k0y)Yy4y;FqP^%6%|`b!+(yqGlJynG&qgfVIEO!@Z{u)C?0mlV2E6BAP40r7g%S zfeubg>A2?^=YEl|*YoFo{QJYV!to(n`|QYsrRwuDQ8&({3%BpOthfgdP;fdwKdxHo zGiI(&nh#=W6Gw>Yv7s7f5XS2SpL1ErpJS7lldvsZ9YB2Dhyo%YqU=aDw%Bkgq1!uL z;|w+O)JD^=&PSoq^&Q9%WBiYJ?! z|8o&O_&@Q6U(^{PUV6=sKA+~k?S--U`1nwC_-j;qrRW zH~3q6#oKAOWt)PWi-iWji}L^y$q?8T77pk2btXVF9?oXcg;Qv?FNc>YaJ&IgSIB67 z0N#%l1DBqe2u*$C$c=O0Z z+Y~FQ85m@|54#PdTD-9{f$rX5r3Iw3vy(OU)he?w5ZhrpjdK?Pidpx+WgToG7=YMX zr02mnw~i0Hg?uzPhb>C`A_{OgJO;SyPh*>FFB}_t6F9iq3o3w4Sp^WY0ighkn9G%* zY;*ZMz~`^N7uG4+ZGbt7%{8^DvYC{(ZLo<8r(J*C+09_ER!;J0aFIQseGy2EytAx} z*lKn`HW8d@6iMr~@3xircx7x%*39exC~tp+ia+_&yI&AnCbt{wyN ztNK7x=K2I|x4Ujn)klRbfcXuPpt2Y%4ZqJ_I&-;_g$PZi26TCLbQvx=#c#dEThEe; z%qE0oAAW-p!(fAesG3S)IN(h00f%4D$7Ka2LxE^WvD^6J7F+k)X)x0cdxT&=+st{0 z)b4~+o!eM+a6HS@h0Sgjs__nd)&}JGXJD^!qB$VXn=(t!lI?ZM# zDGFuH7z7;FfaFsLus>c5Pgc&K2KM+g~L)jOopO# zTmDxtVf%M5@kK*67Fme<6c9(QCk9M@V2Dy&-4fU`hfGiOf^sW>&Vz%rdomem>?HIUbY5VcnhTw>&vWF z{!~2JmD^lV-0bmMuppjiCb$7+zAOhUJXl(0E4r>Jfvy`M-QA8l{U@g!qSTDM^Hi9=&u@YkJA zp%kFF%u98tv-X|BX#7L^$hDJ5Ww;aIm>3%H?zY0i1#76lWxKEpyUkB#>0d^C!h( z3kEF=<&@7{v?a&w|ClI%GC}D(G5lL_Jn%3u{6O&osxnGMgRdzz;}xp>d15 zdpL+I=f~}Z&oZ{JG82C5=F>#I^e=$V%+j$VvqV85{p^;*IZD)t-XQ#Z*nC=RZxjM* zfDen221@OG(3QcFF+ktv(- zC`5zH#jXri9l01Av_6X%aD^)*Z^G} zjO=?R5HIB8o!fdL4DqtnuIKgg1p;l?ie~}%cP&%$wG|a96Mn*OYM(jCG>)ef-%MbA zLKJRKconTcLdG7kKyU?0myTkOKWO%P^L!m7l(g0`!#k$E<>a~twgrIL8z@f;i219l zlQ*~^cWmD-pG$n4UEAc=2{SGzQ~dcH-}!1mMGd}*I|cS;mkVmtVY#~qThf- ze9ZB!mDkRjy!Woe2!Z?D@ZepSjU-dSI@?y9rB4@-_!QnbE5S|X-TnlpUu8*bX$cba zbsWE_6>8EOb3NVsa&Jd;eiq!@;^%9}uM6((`~>SwxWj$vTqGu0`3EHNrq`v1ji)Dv zyT+r;9vHTw3QyY>FW1)^R}JI z;I#=j!lVJgebY?&o+onp2ZY5bu*lnPGYW)PLnEOM&c$DO&aL&MGxo0Z1txu$wP7S< zvVFcgYHL|Xy4qu{XSR>I?u&QCB(f!ir15)7m?&f#Y`_3m{EcdC?>o47M{j2Mz8hqJ z##baJKDm0?hj#PZyCq1{`xz|{X74-S@t9SW8aFH(E z{WKaXzG4!)ADfeW)WFKOmx_6QzW;Rg>V=qrtPY!Cc6*!D?|WNb&r@qM+!e5Sc^k5G zb2}XP>QAJxS<{>o-7 z#WJzG={!xtbs&tP-`CHyGoQ|ulm>iXCY=#q!&RBomOH|!c2+WcAP%Z%nc})7ZDQ^p z$~*vas^+4ibGk778}|am{!f4^>ZT|5!zNF5pV|WeZ4P#e>auWgDZmA4g2rG?Wq@Rj zXFeF>ug{XO-S%)SGtjl9_Vdw3b}Dx8?gf~L63}Sn-|5w>44kuHnm}+yg{8qR*{Tak+vH2Qk`a0v0lSCKIbaMT-qx+fN@rTGwIDp z=TpvlHlT;*wAN$+(n=5?+vu~oa0@Y&i~V?`-U+&9?#Mvt(}rB=;QR&dq_G);>hJA5Aj$`Z#-l&{J_Z#5k()_8;~P{=iqTEh1X?kQWO`O{C9PlPo`>q;w0@<#K>!RjM z1#bkQ8s|KpP@AWD&{2aNW?R_IZcSOHcQcFhq2fO_^M)iRh}b)wC9w9)FsIlTrb9N0 zG;QS!iW1O5H#p2xN+SyA@kVAen}ytV9uY&9AjDj@!Pba+j+oeVn@blX_96ERkk*yZ zJQB*S8K2baWbO@(Kj(G_Zi+&iabdAcI+lX^-iKlkyJY63A#Zbi9>hSzzti~AJ8EoG zZ=QJdYu$7X8iL?99uvw@TFo>oexf;^4_OMcK$cM-)xlq^4dukvS$zZ21k$PW16*I` z_CZE&72dA)4Y+?+NS(_=+^lY+9AM|q(11#dp{HAoj$R)E^vtRsX=-)_OSTfx|+_8*W_ zIN?l{+>bz*y%W|Q-5oN1+0n6k+*YUN6ki=+M|U?A$52kOjjBvTIX-reSAz&v}4y5T*h?9BA4L?i& zLm+m_2E`gB*A|bFX2cai;)xAksmm*PW%i~$kTFt`&2q+E=U0>jKoZh^i6F84p(PAn zq?|CF=i~vl)*S}*>l2Mj!g)%q`hvOO8O;MSxKknV#kDU|Z{NNxIv{PFV`^rWSj?nd z8C3!2)nRTdRWPPi?k*Pwp$HRp)~738M|;sM&G+nZ+_SsLT&B)g5@kDbWu&Eh?#lxQ zBipfGNB2AC6?VUBoV8r4Vl_+>H&FCxb74DhQ8vYVqF6Q0p(9bT##V2<%1Wby*AM@6 zPh}$p54T>w5()Iw3(CPNnJ0!H?XQzIC{;noZ8DwKIe`Ob%G0fTUw6kHlnSzdJ&lOf zaOYXdRiawVPPBb@bi_W(@F8?Y%iw~(8xAmrGJ9zaBY?3|uK7?LTk#gq<{K{usER^W z-0ASlx3jdp@o0^dwFy7u-0PYJw6+W3l5;75<2(9{SQeUM<^Ei)1E~nu6w5c z08EYATVczu!QOXE#y!z$aMqhgi(LqN`jY45wZ!_2(sF@XsXv^u5K_UTJ8g2q`_f(F{@Ngc-y=Ch_ zns*e^HhU`y3#&Pp2j8*KX%n;eey{EySm9SogPE1{a7L}Z@W*i`Hk)n}}dj#@@r>XR}9k9aQ z90y-o*UtAg^A8C?`CnUc_#VX4EV|W#5rMQ1y~PviN*C*1D5{wb2dW#KXYu)uNG9?D zALu=v9jYKRrE|ko7d)_ftjm}0qAKl`eOA{WYPeq@<)*!shdbRY3qYv$2D*t_=+*Gep-x3Ztm@P_WvbO3I(Atz7fWCEj(* zB~SCE*`wgJt_46~O~*ABep&_o?OgLgJ3g?pn4IP3@1OI}jMqwo;cQwj8szdlQCF7_@3e;$a|JIt=^0` zgjC|+AG2e)P_O^vWY^<$V{x?qzyhM&0R}B3?Of)MlX-mhZr`9_g#C>kptzO-M2s#^ z;#tb`owtzNHw;Zx_@l^b-)?b^05VdoYU{kk5hzhZ3)<%O3DO6?upY;0lfOyrHE}4| z7Bl<({Z`UQ3+4}EjxP5U4(`1ltyBvL7YxxB8zEVWAlhRblxReqni!lm#yXF)`gZr% zN5L@b&Qq6ahxGdb?yA}HXn0`u+{oJl9yMuTXH*uOMJE;T`ax{c<^bWa9ELt>nE(Z6 zYGmVX^;kS{ol!eJ#I;z){x62;Uq!GlXO%}rCoq;oW`6>(lX}z~*9N<#wMSsm;a?y9S)U!clbes@iHVm%%kB?v*m&WBK^5 zxie=rZ1N}xp1Nihk>SH?s}Y<)K$>wm$*~wQH1Dks?sXnN$@dyOiKkU^+C~7W1ZweM zw1guf`VIo)3}Isv#fCe-lKYmgb_+}H%Fq6nQh&d4O1z6dmwRv5ua4?E+Nd@)Ehh_g ze)7MRZutx&=5??^VO?Xt80}BZ$H$kx%hFgHrdp)UkzVij7~zG2rSm-jgVF7^VM634 z1%Zm6vLCB$gjvCp#;cF!y&}Bvlik;l({^7s-9XA|V_-GkhF9Gu_azYc5xLj)jV0qn zIxae~!&+jXdRFCBjFIA%>5{h?FOP-|abNleCcMxMqB6!v>aEvjFXVhw?#ySuW-K>*O``%!LC%A4?G<3 zjfSOPI1~E3Bv55PPa_ichVO~R;Fp(bPsvBK%(QMT61OlUbH_!I6(Qh2!4Kwr&L!s8BVeagUbVgqO5@MY6{D^tg|Zv22* z(mf5_VZ2+;!{%J2?fin`n3`$#)-HNMCnwrwgHwlh;qwaud75PrePxO)%|~n34uN`4 z4OuQo*$jf16R)VB@gb9Z;B{D#EPX68Gn#4;MlP@jL`CqmX~!ZzesXmh?Rhxsk79CB@}X$j>5^$KE{H^Bb@HDf0*sseJKo^jm)oH39;8-}{9^nc$8 z5Sk)kTgh}&1i_W@3DX$yDoRNBraG4sUHRJWjA~^)%pnR!Rds>SDK+GsfK2&Q1 zy(XHLV}x9_|0%!^Yuu&Q&behn84yJ=ReynH`n@@85~z0;(16CgM<{D*Ql8n>Gn`rc z^H%X7z*j&fTo+FT6q1}wZy1l4Q>V*xCeiVdE;jDgYuifuvz0XNytUubQdU$nJoN0l za(H-nmgGeO@oe~gJ76+`SwU^mCc3ArSi5RaQ@vUnC?+$L^uNo#PV5i@FduH~TO^Vd zq}GF3FB393;&acl)G{ z);uceeWKWBF5*w%L*$@;ot zn;Qbr!X+sHo3!e?Z_kMh79~3J6QM!3&k_D%x*A%75bwut$+4cta_P$rNGQq@&6H_`Op4!rI3Px_g3(~yfd z=h3ZxxMN?F@rjHp8b_CBM@DeBr($WRv7_&@{%#7!bGpNEn9}tP4h1OSt_L@&`cw}G z37tHsN1z$?dP>Td)<{_Ap0@ytumhapm*uBY&e7mTXoy=f5CdAlKn^G~!=^323>2Hg zH96!O&LKcJXL!K}YL4k)(QcqL852*(OYBj|*STtqpYwhzIcL7Nx7RUWs(k_!HIsKf zUt`g+E%Cuz5TAbFArr=E(1U!Plk6@IB}Iuw8JxT*-Q1kNHDHia91jXZIa3i;Waw$k zB8!jA$W}ah5a|ZI%OfX>Rlwu^ce~5+S*O%bfo~?72?X>JuZOou@=t>>UMK-d02;^4 z#||^K)5<3?f)*3UMwhyVfa$wHW<&EHNMbno0hQ}FoX zMS5cYqu!zH-l%4;W9oVaQ-?L+e3=ONe|+eJo69>FJ_`s<@62PV%WR44ov;Kz%C!*0 zbQ?*-#JGZFiCdB2$;+tl;pVqRf|>$S2DIdtNUF7i-#?UjKVrh(Djg)0(SQsx{h zPT${@^|fcntg#F4&iYf`WYfpHv0CT{q8tX0vEWJEI;e%q9xp`p83`H{_+b2Yradr` zpv|V#>%G$(V2OxR#uXwg)%6S8HxS++xM^zNYFp;@mo#%6Db#|bwOWC~6VK4j(R!p0 z3jX@3z5VZn@{0o*=X-iPPtsA7TP`zRB|JmoHGQEP^eWlGb*l3PCC!0WD?Cv?xB z^j}Kd51Cy-V-1T|rFmU^X+03HWhD*AeFBYtdupE{BYBfUN8C(#)iuRq>uX%^^}*DS zZp%*5u?F61pmpW3X<*gvPFFW5I+)>HZ|ANKG62mwy(R(myRcBIap~@uqMp+;KNy6| zJXCg8iReYu0_=b3`VhFIMAAnq5!IS^(M=xfMbAPgN7;x4Pr{@co{KW#ng68@0v40< z5T`t%L}st!$^|s`0_d<)g3^Ee5_l{4kIs9Cb3tY0M(v@w38P=&37I-BN)2=GKcz!d zBGRImbkuDdw@vH5zn!^vWvE4vXByN7B)$ps5@a>30RSUvYW22so=m_&_urKTu(&Fz^S_d8R(& zn;mqF{80XQUQvS=v@cJ7+Jj<3@}VXuzccDotBw@uFkHO&#^J~8g@O6xbf2HV>ned3 zJS!ZA36ijbHsu`WbeWEHskfUJLgYeWpsUDnsfY9QtB)U#IvEl;)XdVCDLncL6j07^ z=GLKr&>B!$Q3l1}RmAb<%qzoxrW&w^;B>|SP=F-NW~mPVSN*RmLr8Gf_5NbCp4_* zw(w?oL&DJhkKrHG0eOu33??#TROlth=2*UdmB{iu+$lDAuLK%b0Yb`!#YVhD;Y9nu zHDV8o#C5X94jfy&%4iPLsw^WZ5MJ?48KIk0H8ss~KMd_V!thb?tiRLVRZ0Nyk!`UV z{Su)$hhGC*H}~kqWKWho2~O;}NxI)1jFR|gc&I(a%EjNt=r@E5koi|~#kC>Ve~FI# z{>rb*|L=SMTbIAQ`v3L|2tEII9{ztm4}Odq!4Kd1b9wXJDrhy;CCxhRKDl-wzsX*WfIRpUzK>aBRa>O=T&4} zqqJkjQ+jyJWCHGc%MyW!NG_vu%~XF{Y(F|2XjY_I#CyrIabxjfxog zM1%L_4iOP)ScVWwfD9@Od;VPe$6xlo081il?NQ84BR9QpV>2`2Fl)#U<0`V6VTEqP zNO8)b_v{_23(;1cOf^yV|7j3>g&*QTM}`7jpOq25>;n|jy9!Ik$#aG zoyYS%=UbTn3??LTFNA2APkk=>8vTjJ8Rod&9&P`hw>XP`0ftx@@r_)6C6|!XS;W;% zWmZKUF zjue#KyYpW+f8)oQ1f%4mP6e2y^Pag>#NJ!m|I39&aM+8#$7Df^0dNqL_o&zSLFd+2N(K9mDsHDYBXI_kbm`gH%D|2oLRAM4M)PcKv<1*xXs z6EE#Nl8A%+6C(b-I`KH{&1v?bsx0&r)(+hvlKTWV(f@TU{Z??M*wSbg{pD=m{S-qf zEm;58@4XE2C7rtuF7o0EOs82s82i80X6nXrhxGnr+*LxMO(T2zvcry!jt?6f*1O?r z2YVF%_3@-Tl5e;rY6)*yU!^sk|M|T&z+`u+w;Z$(k2iUQ-M)MG9p>N-506O}$T@!% z^)yP7+07LVx}xZf<}H)XmBIhoH@1YJAD=#>^oOE!4v!FY<-_eecWA$wSpvn_a^uby zRQ;7-JIL*90veN&?w^5wpeQ?V`Kg-p`|bWK|Mj@CSGdvD>20V3!1M=6 zXbUE`!b$MnA=P?YX*H@2=UrzUFrIOi77_9D#Gp}2%+9CFHRc0P-48ZaG0xJB%s^$7 zNvFDFy2%4f{P;UO%<~A3V$gv1$Yc>tf_XMDv{V)MDf*@hyDM$W(Hg_9zK11{HD#NGnnw< zT%y_8&oBrRvYD)+1>HQP%|}>swQ3~DaoHW2;ww8g=d7w{Q+DMIc|a$1Mr}>HINyuT z2@-$|afhJAgLZ|9l3(@yapl}af@&Wp0j3q#lbu-po@q8t83-cAA@#u*8Hx!P-{3%q zJyJ7!d#L%6z}Ye=uv(cvcW&3#FIbmWYfH?46r3KD+T{>-Sob-HKXjEcc0FDDRSAZ$&ZqHNl??!_`YkQ> z{F{mVmR|1J7-~@ZaRYbC;keo_KyPa4Nw617deft>Upk$f;Vo%HX_|q z-{k%8OgK5WD{s?Cggr}>f;x}R{^9#t5NeY^$yQ97LBT! zSB*uj^^r{Or>Yl$mVM?50C4ZhMS*@{yxtGW_=( zB~erK7KNO;`jquY5SBq#1vcRvnSwesMRxqK%TEcyS4Nk3vyO{UOHeB3R3DUD&*th8 zGr0V;1b&=!AYosE=RCPtRjxEa7?aN1R!O9Yhqlsajjl9IIwDdf^=4X0=$KQ)3OVq5 z;~yOauh7i+I|^6*6>M-<#-7W%7j5nf5WEzodfNya5pMSRAX-dj0x! z^5b`xW?GBxxm#0LS4_nPUxSP+b3&oy-y8c=Cv`hB!2jw0YBM;1=bGqNNar9QSpXt`Rnqo zWHH_23oRd0OD`@#T3}Z}TwJP66LDuDHhCke$o1Q&lmfe@LAlC101sGfuu3Z<$hVS_ z!z9`5N_1nHZIp>$vJeCz8<#yKlO0hrB4=7$S39gFalLZXN~OY>wQhlY)OMB2dfM`f z{?9KlJEzb(yUK@P;2#W zPv$w=N2P!nj4FN==!@iLGiVI~U`)>(fTFp@R+e-&7T}Yk#1NR}j+`NJaVu=+p}5IU zQMQuMJt%kZw@TMLaO%y@lC707x(ZZ+0I2EJr_DTW3wtM=UQv{wN;-y1w!~r+NrwL!WFk$Gt_`6Hf(y;d^ zwj)zYZXLIo55XFJG%|<0e;La>GAyVsG!g?8?7gg~nCc+H ziwhh)OLIG3$R2Mn{rCPz?B{rheNRRIg~>u@wkuEvq7s0;|?P43?29oil|bn!FP zs>(~*_1F(b83%nwuheYk-ayP&+&2T|31`C%jRR9f0!YO`i*0|JmyF3ujLJ8_MC73aN3dy8!w=TgOyfj2b41 z-wnnG>lYZe%Qt{==U*$~!j@19KbuEHdWN2%3+sED?~Dr%z{6lJ*QQl&8s{bs6wXFS zAovW8zl$1j8%rfW^F1HM$L3;#j9VT|D-U2tmZ!}XV}t?_v<2ohMvXTb5h3JbFT9WphK&}Ah@VP{JTfN=L^6I zH(*LaSv-I1289cTm$2T;cnsD@fTQnz`Pl1c!9pqxnqqj_K1SaSUQ5)*e zbKN;=oYXs=bq=;BVZrA=vVSMco|9w8jdvh|GWL{Oj=6i#=A`xYxr6w5c*vl+q_xCT zRX#f&wgu37o#XA3!??4sup&cx$Gz)&jyJ1|S}SX(0f; zxcYcuYstwfBhol(8_2)Z!QQ6d-GOZq!~Tjkc{uL>81;d8Cy%d#E-J%AHl%f{bnxvO=%+6 zzphVHOJwIgDguRi5fbG5E?pW&8z@Sn^I>UM1W)66Ag{JKI8)Au1&>XzdpA1W`{B+ zu^F=;1=IHTQYn-rKDxD%_=xOCZ+f%|lfTbhESNUHWt|ggM%rdLWs{*=ES^D&N6tko z`#HlHL3!Bd4u(B8WWRq*pk1 zx`n-rFyK1X9XW^!q%&TA=TIrK?{xog{x)DOKpxn&#-Ud}rAjo|s3<+SA(@%m(lA(R z$$U>a_kkhq(r`Iq&gA=4&!{fY^mA~JwCTpn;k}L5ikWU1uFt_%nd}THI4l;)%myp% zKd>T@GJic8AMFd+aEu?|KJ*!TTbxq3n0@1DSbTH72M0-#?SjiNu-j_-{ccCZTMf}M zX02*a?|>Ek*vIPkq$V&4nU06L?A;!6Y>mO?c%b>Zvv?~k;g=vU!XNFzW%9`sEjQ`>de~+pK&~i?ojf^kZc@>E97nD)~C^7W?z-o|97;MMj=C-Vg6U z!V2U87l+b3yT&NcaBA}hPhbfxggJyz$Eg}mDQkg-!l`MMZJZFl`~6H#Yvee6zoAc# zgM#m$gVTT|RgvAos~p@8>HIDYJb~L>yn75F9KdGX8)HIW7qe+SZ@VstQ0J?ljut4I zYd0~;{6YtH369JAlGZg14(BJ}_eSux7_T;0&Y2M%C4T#SV2Il3ySP!2JoO@@6th?> zvkPu%BqJJ*xja+~Z~c-yi8!MM*d(}>Tyl5|uise4>3!0_ePADnWB)k*u*r!&>d3-z zd@s8xr`^*xS#tiQcZ6LpUAvvPy`#aIlAHV`6BkI8~{@v6J$Yb#93D0BYPg z0_yW{Mm~*HlJhwTr9O|;!4i4Qcn&2{w}%2)yq3~2sr7OZ5s_4z<>3K{u9&OWd3c2l zw=z?Wb5K5xI+Dg5fO)R9%}!}xv<;{JXL8(l%j}PNB2_Pv~NA23e5n0O2yBmnk#>>$Y!G>VF zT3ge)VNRT#8vOt!rYnjmIqJb^uKf0{A#}Q0Me@)fO8HrMuglQ^dz^3-!M92*ae)y4 zcg;|2(fsskrQ|KYR)L;atx)i?L7E542&4dBdYLRs5gt#yU2xn zEqLTP3}7T2hC4f3BZFDup$tAVX*{m`-Aq=8l_C0|Y@nsvCY)2cb7a9LO!mI-c?>+t zt&y|RhD9nD*&D1$q9N1M(?0g!UxOG$7r^?xSnc?|I`(e^Hx(3;l2LksxE0w@p&?02 zRrU5ouesK6K+xmIRBQsG0r}aP8QmH3baS5=a8-@Z=(a@_H^LbOd}`m?w-CH)W-;I@ zzNE=0C2CXNpRFRebDy!>eF!-I1d4dwjl3Pn0q3GPdclnzr*BO5&@2SRXZSNsFYpey zk;L_y0v43d^JmBKx9Q7%10et^xi+ltGCxVi4O^AqZSn;ZaM8g)TP6Pyrje!1k`rii#<5%)6q2 zgg)mf_JiHf_D`*aD0uBm4B#1)P5OgH86rcsb5v;_eorpXW*6-O4!E?PB>*28wA1h# zlp4v@*I-?G$YDNMPuE}Mw9Pb7X`iQ%r34Y>J=)5y-ojGjn>EI;fNJQcWNVO_%tVET z-OkE7E4`u}ygXNGgOsyAuc^lvlV1F??tCPd)x|thk8|&BvDWvEgdYxAG31!PZrUVx67|3kFbWG?u)LSd=~Y>#5II zS@@`?Tf(7F_Yg|mm<3tu3>hjLn010eEObsZux)Se260>w%z z!e*7iefQXFPX|K!E^!sQs6KXFgvVMX4poGt+pmlQ?4VGFa-OS#q=7*gYp|P^ZI7bC zC>^fOWnz}v;gS0?b);AT1G%CH6r9JErX?8gX-UooycXy~k9!X^UXIciSb4gh2sp{A z_t)>ON$cfsXJVY=WXJBwKo|>1E-ccvnO}EMijY=BHGqPXHfNQJmiXDu0{we&LcvPi zBqoOdSAPA_@|-iwYEp#y)lLd`A*1#?VpztPXGav5ZT+=eHjDG`GwrwA?2#b$^`dZE zDvL})`_H7=YyIBm5jc`%5>)wCSLp7`yBY)&U`rJxlt+U2rXka~Dhv`}^eW-==MDcm zN2bOs@xUbn0SI|rFF71Gyg+*jsASUFG^@$RbI|eRvvlU7hFNzKr>3UCBq|W<0YA%=y6L!=b>Rcxphg9y$0^rcTqGcOLa~5IxB)|O6MY1%JP`s>+YBRyIZV_qr4{cm})!{7hmXAoiLs;O**9yGsQh3X}57v9;rrjl*+5yvt{f5?1Yo&+C@8RGi-OedDE7 zU4c6h!W{vuc>jUB2^dmz23#DLqkP(A`Oflh@%WuIwKa7B8CeQb%A-JlwTk#4cR{!+ z;n61$1@TU|ng}|-WJ5pcd6B?h2>vK;uOeHDa@_ZP&avP2rfs7WWt+y|21{luscJbq zK>No?SZi=;`>s${L4GP1 z_W7Qdf->&9(t z$>u7I6$(=Q&>D|5$O{N+XeWjLK*0hMO6bXHBy9!9)!O%e;KN?RBX6pJEzH^jb z9L8JOI;B*o@HJ~20W1%s2Xwm&n;~|qPa%7_n=lug{3j~!J)Rx2tQN^ z2kRJF9?Je|_Q{!P5KJuq(O_y$#4Tz%xsRQ8PpvOJYV#nxYg`sQ=~u$orjo)GB`84| zm3~m~@{KL5MNuM(N~LIW%K3y<4f4zETCYHWPd=scEL!X{J(Yw>6$#V#WRJiW=9=Nl zQ^}3*=V(qwV$NV78NYjJ%Qw%Oy{_AMP^pzfATfVFqR$55jHgjcX98M71+|Hzx7wDgQ(hg0> z3jRJNb2bggJk29K@x9MT&uv4xPg$!$aUdYJ>hS@ zoVHWl-CfRd)^p1V$W3~^k30B4W%vhZ#yuJfWTl@01un8b{EB*bqe1)6RJ*o@&?Ffs zL|mTPA+adG8d%ps^~Z3ML)_J9yOZ}@X%D(X=qG(&CU+CLxBvORLJSKZ%d*?zppu5f zaD^%7k3BwvVRhq`g!5Z%`4~Yi^(#M@?q7He7C!bJkopV~e=~}R{utV@n2NP#t#aZ# z{_Qi%2~7gDPvR4sy^ZYb`)Se1zjuK7cVDQOFf4pc%XCPfqqZ>m3O0)0V75Qr`;6vn zfFURY{>qyw-&Rlc#ZOsD-e>*UI!SLa!h=*rIJ%1_lNi7inEYPUUWoGdrKO zgbX>10o0-a(B(s4he4r}spz^Ff1H)t1`JZ8*NAI8FvZ+U50UP#Ul#;q80M0NT?sf9 z;QiZN?$~+P$U3Z~P88b75y;KmYVmsLLg?D*Bk}#=*#NCFdgb8R!!oA+WK2Y~V#)op zba2TTx<9t`PPls`<1mj(BS5|!?9Aa>tG&sY+EeWy`(w2~Q^&7eDm@?7U03`iwYBxR zwO#PgC$oWFeCsQJ{;Ic-on077UPswGH9sd&gJD*U?H3?9+^27Azu^7xPjHRFSt!0d zuzHnejMu9za{jZAql=gl2y})c@Q24(TaIu!fhiyJfQ@bH zuaCDmuY6?vbLT!?a`@y?>4=QsbWz2MwyA{(w}jp^JiHGwe4jq)j$Zk_o7Rs*NPhjU zJT2lm*7A(rcaPdG+Wsk$s!?qyQb9rCenZ34*ZXC&*r$VfV1qs8&Vgdafj^Grj z>$`9s(s4ecx;P%?>37TX4#pdysrh^7JpX!{a@);UHQaLPwXI5}NlrLKg-I>L)Yvqq zWL}QQa!pCXuh{517S>eY8`+Ea7RUd226+nob>Qa8+p0Gc6KQP#>gHx+V1iCLb*+m- zg>mpgx|ZENKKPA?EO%8ECiY${6$Ur-TYEU`(ow^~63Ua2S6_ z)K!PaED4fCl37ap;S(2R^#=gHq)Pz32))9sCl$qMX))-sJ#sHPs#;*P8-e^r7iU%h z3&mwKY=3s)rh|5zhAEsM)Zf^&vNmlDqy=9uo?V*S;YuCg;N;cf8nYk!wDA}9hh#vz zl?qZBX*(X2Er8}UYHQFmkKM36hTVQS!FYY@TbopH&WBel?LBS!`#Wp=)uMgS*LR_+ z{M+EmpB(F9TmZ&ZG-OfPqcJJtoDM6o7_|?`~RbersEkM7OQ9Q3Da2J`|j^Lap<_RThXnG1y zsa)QZR4p=+-Sie&nXkv|*pVf01Dq(LTe_?Lx*x;<^~(axbQ3lCK`_=8@Tw{c+OHb` z^f7K->Y%kK6(Z+z##R+n-I5%!808da3DWgQ<(fU)itSOStXq#)Tpn5sN5q1l;o?fK znx&*Dg{=b5T0McBr&~Z6cII-~WS~eik7j9Isel=&c$yTPU$@cUW@p^nFhQLyF7T=* z_vfv_3dgY?O=V94z|1TKSU*+@SM%-Erd@`40lKIC5ODZ*+O#lMrcr<3E0`VSEt!me zd3U*~d2?%8$WniZtW)+$YT^0RIwfTa#bdHq`)jPbtrp34M!FxM-s61t12> zSlq#mIj=fV9F%_Oe?{8)P)BFNdPzj>>P7-B45uCuZQZ9IawEAH2z5 zM@W~(VHzt9=R-Z0M)M)qimX(Mn;v1|D63mN1pv;{&7#iH;tk$B5=@f*SxNu$Rr*pOJR>CH zr4dnilS#=u$3taE!Fr}%JSN}-#=ELl6{;#Pm z%ttS!v7I$bEcIR7@`N1)x0EgP)vzRB;XoNs9mE}>_FSEeahqVHXdW_`o4Iz`>Js~C z=QfVMRQsyQ#8iH&duRyF&&xb0-2F2>GxDm86c+K?WKqE)IAO-)U)d0@=$;FFV2Z6? z^7Z&Bbys-rqi+!i+UfdeUSx&Kw~`>nu6Z;7bmQn46Sc*VjJowczJKgJ)*~r>a9&)x zqDPBZqN6hkm^49QzyRA3B5?E~T=2-bV!b)5;H7*%Bdt$h?A;aDZOXoP^zvy^6dk)B z7j9;oZp%wK3J>wWoFHXrkpY}5%Pav2daUGYfB+_kJPLFu_#|00Do(7*Z$vz{5BfV~ z<3!zl&W&niLu9Mu&08z7N-GYNUH#t3(o&Xoo86aY#=Zh*I>^_*P=(r=@Gl(qy!KqP z=`+WNurG!)IwiwP%4&{@C1SZJ47LZ9R9MNkAt{T8n%+qiPFm7n-B4|%$(+?zHV4r| zl{W-%aFZ3&;GgZuZ@Q_*Py4ufFd?W1m&TPqnl;OX zRCy!DhpsZ9o5stpflobj8W8hIbq42*&|swPFe!!YNHya38MM3_`@p)$4AE}521DF7 z@^zeGKm|3xDEQ+JyreMNnrI)KhnZ{wc+wAIxDlZM#3_J^x;9zg5RKV_ndV z<7vKx*qgZM$|~6TOg)Tgge3jRN-?2nSE(Gh~_1>`mzkNAaQQG#c43$&8@B7%5l z`U=>I-p5j)W@~srn*_!IDF8qD3*!C`{Y-VD`u$Cj&}qdyh@$V-l8p}pFh^99GVy`N z7W~pnPUVILyFRvQkmO)8S{wU(9*yxDCW=;rWzuVd%-UoXbH|l zv?42{tf7W8OKFLifg<=FrNeg*bKEvFJBx*jKiwId+wq3-bS6m~5rez3I%N%R2Yu7j z5Q}Kp<`@mTR@3W(&+fH+xd6|s+T?kH0gDSNbKad4R*;)b(r2z@Q zIt0mULAz!{iJg11m3t0&3Hy}EJeyuse&oS=kjoJ^8tYg*8Q4X3#5q&L1C~9DOgUFQ za=8lCe&Pg7(Q6ZH#17V}_kxB?PB*XDupBHJDl0jS)F)T5!X@?_WGYG64D{U4D}roG zK)+Dnt@(VP53i}p&monLt#TSk>KNiF!{N0@MQK5dg-5P0l?)|Uz>{``IiVFx_;ru_ za@4}1c6wftKtFx(i(xlj-F_NF?S)Xph#GzLEQBp)TX&ebn7|Dl%_+!~VG+r@-C+X^ z4Sn19_C&VEiw^& z!xYR!_o{05`KM4wJz|?dBI#CiovomVlLF*k!)DKU@z8~ws>T{oD@*f{3L0yl1Q=>| zo8q1p~|Har??ifTr}&~z-Dzh z))02DwTEgGXjZ4KF9S8)`O=qD$Z%iEtD9;r5$hLM)Yo*bxlz@VzsOg&AKB#RR~_qQ zv$596O8ZRtGos`X2(BOs#P#i3;`Qs&{=PNAQar39kOgxj=xCCqv;!mp8L4Lc$akDH ztPuky{O;Is1Wql-=)hnu_LKB{i;+OeUaPMo_G1H;+4s)bjNgH+_(il^j zEG%4E&=4_OgfZozSuv7;6(oMJ>V2fK+rP>Y8?U6I^JyVs%7xw2%duFuAvLrQd*!&c zbVKmS`st0Gchi6@ENJt&`LqN2rvk?(_7|G`203pn(sViF-qfO)7m^6F@A10S%$RHfRvNxp7gsbu%%?t0UF z;2ansc_4aiz)(2_z`lDl)I7xw4tkc!kJ`Jv6pM$v&@PsfRfG8>5Xx7zXOR)Qfw?zt z2onHzrDkt{?AJjMrlB$;Wf*t^-QLU-EYB4I{W)^bi^4FW4V}!TZyR$-n;t?3qXM?V z-^abfm81!*KT$yD5_;g&(~_P7Yuyda*XrahRNhzHdbUZ}iDLvDl+3t$mR^&``n&2i z#ZtB1B>7UYeX}iVf+08Urp?RZpEnzE-P*JlXTs7;ft)S89A4xi&hu2VnRsld&)Ib)Euj zt%$RkljCxE4-&Wpxi^V|%{ZODYQ%2qZiquxzg)=byN>#@c_llG%n9ZQx}Ow`Yvw}$ zbPyS77%PTe>f;nzuzj&i38Zc)$LO-3X4z`%M%>Y^)VQ-07v_blC%#60Le( z_b#B#&aE5WQCZl3FA);&wnVbc}#1Ta=j z(C8N#3LA1hD+c;LXOaiHDu)xQC@Gy5^G#SN`mBeono@`%z0F!!8O12}fbIkv7(dFS z$zW+{Y;R7|9=PL*_Kx!zX-=_B5Q)t~&R+tRqAZU>m}R; z-=^?Bfi)92zoZ?%jJ&92=wO;Wbk0=d1Uw3GPpJZiLc6mWOToEEy=(Tw&2tLqXLIua|TaG06(Z#%a9L4hTv72|Of!gI;esty|PAjk;9&brL zkE{Wig89I@{h1K?(Vz(@1whC;8EDf)QIqLRzPia-qY{!xC#mm)zrKNx&T=-}i)uO` z=BENp2b5r5prAo%xm|0WDWX$MP$jP@0%m}FZqeT z?g6cNqc$)kkfcO4V+2_;)f!^+?nunO!m8Yg=ekOXw9RwU;MwZemD_)@1bZT#3i!d7 zV=2GbcW>T*kE+)#Myu%>#6ux!hj3&{tpA zkR?MFE%Rjh^+9v_YIGs zN!U^iH#7L&Q_W2Ja;J$50-vToqYhYt2++nUDi;s}OG%Iab{H5hZb%ZV^0Z1N$x=Q3 zfE}qL5c)y~yX#n-HWsvwc%0ZFSd@s=rH`79{v@fKJxKLmoa@in8H9*;1R3GYd#tV z4ELR@#KG!KNfVP|vak_d;x5NoXrJYa-Z&M`Qru8^b=|btD|Mhd+DJA^J2z** zMLANLfz~bWGJzip{h^Lj(T>1!ep7dBVw2vs$n$lri&_k}exnRmRVi${WkVG)tFLSx z?9^gzE9c#!-O6=g(6trDu}lxBeG3J%md#hAaOaHEKk^Y%m|8DzZZqTTD=9 z4`FKhm4z|_c_|ZG`P$7+6t!zmQ&8C;o&D3#R|R#Pj)ImX@dYzMJJ#;2R~j6O;v=v6DMV;W@GTqO4^TDS=-d8IAVz@r zC|aFb;P?b~1&D(${!whb{N)Q3O+5THlfN86>}YX2JOwXO*bIm0#)iqBEd)5#Suh4t z*(Y!x%qv_}6mI)g1ExtX*`|_Iu0c0}Gibav;RHFn(f1Aq2FI^E&?%U8@a;Q9!xv%Y zA#v2|J~y@3h`x+04tOWO#f#;bm^CC#&!0eVx*e@J6^vT2n%RQ8;o#;q{&#^q^MBd& zzx2js&?fT*R;bSEPH7UDL}>F0xD`~Si|3YzT0YT8h?w;g_Hn8M3#hcR-X7`CHX4yz zmUuuHT%s0s@Y4-!re`r2sleTwOm0TX45~JLPKh|8f!qN;garTDzZzo`7%EdE{Pdbb zGWe~V$k}gu=lXA*_uKs(>k4`LP;dDiQE$rTg4QCkyhvi^rtsGZdOOTEKaN3MbvIp) zIpo$p%Cta}t`l_!Qri$?8cZks%}ZS>u3D=P^WnDcWC?NW;J8uK7xg^dp98|Skq6l| zNy*t?2K~R0xe)dE-K28yD@l95Zj2vWvV?;jJ;-T|_0yjF@j-|Hl5Bq75 z2>)TR8ysM;5jKaG?hA3CZ*MB0T-^yh1Teqg_f|B%BYKkBC+@#90h3z#L^ zAn->l?&lNuMz_I`F?2b8tjCWh+=b9!mRoJ)kAA%N$B3yqo`4}^HJbdnFk8SzUW(>^ z^Ycf3e2Dh}L%!(W^J{iL=KH^m`9Ij0$sxh|s|OeTN!Vxu0LkfQ)y95<=@Odjb<=D! zw~mv3hU1W7O|yXJsYC4%QeuhsZc&h=DG<)9SJLO4zDSgp?>f7%Rb;NFKhlm`MmmJFMZE){H8oE5-;G{9t5dux1RUr| zOF+3afOaUhVFJclEz_Hn9Wp`JCesUPudq-301F0|PJL&Y)mnI$=SBV_q{?lx!2*4? zEd~dZnvb56<`GZJ*g=-=zFsE9VQ(Y-qWGz!=>N(?oGzI7b*X+!ukzuBok{V4rzGRE z2FV*p11!nSk#$wBex_4Lt~Q;Y#gqb~9yQWw(op~vmRHi|)a3Po1tBs@I?E0w{k(D954BTd78Q#)Uk>|66aQUcogj`BGS!#`eK#Dwqo zcVy(y%j1nj$VztqY#j08n>=Ah%f4dF-ex--1$6qA3E$^b_<_DW_ zSwzxOAB-K%OPySU3I=@e9^R6Whi1O4A^Os!m3!u|ADmKRR0QuoXS7;#hVqz^CaDFx zoj)}k4l?_Hv4l3d&o~OA^9?JFWb!{N%G|Jn-+D9)f2xvcDzf@tk}$RZ!gV zvt92b*RU!I9@@ET(b4=ervBNIkAhFG$d;spyp$&)t1#m%*}Hb)PVgAN@qRzSpX3Sh zYifQ<*4it#;*g)I(0_KX`JPN8d7@3H1PMXIx@$^L%nv31&vIYR6C$z3eu-EewHBv4 zwcnTSgM8$xNu^Asua4ymirc3Jdg?y->BsQY7|RC@rw2ZLwWBZt%Uq-JNj_Fvrti<= z@%IPqCznE4z3*zkQ$rg4|B8k`J^l1k!n;~mWGg;r`1|Nwt;w7}1?3TW3kLljEL_sK zh)uxB-*!La(FyXXq&bYU6{j}iEC#hqybV}NLk~)iZK%X4lOzTIuI}G2CA2RPKe^6e zoPpB6;qgjWdibK?hj_p2_w_SOx6usu2ucqK)kj=TbK z(|Pp^64Yt7W29H$@>6=DAWm9-@Dtk*R8xz?TovP%Q1@bD=jDC1PAr~lWuPNE0u-&G z$tyw8tH449Y(nd3QwxnHDccAdJV!B=Pkq`*z;j8L{#fS-b75+{bZWBoU`cMBziFIy z)SV^}ns}i@=00o8V&&MuvP=x5J_ZHa(U?ORCBp6-SG1i!`K-(hVBV>y?uA0Cfn9D4 zdQuC^Er0+d-Zw|lE-^grsi4$wHoz;EI%IZ2+RtL>UuAjZprWeEUwL~KU=;+T39Gih zZGl&9(7CPC!IaU@PaZLGIv~Ls!C9-?Sc!&+P-V?X6DKYhXpJGItYNDNf?AE*QcEvR zjSl;4-Q1;4e}<1~wPd5KUZDFEUK-%qN&!*o6o+fjcc;#3|1AKkqtn9x*azvoRc}GQ zy8$2~fjhs`X|o!^s@nwuY9a`lN~M!;3GxG3d7_z*TF+X!H`YG5IZtV&-@9{40f`j3 zb4QEVpvr!8!vERX+PP~Tg~m3;ed(2hpvwy@h|{{b!j9(VTv2*8Sg*0VZspX>mrsR*o*nalH%gD-fl zEKZ3-pzM8ND`4CO>M02tj7i6#hiAJ4k5GcjEg8I4aBt8@Ep@wUmLHi!d0^B6q8D1# ze8AOQgGq*$+V&dCKD8+NS37W%?lbZ~ULbj?z&Engd@t`g>}{$P^DgLbB+ja` zI|~{araqF7;f2tSOJ zkiQbzR9~C%p^JS6j+WJ4Z)vq+Y4!T8SkLWu%+9wCmc|av^+T0Uo@b$WTp-kBFP@HW z0w9MZ&W-zXWxh@1*3T=ZK1mD;2te>PTz99D!`5(fhehBCkmjyfPAgZhhi-(s?S|vp zbFbE77K(kDZH){*oUuGi9TyneY2@rO6hK9?8?;7v4dt9V2Utd(3ArhbZ z@#La_8XVoq2O3mtZK`apvpZ)Ry5ekzh|ehT|KPHyi#&#Q3GRNAHc>WQInIaTmhv9% zOrp&SPrHC~TD4f?2k3qtPYky$L$}_Zc={P5-&?P8n6&mMh@!VN_mI+VgY(9Vq9^qY zb~o^XO<1bhl&K)MY^}McL*(Ty2bRF8Yx&hT(8pIOZ8P^ zBkB|Mua}q%p|(nO!h?|!RpS>=ivZ1a7DIV4vTFO{?J>8bjp96)obCBAK@d_LWn3ZS zm5N}w1xPN7b9B!SI)bjum`h!T=qg9lUbf%$W5iS4rqbzK@c^vl-Zp((Z$vg4?`Rdz zI%`FS4`~hr&>X!NO;HGH|3RD8R6>-{X@l3J_uS-3&u;Px z`eNl)tv8qCZ2`4m;?N3$^Q5_@pHAuax#Mt0&4-+%XWs!xQhaH{q5_#3-6f32-~HLk z5`u{S|9wUqa0VjZQtoT}_IVs9Yg6!C=7c5foq$#vwu#0)EveRE9@b=PA_=u^oMSPg z=+W&|AomYpdjL_HY!6$|Fz!rzio4CdzgmX?mkOyx;h)3Rc0P(WXY{KD{8(L_)oTHd z6t{zfuZRJvSMqM|3aeGHLQ5Op-{Pf8yX_(9z3KvhPtI$;;o$2CWvbqp*vQg4$TXIX z+n=I~wkY)Y&()ANF3D9de*il=SfNyK8QUr;#Wn3Ggna}IK~X*9Al@x;%q<+nWu+6v z?_~F|Xc_dd5hLTYSS$^+bf_aM(3Cz{);r~eP<1HOvQ(t9KlFd-A;An|hXTSf+wg~6F7MvoyAxJAd5j%!8Y~{VnJ8uip7GKu0wz?+EN5j z-Nas)! A!-%n3vHfTJqaTaT9$g*Yw^q}H{+H{FA_8EWHALm+4t0r zf?@8 zk9J@hL(94UZ+K^S_PxzinegmSn?0Z{0zVg0`%t5fDB}8Uq_e3fP9vCYws_ocIqm5XKF@*N^e%lAyFg8j&U~jb19%Iz}6i@|ILO z&VfXA7wG-@_vHdQct#xiFzmMT-QtQ>r)`+Gghq_G#Co@`P{J@oDP3%QSuzTo$8oft zfy}7p*4lQ>k;@){6UP7`Q9*@^&Lkjgi`)YCQ}as~P0)w8-3FNwo(lT9@qp_#8@~18 zYJz--ZRb;>6oeFS&bUC%vAJ*$A-G>Bm<(H>w0j4i^_ z6&1aaYY)rX;~pJ;-NI-LIBzr5W-(8#>SvG@Dnfj%1e9WYt3nz|hg2KeQ`)lsa*inZIPj2k#TA zE#Q6dGHOc0=T_WOA55-%{(n zw}LxwUEhK-i>GB9z%1s0Ety+NunzxmYZfsBgeKY`Mc_8%fy+h`W!sEWrqFRxfK0Vy zr5bGji`T){SfQEG<2ep|07@SxOYy%8F^&zM)<`zcu$!#wI5u&N5l?KAU0UCn{9yQ~ z;}`%3+J4JaX28+J%O$VIzgB3fghF+g(scv5X(?X+bxS3k5XJcvzr>^`(=0shXn$4( zFO9Qiw=Gook5j}5N={Tg3x=+E;JNM8WjqL3{#ijfcmZeJJWK_{i6(xzj8 z&?4Ajt+;sPF*J6svIbpgb~APKrJ|?$(U#>=m;ibJo(gDpX`{#JX|I+3Y2^5;lv>nn zZCxQ5agvUFU}dAM9i)5&?0?3mtMZk6fENkS%NrMGWv&27em7l_PXOpU4w{%syG3mQ z&uhNAZM43lG~#}hozWog*ls%^N&t7GsQdz@Gt0s|Lg8TsiRb?xd+!|$=N7&VpCi3W zlyHcWB6>@dAWDMhMDHX-bfPm1ags<7L>D!|jOfuBHPM0~y1|eTb#!AeW5&0~$@!gg z$|e@N%r4EPdT+leHf;bAMPJkc9J3)~tT&I_6vk`C>EPovfBowHY)& z(hc5NN75tGVQ)G41cOSMfQ6S6a-n%*tjet~z77NX{VDvW=Xj0J{1nTccTGN@;Hv^; z(~ln6dABsYiN}O@35e)SbV0RK!&^?QBsg1C!peO|==md;JA zc~$0redUju+_JNXU>Y~sO|!)3YSP5D2(%~oGOHb~;h5CDih@{5!4nXPKqKziQp*1h zkK-vo0jKlFn#EhRr`FA`sV_=&4+4RY!K|g*A6tUh6x{12*&IpN0H=R^#X){FMh-|F zz$SmI7J)||f$wy$syCJ@s9t7{jvV3xq4Q{|wR{}p9Hirt^Z$5|e-48cws!7#=@o&m zeN!W1`nQn0sYER4;26+vF6SGTT*Dg!42nX7*CZK>JFdLtJPTNao=U682-d*HaeqV{q=Tw9 zyyADzCEyqgrkUSg(A00OdA^y>{9;tDAMmT=lD$AcLkG(c7T}w$b{_ipg9xe+K(4Wq zvV0#viNw@x)$*Hy1V@My_F4b2sN{A2Tr>5`q%iUFd)!vQ-j;tvSQxN%DWpNcnX@5l z(_HSOZVtIt!x8_5#WdhRtWN0#rohde-uSwHb{mEpk5nOOf_!s8Is8|>|4 zBQOL(%^9M-39YHZE#&rr`nxb#w*CN|ms1+<4~c>P7xc>1f)yNZ%;GzhXHb;B{A%r4 z#av*2*E%4*Z>Le+5-T+b=+p_13BYAZm-)^(v3=JF1Q~br$cz8Z`MLLCh6e6?k3s|A z+^`-@5&Dz{a#yjFX#k5;Jptdd&Hl9e*>$(b8^&&HZ_4v3hQK-yQHP4-^15ym=o9IlY$fl zTYHD|R=EO)G@zUc zqlOMB)Krq~+F`3LnmucexU#2S%T6qi)L+>WWbd!v?WoTL{Qv>*ChJ<*Y58a?gUa$r=!DsdV^E- zQXEJgE3n)G1Q&SwtUwscM5Q(g9A)fN0KkbxcJwk2!y?s#0n!OdX+obg47j4+&d-zZ zBZkzR;WaG2nlzd{AO6ct2q*W8c9)VP4pm0an5Fv0;8n=0b)!6^GOnbT5~(y5B;qR|_PI(rN{bJ51z<2feQZ2BLBWs&xI`X!J65^Wf-g(FH=UOJ zZ;6@HCrJa#UcNmdBFko4rA9g3FR6z?9QTrd3fiOjaUK0Nx`2O~-1qm(eH)UYm_gtA zm+oGS7RZI|kMwO1AjKyQUqR*#Y8fy*Kwy5SfPu4GvBgN;Uwl0RLLgS&xp*9Cg#bp+ zNfHMgJY#<`9Gwnp*nTILUqVGspa36|Py-@&PVQ&WR#}k3A7n87r~ZORINfHVkk5M4 zRelan#$2ZVP7pmO#i*}VJTQ4NbH+z^c*H!WH_a|CGjY27{Fm@J+#W9*Bj8{+xIK8# zU~%~PX+59;8QgCD^(Q(#Jd39>PK4$8Lpb0{hGgZ_+jbG-NJKvx~~lBt`=E2{q6Zv+b}wcmrK7m4N9{4$Hq zpgAz+w-ryadNwa`ew)31E#!#9UEKpJOU9kIuf(3Es%1UsRDPBmfhRxP=aC$7g1Q&KjaR%mP>kk^Wejh; z1g?hBa-Ykl@%7T`2gxsniex-sG6PF3UwtYGf+9#AB&4Qve|aBl(R$RP9t6f8&khbW z<)?STO6>xA*_-9>y!7+e0x!}2bpg((=3;oLERNUJ^}sx`QvbAO7(qKO$j`QFF}PO6scUB{(`%rE`2#ks&+4YIT%-g9{j>&(OytshxE=yL!x1AGkp6MQ); zJheoAN@3(z8;H9st836_#`c<+a%*iN2*!a6f9Bpyk~!+X1CpsYa@m>#ub89tLd`|i zalA%2c2n~iig-utpQ9^(LBkT6AEzR3#6UTr!!*>-okvPxi(7%XgPZLs%}c*au0h58 zFv_IKqc8hi`mVKEBI{2t958{1)4nvhT?l7_e1hvQr-Qe{Ce&y5Imi6V0!!NbGQmeI zQsJLzc_e`JS2%V;u)uZdZnXD~#lg&wf2!%>Hvr@WS=`UO0Ubok(Q>8@(OBr$02QiHlbbZ-#&;xlWdT&gX`r0DBp6J~fp(hEQ{|(Q#2Bg4PJb^uby%{4B_gCNK zq4Ct+kovW$iboqa!&sz6!Xm}XSgq;)dn*CR5w1(xU%G!hu*k2-_>k?9yVw$vWIt9} zgfxGqzBYdFsc95g#gm&>_LOI%C;NHQ5`pgfxM0j7No4a@Nddb<$WAg>;hI@t*4cYZ z2mUnZ_I+QCEm(pSJ8^Q$f7*kd4<;agGU+HXM&i#bos^3_f5MppwcGDxZC|{y%vC74 zQrsPDVgEE67wNN!*Tw$g=*a{m7(z6L4X^pMwjO`YrD9d@9kwZ9e&v2n-e^_8^v%K) z&?ytIu=jpAR%u*;P-2`kP&y!k)0j0plYQ=NL3^-adHe@(BeZuLDgAezfm-$nT=e8b z6W1>Wna>(B!!c=P2Q4taQ#=Q5U)s80-PZ>a7w}X8UxBp!FGi}vCxO|Q%a1yj^}qFy zRfbg>AY}hRD~VC>VkdZ59;`CUhFSE8IBrIYgX0r{`}<$cfpR@ zG2{+DINW>Q;O5_x42~SwHNR8r0QrBtMDIZN1PGX`;O3u1i%uR)w};n(`af-*fAyE) zeh27+ydeK!FoEO+IjAI%cL+IU{VSD|cL=$L{1Xl`i<+wGRh*Otba%$8TOKS z$iGMjnTL>x;XmO(X6j_7{x2L!mQD_+++;0_tY!TJtp8sV7kBp-hXv34_S@-30b*Xq zWd*Cl12y~>+SZQ0NR*HHSw&Fw!-2nOn(8tR3wgZ1$Vkgan&5akiC>i2uP0urrIfM# zQyKocU_D z^oz7Scen}OHS&wR`przn0TEDi=odXU<;ifrq46&w@z|-CYFqrCzo^P@sm~>e+pGLC zX}-S~%@do?{-TY$Q;;WLhCKQEm69C!U>B3q&c45coOVD8CFgt+LI@-mTu}7M1$W=7 zK}I{Ek57i0B)Ch4nk3Xj#`z?!K_*$GLP;iBBz8<@xBxYg<%NCA+5chkg5>kI%)j3S zK-PK4yI`M6gO?qUMK&)y=r zrAR82WRZ=O8OS0VS!CO9&Vpbdi)^GqNfz12BHPbGNfz1uPZZh6!WvmvBMWOkX8=G% zvaq%fkjTOsfQV%G+Wx*E3u|OyjV!GFoB^PvklkzhDl1u7BMWQ$jEO9)?Kd6B?ln?w zBnxZ%!9W()_Je`!UL(8L{_4(?eLMRAk}NNf<%PdHP-J<5EHC^mJdzK`k$pRV7fSNs zI1+>=%L`vSP(!>WO;!sFOcPh zzh{6fFOcPhzh{6fFZ@527hcs${9b@oraT0`llYsy%LHd6jgnH#`{yxonp*ZNgX6qj zqf5&-+f-vM+0`wqqx!GD;n8hVy{_GMRXF=09B#sF?RK%%ajRgQtxUx3ot#TNhf8#2 zG}TthZ;D+6md)SJHTfDGH~EcjA{+9_cZF}3IPq?EmFRomb8g_HDs7}sr2O{FOZ;|D zD3U&ra_y&Y`F|)9c)k5q(idnbet9n+_+||fe1Rr$-?#8TzYqTLobEO0dorhfdCwtu zH~K^HJsG=SUKI$wCsPc*4#V^7s|)=pqQKW-a({XCBKbl7H>`;3u0ZnN?*ceS`aTeO zb^gZxKjWDkX8#+)j2v3z4EEE^^Ow>>t|{c=_&0Fc?@ExXJQ;WWtMZZoBpC_+n^2Is z37KU5?9q_21eq<8`TM_R3bGJER#g7QFUXvo%-R2~Ns@IfvV8ilh6P!CAd3%V@!_u- zAQLMxu_6;I(hU564H_F(cXPC;1Buj?kH6m$_uGCf?)pPf+;h=J9D*?rcbSwE_rBCB;oTOS)-& zC;kP!=x$YUn5D>S$(!U&AGm++gu~{7AMLdA0^~G zJ|Xp3eq zkvO#y3%Su;qe?JsiC{^K<1tL!^hVUx^UD+dbwNy2L(mzHjvqvr$m4bOMg={9~v1_}%z++~UZan&;xP|gEPZW4?C%`NS@vnw` zrE=g@YXrtViG`dMHabS8uc3^toonT{!qJ3x~t$=H>&$lvQiOZ2-p6k9q=K`?{Ny?fD{Eao=i zj7=oneB^|XsAxR#!`@s5Wr=i)G%s7s$dW6vsb*g*kvgSgEx0c4+ z#$m*I^Pjw+Eac8VTXFy6C#|S#(PgJJDJWd%kDbB%B$eQ-Ws`gT0V}mza09H)C4g}Q zxsP_8ip^Bi^p_vguE?$QvZ=&nZmYgb&4U_-P$`%*h>4Ph5!#SjSeIDt zfb2!bGm3t)T)y^PMiWG3$Vl;#VDxZN#yq?9j-iOdUm>=_V4{JTAZ#Z*J-a zGppDS=BY_|EzjxEu353qxM-0!{##wv<<$a%HM^XCm28jhTwf6gCZW`CrxuoUUf&BI z9>J%4kx60J6vV-4$v~F9?N;RR7tmVf?cpNJKGC|hFf-{wYASjT;QBZOV>4-`rHHhF z5O-$#kR?o%5jFubr$dbq?zTpy98s!eOQKsywCszsRvm8(cse`#2b3))SACbOvU00O zBfv5}r+r!VYTVmWex%07P1NFITxYA$rKB`l9g(Yua*Wvd+WQ*GH^-;lcuWyj(ev)s zg`M*{F*gyXZ4^kuJ0HkGTz$cLfn#Cmx?TT!3}gKoV=dHZ_KLv$!(Wg>_Y*%oFQt9S zf2JoRJ2x1V$UC9|b%5o)VZnyh?qMs3y*Dbu_bPnj*tx?7|edFSnCin6^`7GiXO-jCm!MYaz! zFfx|N^=T9jd<*x0tO=^}T^lz;V7eT1tLhl956wS+DAAOoaEfmHUSdZ!x7X0tA~HJv zp6E6CVr39c4fklgXHzQr6j(fJ75boCsI=uuOC{SQJ>fMLf-k{Nf|D|2_3s}fjjJ$z z3e{ybUZ51^=`YkdFlQafhQnt!Zql-aU!d364-NTmCEZfI`OHJ>cljlQ|y(b^1Jiqba(=*IKA+h}lj*Y3qNqVzCdcL4~d0}x~ zWmG@Upog8s%rs|A9n8R-LZDiblp>>u!{R!v>YM9jLaGSvW2&jQ#FFA|ee^v$gYI5b zT&csW$77dlvOo&abQr%v+AT5p^rE#I^l*)|LH1b>Es8_(GR3xUOP`@RPBg6+n^t>z z<_J2DlwuZ3%+;q_!qDy$#NqGZ63dDax7HQ2yxRFqDqovH=Hrn$Dq#edHw(ZbB~yP~ zNF-GySFd(7A7RPXy`0AdnFYHq!EAzo?n;30QZP z)z;13^Gh`iAk=hluZPHdJPdqSgKwXTB`0{Vpu8mZ)?Jp$h91?vNL4;_=8$i)n|mm9 zGPqSDC2#jf8#QN~jxLyG0iDBxh308pDQHNPWYP#{XR2iN=q!*}A$UXxV~Y5KDR0AVdAyfx(9Nx?CYUWV;4CVvpQq z7+`k~V^)ih#189f%p}rn=*Q2W+-eeE<5`xuF%g)&&nnQKvaAQ?QFwK920W+lqrfWm)CkmmZsXrv0VQeWkXe52P(y zDtaoA3}w^b9P@mgt6v|Vn3Ov)?f)&1AA@`NO(FcEy7b;ocOQ{(taojywRpNhTDg9A zS_K+Z29mDrWK*zi_uj{2Nm^gNXOd>=C57NSY~Z0Z4~bG7F15R72=#!n$C9(4#0bpK zfJJE-sk#-=yi}@912D{?4z`RsY-?ll`L2y0C(2c2rHkM`O$&L^&~P3E$W2GVtA#&) zv_;zjgr#d4al*{9cxjw(wA`^H$ThisvD6p4*cm06#phdCVRo9uEU9w>^LT)E!J;e2 z13kE<7uzKZHsSAVAG}uT79qvRx@yB9N|y1?D@I<0h0Zq6p6AwTYH9#>rs!_*C|}fl zS{g|jo;Xdybt`3DnK>SUz%N&qFqaNUTUxlcI98zIKm~Em1X-z|al~Vt5NL@<(Ot3tJF3 zVkno^Cn799<6XTH~Mh@L9+_4@8oS;M)Wpx5keVe=i}o)nAA zw@Jg0KY!B~>kx7050O0li40eHNil3w@YH;Nwl=aeJlwbH0$X@-WE$9%98n}VSMoey zT(R0q-|Y2eJ?<1SH$B8M!oCkP-{*U4-pd?e`lVRu*jc|swlAKUlD^nXQ2VVoJwI3=_ zimm&QEbbw`gsNtbufF;;=BpJotHALi5X7XlTDO}TlI~?HQ;qY)c!=zL2vsZVF8hxt zQpMK&_U+?S5-w6I|0-)aKnTAm7B#s>#50zxFnSpF+IkvQt_C>_k1qPxBN=6@Djbke zo{Pgh)3L=F6@6Rvdjt%OA1WC7eI%!7RFRb*;Psl!0k=0YdBh9#G~BV(?8ByJ zI+KhM9p}13jV|z+7ziUv?T5Ow^bNsO;rL}t4hO}_xD%wk3UDbi%9jT&M7?)c-65nh zgHUK4GK#s`F69rtY5tajVx^|!I-~I8<(yAqP@H?nkyj#4V+jTIL|m`3D>b`%O^%zM z#7!!dqR02HzOis!%jIkE#Y=B!FQMaw-xxM;b$hJ2#T*Q}z3!f^pQq2krH}>vq=y!?s_^{H6PryDg z&vtJu4!5*~&&G3s?Oa)-26owP&T|2x&J%UDLj{sfI!zaI)+&iOA6S)6Vbx5cnM45Q zlTj_M7SjVD(oM>~0UesgRg0HzcajS3_7v4#Vny~dhIIAt23B%|NFs)`3JD24q{eo> zudG#M1XHLlh@^43tEFC?t;oxFfkM{!{*TX*^FP|OQFq^$C&*c|S3iEYeuritT+$7` zj#^7^(&Y8uuPX_MEeiTlu@9Gcy67z`EL*$W`_w|U@?ub5?@b^t(N-vQXUvI}`4fTw zoz!k76nHi+qkOL>6%8r)homRePa`H67X)MRw4UgoQh00oEXLOY4dJH zmz~wjmxU7vcCBa29R-j20X>6OABO&7_n{dLIdP7DgyM<U2|e&q9}oOiLxnv?Ho(zZyH{4GKTnW;{D<$;-=RRTq2<3ZQz7nO192^w{3rr0cK^wV zFK=#CDCqb1O+1avlXgkBmOZhsu)t+z5AI0+_6&Gt*00$hQ)cx=1nf?gdM+W(ZlP*+ zGBAxSL;(*hDy#8ntidQbjd^UkQ4lMlbW zMtx{|!IS}%ECinbNB|C>KYlJ?S=~v^QcqdviTbJ#!Q9#PHF{vh!VDf1G6dKw*HN28 z;Mb44E3rDAE;QP7g6vGk^D~BhaGh?)jMx`$&6VV;(2fQ-u$}|x;Bc5usY;&6{K9+9 zjL-{CS!*D!;0sa%H95>SSHNYCCdjCDexS*H>{-#ovH_sN^6~@ZYEUYF@x7%M1%MGn z-XGfM4YGki8G@w|FH9B zbs)&D37h+dUNl^vgu-4Qc0$a<7hQuq@KF}?^UHCm1@ttVO_OH^NDFx(gA_`vUp)d7 z>gSCoaDAAyR@7e20)!WPRlpm7@S_^Wv@^>5Chu>3_plC*|HN8)B69?_F`QpjRji-X z=dDc26PE-)esSOEtZ>I0O%<%YlYN2k8_P=bPsA=S`E24*>zGgMYy!^3bz0>7&n5@tssN@Ax%IN` zb}i>UV`Jkr_pq=|+KTD22Yql#Ep2T}vjGorm-}jJR)u4HTJm5n=Hvr|f^hD81jqbEfzuYlk7YKS>iV$z1nx{i_U+*3*sSik(y)pyth=}Hhp@|Jj1UC#UdLGC z7JAKHT>kpP_L^mU3V)Juje=ydMS_VwSlT(|JS<5S*^gOWAPVJbVbQ{YmBxO{V^wFn z>10{fxrR)=OpR(G9xn!(1;X^rp~BGZ?=N8dveDPn79ZD-dzVDX?~IvNRhx|uX^^tr zwLtmM3oxMbJgg6$Kx3`a#M}z{Xcr!JCF>eJd(axLf$$(InuW1Qzw2lvt@beol9;eR z9qbfAJsuPf-BwODna(LsZ?8>p##MG@ka#LkBOP^f#UFo@vHjeV9F9o$r;^r)259njNnA!>{rM6iK zJ81#A{e9UL(cocBrG8`(JYF%1))9=&zy;slqu7|`S2QOq6vA!$;AS2sWn~_=^S#x* zmJv`v75V{qiM7PCl5u`I_^HmQiHq?+X^X_S`A*W`9g^p$-b|ITZi~L6a5f95&sekP zDarFV^ehZrkd!j+>+Av9BW!8I2G%D}b%fAzE1$^1uhdJcz3DCCzp}(XyZXIxX~NFO zR9`>sZWse{eS{iJFpciFMEe#vf51*vsqa=nsXqZx3Rs2HbB5?J^8mtbsROcj@#v?y zI7{E+Z;dgWeMaFc%h6z_P?bv>KTkH=aD#fS*SKMFxFw<tH zKE-QX9i;C9gJ}g8Xbf*X!3BXXkmyU77xnTzv2t^*4vNp|(i~tk_vSi!pOnjwevtW+ zL=(ZLvaHzIIa~7mv9)q^aBKR>NS%;zl{06~=mu=v)fgzTt`?mb{~Vdon;>WjQG;{1 zU>IIf|4cBlcR&(W6xwJw=?dgp+fUDekyHarlq?eNbC1iPZNBkmk`f6ZZrXMw+en>)0ZK=06DXtyoS2sSJqxk4cg60~;l42Q@3f-~Pp`i7zh(hR+ zy)6J2N@?`VYZ)w(X+V!2n(hddSnhe6WAsL>q*%Lb%3)s!((y=eWlKwPLKOAF{eA04 z#{6UX>{weg=Z$KAMhA@s$RFO0;vAO~g>xb6kI;jihpvT#yC^XGlrH3WxO@ZxlM{(- z#TP(_3QReJp6YN3VlD^0^J4lmz%nD60+`bY%V&W>xZkh)O>p(WxtqT^9<qhZC&GN!G7pW69W+z0!`z z{(%A5&c>{l&t8ou;N?C(*)R5U>^XXR06Y$5Fa`b4bsu!Ip6z0S!3vLERv&%m0U7|j zrWQ~rlq98B3l;4EZkiJ$>^769{$f#AGB6B`69_XvPgb4n7WFWE@bS;*w%ek0~>c= z*(mmuWS0~J2#;xFm&jT6+~_>y#-T6}T28v)A;tT6YyrQJCa5DQ2s;1J+=4MbjKih$ z?vFpfLxZUkpgD|jU^tn7>xpFz0V|PXh8nN+)%GHOEr1kDjnK=E18HXfCa0Yzvo(|C ztXCU#g8CX<%xy*o)q0n7f%iOL`}-3-mvV0DR1qRo;`x+@Ox)D)6?lRNcrGtRI+6-@ zj$Y)j1#=qVO6t>sP zg2M~cPS<&_O*$OuX_L%-9}xjq8T88!4EP<66Q`TreI+1;4!L{`C1UP*?Hx~GtqB+# z7*YR5#II;f>=C!Lzu4+z=NXl8g)vEZ%J8X~&L>V0W@g}+jkLY}p3{gEQf_La4*>4m zWlK`h3E}z*I#BsWW#Y}snPFkpD)p4J-SwByOJWrrmsXG^>?D>Pk4?MfqXn{RHKNqn z%M*+V6^yI{W14dg1pUy>EwsYRu-Cd zh3)8P*o^BR0JF5im}Aeqzs8ExQEM$XIWl?H&F}a3dg-%$r}%4L1C>J4vEuh4UWgE3 zlCJ)9l%=nDZR!hV2uB!zAbo^IQU$+!GFb{Lj;|%Q(Y}-aRL5Pv62T&!y2(oLiKo(b zahuA{N>#sdSI9(jVxUel=4Qd*$2HR2PzI76>7OlH-NA7rhWuI~kl|8URD?`vjXdN3I*gi4iQxUrLAGLV07uojHU zlcG-g@MS}tZ1=dA6XlM^xMi>Ucu)@Y=4p6WG!g_ZfwFkRFx^(J!?$)P6Vxntup6jZ zto(tDPL-F8ry+i317|)%?Ck8czWknhj{Z2sj03~*{BI0Khb>&|kFofD5TZ$+?mU~? zBsa>fm&b8N!?qJNtq|!@Hl7UT4-j$a~;!gh|*nLD^s7_<2r@z;UFeyfA~h*nVjT?YZTB+A6%yJ z^Gg*I3%%KvicMD{ZY5t+O&Ep|@OD}BlNC-V1n4O*sOzVM+S5z>`{CB(>ysH6AORc- z=FM|8q?I`pSQ)sg5P&f+Fpzf|{*c(q(g{+vx**aP;~?oW=?$z1isEi?T>7bLbY6bG ziq`~GAF(rItfi(lQGf;GZ}%i=Irjxlk`PX{3qfmes?4M?a1V{RqWDeNp~!2{_DG^uqN#?-NIvjGE64-{n8SIY+XaT5sXd-!~7G0;*~tk z=WPHHvwOGtko9B@ctqra+=|yuuf_33P@FIZc0!!fNF|cx48WD!+Mk64RYah== z_ucKjM$$SD^PNb(<--Nt!-KX~cWRYgRFP#NC(6&@1M6O!MJQFPuIQiCAZqXbc0w+l zQ;#<+wdmN{i=UbCC9|L+GCW{?c3$+o^_K)QBNzS)Iw33PixSK3+-E(dD01e}?fc#f+3cG( z2-W6OASg|!hU@oaL}pQ;rimK`wMY`0+Z^gviM*c()O37jRUK%}R;6dZ0#71#N=QT` z4kEQQyyk*+(-4WN7M$gNZ({mt1mM5Bw&&l`GtkMl(Na8B1JLh7+3>mAaRVQ|pzO^| zJQ|3#y)`}?#pc5|w7;zMM^mxf71VL+PDSkl)Uhfzl$4t4Q6eBM2^ra=u4ln~aGXe% z4!DHoMMyS}K|xESbH*029ASGsQos~jfPP^f0J+p4tJ+hcU2iwb{oS(F7 zavJ~;0gZ4<=~vI$u^8isEMU#Z0zi%vzw8Rdrrhp^eZ;M_d6)whw9fzF>v6gGA%kh& zAP!8aTtrsolqBFpy;qj00Hm>s!1cz*%*@R64-e}oUu(WT5|0>Vu3K;-71SuTd(}LQ zBchM>I?>thra*MP&XO6k4Ihx~PL)i$8-DQ(+nc-A8(J8G!2Ec45lA-Wp&KCC+It;?ag*lIZqU`;f;qJYys^T<0XJg7a-#_L@%&}(>aWD`mTs%YS z$*xO&&k;`fCscKhq#L7ibaR!dJ@}K>^k;UttwLpX6{G&#!SBL*0O1BU5MP(gllSvF&64@@21|- zlYd_jTv=9yRWC2}ok#3leI7$s1tZXvf7svn73XznLsdY?`a9^cKD{AqqhV1kkWIMCk@M<7Oo zESg^Cwf4?wMcMvP%x&AT20gpKA48^=n^94k$yJ{9^+@Y-!zVQv` zNV3-DGrX!lXYrpuW2O-H(Mdmh@c;i7_zpL~Z~gbh z?%Ny(`7zA%0^7l#u+o9vfJuVxoqxvr*B{X{ke)juMPBLPPdw z1iW8gZLBpxsr&CAxq^pme{RV3%Ygs?_$c(LD!g2mWZtGXY)R#*@jDbM)tArtLEOim zhv1R_dT`MGtpv!OWJ~Ng686Upk%9ix_C8A|0^jinEN-vepnGw>LFN@f$5J^hl{pTZ zb}_C?BumI^H&#vPft>P`g2@h1=2e#B5XNwjkG%vtZyQ|j%x$D}*0|cfmpZ`2T-?-; zFMlt^Z64t=QkGR0ensZ~x06D`!dWHO-7$QRw^tEDt`D)d2cP!>PTG}R%0RB0&{Qf2Msw)iq$5oT2jX-(e3}&*Jrf643RDcO$T3 z0~C{OuP=NpvHeYCPosPgUccUmP%m`QDesut=+2s`+VDfH7)e@)A3;B7BChej$dX14 zZ%`K6GiZ$vyt>Lw+7N_%FDbrh;)z%iuC-R*P7)QI9yk>eJ4@+yOsuA!rDa9 zJdxja_=@7O^Q;2z!BjAmH1&nhG*XgUI)Gtm2cDwi%LHD~s>Ri%(F$|y2tWup1yWbW zWkoN4!o-hQOo&KfiYsUOBd+`+L)>IHW`;+4&Dc=m{oEfLn@Ri=Tg8WJEA0YD;by7| zbneOLaLB>Iv87%f7ooDJ%%vGeuzx^%U>i_% z;BI2<1sPoAc)=hWX1}VOyl|$$ee660IT^j;yRHu&wme~(w0S7D`APCCmkDK?I zZ!OOUN8{GogmkaIUYH7`N+j!w%v%YHd{aS$TMYErvxZ_ry56*1J4=S09gKQU$$Wht z8uu8Xc+XMn77vqnpSbfqSc66HI;9k2T$g+DR*t(tVI9j*HGca;Z_QnW;&D@bV~gUI zCBumHxj#hcRZ6#J^1O`8PIQ!*_7+$+DmzIA7gc;=EII2HNfTz~Ln zZvlFt7ou46bsH)`!O%=ne%>N<-{Or6YPG0xtX|w+&8(1WwfKw!$g)JKzx&Le?@cWt zNg~LP{697bx8A5x5o;Zm;T*YGvs7slueaBro5u0QnrD!FNyM2d8t%6Qd~9PMTEf0} zZPBYs(y({odA;8>l|749@TY5{42*Hv@K+wISZiu>tp;KVRz%M~CfXca`lh z`p*o9&Wpw;YXnRc%m~f&{^_Kzvyp^c{iH8d^>BS_#a_KWMGej@NU$(=YoFS@r}B~+tE?b+`iS-KO?9TYzql4+dj?9>4%B~-H~ zYM-76rCP%An-!`A)YO%;{UOY~5fc1kuXC!CGiXJZTi?=5%K7R?;*dVNH>ujL_XSco ze$)pmOxKr>eB2a(yQhutQQkyzq;-H+LJ0S{;7HKaAvHK^^=TjO3KEETmP`#Pq^2@1 zhT4Fn2LSud{D{4^HFe9lNl`fHPDp~?T39L>gyl7I*B<%sz;fOXAcU^*`UH?;deuZx z3CopJ*tpnmU^|M}%ZKoT)y*u`P*ZbE6tcCjtp_f}LIZP$mreaMoyNTY48%as-yAGn z`S75z7buUtlg$;GfJ2nkn9sL?ju2HxvAr#~qu=)|s7cF-OJ>u?{Jsmrwb($sOIuIT(!N}% zvGgb{bS3_x#Xt?otPUD$#cE-xRCC6l#@B6jPA`h8IT1e9;hUxdRPPq1JT;_D<%o0` ziFVuzTj}>0Nt)mDxAw-(7M{_t9z{8Xj|=rM+I4&%!E{8}7pLl~%@akqze}d7Jtl|- z^d=g3yZAcd+QS^L%Q?#VM>>vrt@oCxUGxz|1)ySs;fis)8q&G;N;;)tx0X6BcIc48 zb>$h?pj$(XDsB1YqfVU~fcG-7j$yCrtzd*Gf z<_br+-Q};W->t=InJ%GUj@zzz??eY-0&We)_;ah!bAe388)y)R>yn6v$D8}ZXuPkQ zOoraMdKaRlo_tet;nF73I?dF@dpEE)V2{{)Wo8ZZ%a{3i!%+UM!~Ahw;Z(sniY7pr zU+C}*t)7c~64KNgUxzWUP4k*C^*~C|@g-}xFr`5~KVbY}&$RnDJIw2P*QYaORs2pK!k2($e=JOa+LNBKvvYGuJ1)l`=lX}~ zJ338=h^A&yX$>KHhRabpeXS;6t`*nqQud1$r*iCVZ;UIsjHNr&PnYm#&P7tyzDv(i zJ{=ljCfrT1g^sKab;JHZ`lQSCa_H&c+u~GEZvHWZych@E+RPx|E%WO6J301HLvj7& zDd*ix;kR>bn7JAiH?3yjyw3$}dOt!R_L=XwnBp4qtox_uV|#6lh#OBS?R!UfIH|2n z220ql;loq4t{iRKJ0h65#5hr);#(ru`P7XsGwGV?7f8w(6+tikm|>#mjY9iYQy#X& z$=ODve~+H?qgtfJP16{G?X1FnSOC5$*7CA%<1MPF`t^KV>E4E%1?Cw(C2z~{i%QvA zUm`{;F7uU0sNBp1!N=4nbu-U6x$OC!Ck&6*w{7p@Fq zt`93NO%A)Jb3$0;o!^4mXjSXi1y?MMdC})ML3FXRu~FO_(|)jC+if2%r*SnD^yEwv zwYj2HBR_EMU1FK_L+8gL%bYnkACq*3Y&y-;PeUb!;)6b#s&ebqyaA1y)D-J}E5YXY z2s-m!E6(#Yj6r8|+m>%?C;`QiW8i!(EImv6^o>{5-!&vRz2}_>R_twNa#2nM+-6$6 zBoFFw<0ma>Pq6Jo-631RLSP%ssHIr$3AG3*-0CbIcN?gdA9>HU#T+_zHs;TlSHFTx zrQ8iXg`=(+tPrW@6})1dyG}Zt&hB`g9!N!R)MWhUJMGpNGn8z4G|BIoID*>h;-yfZeS^L zx5^&b7IaeGiB-OOCH>eJ^Ln%&j-65nRzwRa->r7|Y*gj91mBpKCMere%>tV*XB*~Q zKwW?JHL5=%Z*BuSVsv+hXvysKL+!k;7nBOhWg9IjZZ6LncEeqF?pD)oSsWjnXrnqm zP1T65i{3QjV$UQludBHI23@Nc$)pdblk{}@9L2xKnv_tjWf)vW~k&VmqSqre?Q9Ep27bk6Cnnav6Hz`K+qa6%zp%tkbdn-5cmoB(DO2)H2 z8Sjcx*VOY*ean@0#UC5zbG5!b7;bBLc_VDXfk}A>hUU+#k1j)*Z>vLbYqKZX_9`EF zT5F z)Szm-I^GtvARm0mdTXrD6CK-qfTqQ+ou88u5n1X@AnWbRmDzH9)5=C?5D~LIohecQTc|B% z(IXbEl|F009Q805E~tNTXf(}o4M{x=ckxWVQrfz&V*nA`yD@JLEdo0dOQ`Nh>g(RqvYcPTBbB|8XL>u7zie$V zI!4L%jAlFf*nQv8>VD_FVl#;6gs_(JyQp3bPXEFbP$cBs57Un);xjt)Wfx~2j_z&e z<_E*q{d=YsC{rC%>=!6YGF31+**X@NHxrT;mTxE6aJ6FUrAOQi(>cfYat)J$9#qLu ze%PCx?-=E^h@f3>x6&5*!V7s`##?JeT%UD&*j%-e=u^}vR!v;(2%C@HTkD;wh$}bK zA4RVv{}woTs(;`N|CyDLXDTrUpCG`AQcb)4^8A&ORB4SkX7io)68)=*lMe;EwbVLc z;+KnP-F$SoUAA@tk1f|b!~b|w1(-B{U z#ru$4e;==X^*oLO?rZ+)-SWZ;=Lvsgc|qOFahS`Yt3e#C*8Po?(*60Vw}I`MzcZd@ zQ+{QzQt*86hj3+c0A6Oti>yj=1%*8q#`%raqD)Aps|RiSn^Jvn=03#WI5j~XZ2rxlEidaGjv zeaWNdnn3B{%a>eRnJUT-*V+yE^47jE8qZsQh?&zweyGZZDSSCHpcyRJ2iD9;q&er- zfby3$O?CA$RG}jk=lBZ8N9q-DxaN|7j55ASPj!;vM4@Xivkp`2`}$ivSIbvM%Fx9q z3*S+RAA<2Z3f$kr7`@aucW8&0C5uQL^|WVTg6PWUNQ0Q~S`mZg_1sgn<&tmGMeTj) zO&rk5w(UXct;vwJ8|?r*8{%Hgw-*&@j0pkq=4iVWd4-=Xv7qXaLvtg3(#?Umi{>7* zJ``AU*r-)yS~mlNU^}-Vs74&h4`6NmD0ny@8tmiZzsnfLS=Xe`B^Z-mV`K<}ibJFe z9`t=obpN56=NiXro>oiTLLQ!+j#86!kq>_7zUQ+9d!~6h8!u{Zhhp>Orz{Ee8l`*} zx+T@F$Il%vjDG>!D=rY;(eba}EvacYtO*Y;SxGev`nOX2zUar+xrS zh}7=`{(SKD+a4aV(ytu>2Yf#!}@=-A|A4tGP0+q}+5VUV`^-B;12ewQQ+$ zTdKdF`@<9EF%%nhUob+aj9*kg`3ob^5a_Q`IQj}VD`zatJ`9ob!<-IFh4q{g@|V7= zkya2lWFC-V_55q)rE`rv2&2nAr7ly)c&im6;L4(Rj64^JTuaTz|&A0h~wRfIz zO(p9ecUeIN#Da)YM3k~vk_C~_gCYwOSd^|IfJCIj(i1`v3rbgz8j2_ZktTxl5Rs;| zK=`LS&Din~Y{7Qo4C7@egSvW8Cfy;Z7m;Hz)V3O}ZKk{8 z`qEg4YmKzp{MaO{9Jj!T$LcAw?z$<&OYMQ~i;FmBH*RV7SRQA?Tw7^t5TwNNw3n^u z%?$NW@$8))USWkZ!lkSCw?lQh`?VI*8AC{;O8mzjMYR2O3D*-B_&*SGWd_Dqu7!%b zyR-nHt7p}=VM5l%m}C@SvjsW_cmab+;x!fGqR7%}MbQ&`*B@GO<&0|{_KyR65~9;j1q zk&MYE+tvLtw%CzEUCAb0Cu&=+DZ+tIP^!^tdmxt!m3;D~ttZO=kAYub>vqDp;W79D9E?k{s=*{YeK8!9lyr#qb#{2rJl zpUd%g=B+rrFDU#*6Oeaxn2@~%(;cjsOXmn*f-2Hh;kyPW%r|Bj$r_Si&8aK*^Ovo} z+)08ny{KAOZ*nUVtmhKDq?)W;}^-zCt^<3PkTm=JJ5hLp}A>xjf5c=Nwe z`vM7@ubbfL`4^aa(Qi60MHRnZn`#fjdMxn>wkMdr4~MF{OvFyR-{)hC-QaslL@)NG zA|8gmb0ZPG1K+MT{pO(_@`v^vxGNt1=M1#$vEXxvIAJ9ff5CL@ze~=w@> zhPFpZK*koyVh*}NrxC`1D#**S&EaBwSu`GfB2}djhDr(F5$w-7U*(2fU+E&huJ6d9 zjM4kdjET2(evfO(FM~knOEM$~D+2qpQssj4TK^F9sODfZAUOF6H|}=+oD0)!l@VBe zQa=`tJZu}4e#;7D`JQ%0DLo*#@=@DViT3Lp*wfUzJAwlbJWRubXo+(UZsgs4f`A5c z$etk)QZhG8BCWVevK<>tbqitQIJlN>{3@SlG=)XcpMNOEA42FmhiI z@gcW-&)3z#1!IvI80f%CCmUAA=?>*Ihe@G_)sb&s67w%-N*}hE{I&B?6-!mvu`g~( z@NilCE#~t)UnA9K0<{@KhB&Lu-=BLkr8o29_R`2%INCC&@AWacPK1=-Eg3cb$+OE0 zxNy9}%{tnsd*xj|ge>+O{M$vRyJ^kJ^WKu!f#Me;T5KZqVFr)8_8R5(?6jGfZvIVCp*ULcA$}Y z?+-jI=7(4_5^MM$%!w4MneQy@BtDt9%^MO0X5DVgr|KwsVoCfb)?f&A zWfE-a*s*W{>xkjp7AgF^b#^>aEk~*YNn=eCD!o`i&cCQJDGX)TvbZW_5Iv%G-OTj* zg+eNw`rB;{cTO9f{?Ue1Ux�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 S@Z%leb6M;6O9dCL@B9n*v#P`Z literal 180618 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Ȓ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 }OhbEFn{soKm(;!aSs9ux_`PUse{PEm94FXES(T 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 z zpqy7+1hz$>0}L%wK?v3xQw-vu)P|8{2Ts(kr^4iui(>z&qZsh^MJiquM1%8t6LRL~ zL$J*cGN#njl*qt-uaxPVg!GJTT!F!ak*j+jlGe5&NgV(=c*FIT0IqOYLX*SRPtZ+K7O3nt?)|B(_F907 zDl9eUxDEz!`%)3;mj(X_i8UK!r>RPF_Zh(ZznSzR~>1n^{Nlw6;pRG7Ko4P%+DDOJC{ii!GMSw5m$7ruuo$Ud< z3j~vbM%WtHPfZ66=b+R74mly&_<-2Sy%FERL|~9w*x#sR9EP{d0cOrub4;!|HzUjp ziGUqlS3$1w5EL=0P09IF3I}6<>2^q?-M2Bw9>T{Xy)06uPv)xd%2@ubm!0}h8t5dk z@%bHbsW|d&G5jDW2a}4g$T1C(A-iXp`Ap8^09WbMz+yBD)}hx|tp*8^S+S#$k$S&F zib3EnFI5&u>2UrR-V1sq1&XlC?0({SZ(T% zO~HR{#IK|6UsKRpVnQ%0-@e^Lj>i1;&PMRu^i3nK{PZFvd?DTV#xpW*9!(o2|K`!P zI0bkjm(|`~kJ1%up|&_c4;7Vy96P^Q5N&K?&4C$~(UcnuE3KD5n{-|Y!z z2Q)L?xEls=A@XNSYL7kLE!Bq8t`2YWEH?2VYKS@)i`gJXHY0VUoeY;n|d z*nx5^Y>d!cWEzJc@UDGp2{;vnXSbhS&6C)nmG$FaR06BE`T zAvFaAcr&)o;?0T1ua>@8TBuXs=E z3;Z;C|^|G|G?^}lYDlqjT(xo3Ru#^uXnBamZ<;p~bVDGs+?6^U5Ovp<1KB>5jj zYG7L`o`$hs2RZJs_V1I(>?{s+D=)va43<7c5G0?0HZQ z8wptZku4m<)rUH8U-vo`ftc8UH-0zYAvys+ z7ydQMW?9juvHvc8w%{(lE?v3dE5LI9BA|q3jFx^EWk>1#_HK?r%Pj(u%B$F9S=Zle zmz-R^S7{?l+9ClV{2s~CN}H)p!^eUamr46zwS-6!ItvY(|Mh0?vH?mKP`9may1&U- zJOE>|%wF7ji?wHgTyH<%!2~n{v(kU}Yzvigv_-x`NozpJ%l8>m#rUB7I%aJK`sxPO-ZE;%+3F$&00`$Z02V+fM!XuD;i?GP0%^ zD03+g3V6hUgFOW)A!p|4S_1tS`%VSclqcWNLdp%8G>=y>yseb91R{Mtr~ z3B)SB=G*tPRt&=pIBJNq&Ct_G*@%dqMp&yg=mJKd7$iPTkwg;V0?1c@1mTX5z5ezFkVsK(^LE*A~jo)**l9yQCy{OZkd9Y zjuNa8xf0%-CMf6L{W_PNW8HM$Jj~Ti%OU;};K>ep5|+ zWxu0=*rm5lv@%D!5KdbsPbsk?OZ+3_ChdxKrp8>Bi;HkSQms8^bf+MJzuJ3F?#wKs zRq0`p~wpf2MsdvJxDQ%&@XOr^HmV4TSo*>2Y8jJ>t*sk zoIoVYJT6+GcE=~f*9suN3jP66oT*0^nd`DIhP3wx5B8{L(49$`!D;rW9_+5n@&InC z?YR5%t#rweo~b|o{H$kE&BUX98Ux=j6|~Qz$v8(-;!^LA)jKUQB_+RYv{$>lQos*hlWTb|B!bb1}|o9!wSi!fpN`&E=2(lO&+rmEf{< z8!k8P-514{fwnE#Mp^b8GV1d@)oc0nl-0mI^f!M6akkE`fIAb?2T?xTWEgxr^pq#e z2ZtKY7NLR~&fh7GRJzKcn6uPlo-3rB$Fc1f#;Mc!fkRuUED!y5$)(fsf)LpG2C#sPG{$?$1K zeFl}g%d##j>KmlDwUzv8CDU@~ko5J_OPA^TbAL!%Q(uO>c&lK#hYTn_TCSj!El7P{ zM<7BzJMVElPYiTEOAxoNPS7$kS{x?9z+Br*Eu-O*Bgj9ER1F6pn-L)J>(54m*rmYZ zQoF%D)^?dQOFc%AWL3d~1Gmyui7a@76@ zg&)$(O>>cKwk)0nLAC;tL%71H4ZI%i4nWgKKh}Y){3dpNamR-TnWa;Zg7fj$?}Ha8 zVHG|Ol_Q}K5`tS)mKm>uT;H=C97D{Cy9q?=JNXi*=o5bG`1p5YI%YK^G&@_tfVz5hg!T71p49p;`qusvaG)1*LKZDs($`#cVfdL zo#>OIFZ-c_w~IJJT!&Y6VU{VDX?D|3uYw5!!dpJo7DeHuWBFe2m8;y0^7sT4v$$j1 z(WcJ=(l-Z-oT0dFlwGiZI)P}C7#L{T<-yA^RWZD7wZ|kq``T!}UvUdq=X6KU;3(_m zPkKU}OP0qQ=pV6NrSkl6+o9pGZ!%cLB)CQx{q*JZn@F};GQmdMhio6S8o1FfVVbN>?>|9>i*{=bpte#&@;a7ko1mPv_F#VA;#V>Z1n zJ};O>4v%uaB^1%7z@Ez{TK_z~WjOm6iGd-BJp@mC)<^lYsa2PhvkSmxXmCz6=kLG% zE`V_Vbn68@Yh>Ysn7+jukTp^v0$29+DwB_VhL@8&fJs~=VE^gksJbvk%~q{1l`1)B zt`xGZ$?xSXc-5)g5_i>dM>E=f^2rT=QUbhgX7k^p9=IfC_BlcCfrqZ?7kh^GCnWD) zdh|choC$H=PwZmN3~=l~+#*2tvU}N=5rva9+I6mm!Zi`90I`FRT~Qq7l(o^+UPi_q z$m#>NK?F2|M?$GWz^t^GFPG7gqIK3$8F$KHMt$$6HlFVecm+^&P_TDA`Lj&6pZC-? zz+sf2f3k!+cZ0vfld+r!oJ>TM!I<)Jh17i}@+-gGYt?5B_?I&w200zb+$~UK`iWD{ zSLCq+d68>C(xg4X0Vw0eZWgojA`T|LU!#pC0H=B61c22N^pHlFozao(bk9+a5Ccd{ z&lE(qZ1~=~6VV|mB5bG-C*~o$0z^DlS6)Z;Wt4Za;XvMZ;i`;N{Xyqs@QmV!uIbC6 zv9teo^xAELm1@Nc=xpnGiGVr;8R{glLe+jx_Jaey}X;1<)OR44f2*kr^U)e$S=io4?sN&`HqM&w!mM^;ro%32L4q!UPi+G1sya&(sOM#;HL4-G=WRu>1F zQf%oo7ix?!5{W|9)k>p5egfWxqy*O_cj)7$fZwYK>>4bn%u+?3UWH=J6)JH8u)%Nnc$UhmK+AH?d&&K8)ZS|W%CfMM_YCFZpqABI zg#!~ud*Pzj5-{{cmGXf-XP)X0bQ$4GcBw_ZVhDtuQP9?a5gPIpx- z6qRHpIe0LvuNv~W@%rwG%-outj|@3;po7toNQXKqHA(5Jbmf|-%dZWF_FH{Jnu{QX>b1b43&l3_a8x_0fji$_(Q&o&jdTehAP6-ueR}M?P!n*RaUK zj)f^G=dy;3ezIuYqWEU`p3ydq5dLDGt>CvpjniUAoIeTXVk03gl+yv1oLXsT_||ib?+fxY5lg*`bgf)ryB`oA#yEpRkMWo0n8)b{SbF=F0XC~0= zFY>Ac+1&O)Vsvjgj7bRz;kJFXPjmJuSHW*{b)ET^R1qEQ%R({$it8%E1h zU_(l2elomuDsW!JYk)F(-ac7N$7kF2xkAGj_&-lN=OWF({5h`lq$zvw7Q|eKS7k69 z-sir9W_5hCXVFjn->;tBPNJMN8dda?h*IBg0V}TFo7(!@Glmf=drXRdM&l=-~sSCh8=y1QWJy zeU38~bG?%}h@|`=Nuk`o@e?%uukRyLs>vQ(lK(w8^lQ94S#B1j4Vyh}S(%5CpEM!G zY^$*JQffkxBVSY6DHHa%9vbxvaO>Uu^o(Gk9H0(900>GtU!C0i4WJs;RNtpuBGIsX zwd(N1dk3Eu!C^7wN2lt(@vX|cn{CbF3Oyi;Yp95NmvicUN!4;z`iv?K!PL(H$6^M! zAw|H@%T)g8!n^L@FWMvp3`{fd>1N-eJkt(skLqbY^8JMU>$VG$2t}`Ey&SN}>Dg*V zz2s9)U3lHesQvLUn+YaH_7XHeAJg;|Q@6VZi0!v}Kse@YjBmGuQO_m7V=O*9BN*;- zg)zt1LMyGEK!(QkXO(p`jxubm6hFCD_y&V**IjBza+c^f_gGBl?VKwVj#BJ8VG^aiQ)WWNuL5Bo*+CD@#xa)Q33_!ytLSaH zl8ZEE-lSuOIu2wPg}U|`-nsrsiDt(#KdltvT>AIq$UGm@=sbZhwA5+^e0K)B#E^0W zCZr2Tqnvt`5r7?~An=xtCC`v0oPp~x_tx$z{;>0jkBVn@eEHX*M1QuQCAAS)K5yi7 zo6YsKPSW|Z6?NXqq0toYNNjsya-vVLauSD1u$l4BP+5Lcu5>eLCm2{VcB>SL&%;@w zD0ywCR0@-^bya`uX13$knr+TT*=h4s4;}doh2f||ILu+(tA|tyrl!Nx#Cj>e^6$(v z7{DwJ&&YOj$W4ft z-e4INqWU`s{r$}e%w%sYrs1_bE6_B8Ui#OUY@sF*)O&y%H$A7ppw^jrJBcA2<=dbh z`9s30QTwyPuCdRGf!hCzT87;G=vM7nljqA|$a4xH!qc9{Fwi2yk?Hvt^FS40WXUaV*>%g5X8$QSW4cy9}UoR;hT~ca4)0X1tIn$^ne9;5y z!b6MKB)<~X2zm<;ZpYoriGY?JKtqMY&An&Fs9+OmTuw*SImKaRlfrH7$hciJ3gJc{ zP%cI8di?%Y-6oHZN-eX>X+`+UG1eg zXaDtD^*H5Ut^x?pt$3#NR|dRB(6qE-%D~lfVZEdOOU}2|9QWy%7+wVI`5wh#YY+^~jmtMB1{c;UxZ`9r|<+fP@z~ExgXi|8h ztmiuNtcaZ0Kd(~KC#kpIxc!%dqK%$PSk&xcQLriXeK6$i1gd&(q}j`MM80DeV9WCD z1DvZB08CEftsT@^g8f<_!?>DzGN<%|W7a9YC{u_l3A#_YR=`pG@aXL*sr$u01eS0=-*F&h8-NG@!8OljlFosJ0kIbJhAv^1*Fu}O} zaN5$cbJ6<7*MS84th*P$q_>8y`g7gWCjj%XOy=N9!F8_|DzEnV(N&7_Jge*7IiCD_KsXD&4t`kT%Is$xoO7I=Y5bfskQ%EXhul3`|rbn}mu2{2FF*GV| ze{vjy!L~DO+*X`vk{nKyKOOjtUp+L)zy(C!%1a&j}Vi3|y>_**u~iv!=ef zvt!?Mc#a^k(KLC=0l6*^u(g2K(m4y!48IL0ZJauO?G+Rn2l(t#AAJ~n?k!4Be@%V zlHL)Bs3%R}_mlY2sOp122E#u0QW0@@hor6XghCNv^FpgGr~)Nlzjep;gQ95+I|lP7 z)A*VmD^@JO5&scomY5f+j>ip>)SO-S83^_n2JEo?DRfGG+Z`#u#r>_5hxVPtbVSrk zmA~rmpOUV~nS|jO43wtwr_Y}F`62uj04Fg}LAe$f@1Op6 zoBl2=|2qNh6q&A?heTNant|Z2`5xSXH^uzlky8H@%@$csyYItVNN>Zl|O#4+m1IDW;}+9 zzW@5RfBy84*>nwSs44jJ%+GMgUmv`(7p}>m%E*;;`wuUGP|Dx$)+W+bKS(20=~nlD z=?MS&p>xOJ`YPSo4*n?vEzxX_!FXs6(*NNxY$EMfg6nhpqAv2s)W(6pf%J0TU+T-h zeqCV%T+_-zio+kDg*IwcH65>T{^^5Fc;K4m#+0W1_$+czC-MKfhy34zP5AG@{&*Sw zpZmsoD8GUJX9qY5}IAU)mIfNZvlwfi%f(+JZf`4 z{u;)Q`ib!|hKOK?An6)3p~`OGaqO2C4rNLcWw;?%WW{6OLNm4t`fN|Iz7(wi==%NF zSSO)l6TLw4qD5S;+~?aE-`Gq~Y2E#~-GbZPu7t9Jx+P^t_^4hv;022@Y}r`K)KR^M ziyYq6^<=5%?r{BhNB(&l2`Ix(50#r%7{i3q;yP>u+}0RupNcg3 z@2LSPL9Bl)kQZulJeM;NU2M#D_TM$b--oI_7JifCwaWWZT5xym=4~EgClC+-`u@cy zjXB3n-oCgu0;_qHBEb;4rquRb4Y0vz&>Y=N;oj}v&t5_^*{gP=)dZF8WSKDI8v&Gf z7s4<5V8o`2e@@QxbT_g%u>pli1;OORR`af~11dOGvmo&mdc_`T(_z?7a?+?N)COjf zs{<>1m=EBn-TDmxOxb=AvJJn54M7x~9qA*27 z8)JIX!g&IkR)sIZh=p5}DPRj`#9XFb_lt_q$Q>Piai#Co7MFXlY{}}2uvN8>z)@KTFojMnkEl6Pmf=U5pgs_ z_KUShiqO1|@t2v^_mI)DhkoNj*mx6bH~pc6k}4#-D#NoJyvGNie=cY*yn&Y-;a){(CG>C|zv_K>xsy-)ZtwsPbzOLgw_8ho+w1}g3 z5=aT3Nk&Af8;7APeOiISm<2rMG@)S$*p6jX zA3&)EZdWH^ayH(`w;->QVO$G~P4^-3k64+kR^w(TFl`yNU3NlT%Qc6NJrQ#GTYe9V zQko>ksLpm1&aG_mLadQXFz0=R>8373yW%97T3f-mpPH|R%{!6153wqIks!l}3Z3av zfNB@t89O0qTQ1NJ#uN-)#%P$Ir#L>E-kLR72z+#xy~0md;8D0X&ctzuyqZ2fdi1xr zlpu#H-C(~1Y5P$?)!7q;6MUGkwG=_#PwyrMTByGSWR|BbCl&%$`D|&&a{#=UzdH!I zkDrcj3_*^h(t)|iYbl6hz9F#)RyKJTst|xW&}lQR&wFF+?c28?WB>J=m-a#Zy{<9f zXp!Y0pbu_ej_QKW>7^2#HnN{JrjcxnpSARX85*x5%l1ei+sjN}VH#Xoo7TD62_}D} zTvlwvk6VDB zK#nv}o?=}GF|5(2j1=Q6g<6kS?pN`TNQD^7Od24-&OH>{%HPioQF8<&OFR4VXg#hk z%vL!#!K8Hr-hP#i5&QVBF+o1;BFzgSj!vV6?A+PeGOhkITHTFJY`+&LZM&iMJFO{f zcNUGI^3Nb{kqt~!eVZKbHtp3Eevo7a-$8{B^8PkACeJe4O@uGG0mE-Wva(LaoX>Q15Ge3_(cao}_85TM zM?iN#2IKV1fhYVCe5(p$ZLrC4BQ;nPM)@~tK*%@hWJcPHh9HMnb$LzhP;dVINm`>P zsTPGnz|*y>6>yo3)Hwu`!d6bSxeBS2AGoHDNEnt*XoLjjrt>~gKu<*0#q)dBF`)iAVJ z1MVFKIalF%4nGQzk?IQpp`r#Hl~0Z?@Nqr(9mSxZfnOc4%wUnYfy+4I4Ftbe2W61V z+t19EgS8vh&e9<6T5gxR5`SzCt_JM#C4+`QjZu@V5OV8)OzjT1F8c@j<{*xIT8>^J zUSoDPKtsL}NNf}+q4k+%WYwIf+aAGfcM6U9A+=hOb=p6<1eTAVit>D-f|hclxXZxNzy z$-_tdIUi;S!`#USju#(iao^=jK*6U1wcC~Ur82EM;J?-wtHrM5?>xih95w$5a=$QI zqaiJVcDit*MU0n#b-fD-wb~g!6yE)UMspf35rO2mN=#qZ364q+Rq}h^z|VAfp{Svh zR;qUe#;!Zz<%*Bss1J*5{89w9oi|Y4E;k%UipEQDTc}_}H-A^|A%%|6{$Eq}MGZ3L zXn~dRyZd+0!+<8S_pFO5Y%TZz-!RD48Qr^NT&9K5VdOq8T*lXVVk;(17m8xSVcp+O z&a=ov?bfZw@f`v8jEM%vinIuaeGfb&55ApBfESq?%?s^gp%l&DquSU^e&zRYw#lm) zfm#BESCZbqjE#R5s1BF<3r)*vMCKiYV70Y-Ij$4vIV)sQ$6-0$Z^u5N0u|QttEL%F zP+{isM0&sgdEBn>&}TIJW9}VL+koZ@Z}t$%L{`{BBl*NN+aS5;iU=&*sg>S-FqD-L zbsjArSiJHpnFAHdlLjO#ZY3U{`n!9hJRp>AI2Gb{!wo7tu?&@?PWUY17i}$WK9X^u zp#$lLysyQ%95-?3LZ1I(VNGaPnfoAXK%~fg>AMB{WhdB%ZOUxq2!(Cqj2)sm2N zo~Nzf{M!$Mf?wh0)|!d}1KH%T7^2=6dor-!|3ZEr&xav3f~M|)q!(} zLfUO#*YG%rt&SNQ%Xyp5=>8tqPz%FWo@8tlQy0(@-q)*&eLPnRf}UDA$<>aNKxU{o ztEhs9qQ7&PJvA6pm!O7$C5I=E%v?p zb~&v6nV37jJyi!fM5D=GoxCdmy@E|Cq{!O6N}L^`?g24T5UO=>m?T|TCtC|?gAOUS z)?#Rv(Q<~tj!-#)GM3aX*ib{fYWDCCU2{7H#2?4AT!j~W@9kstK{Bs2b=W^V2CPrP zJ3zX{r!6TatDOf^OG{{kk`xG&)P=>J5PWK&@*J}cBABG1Zpu@I8F}5+mNcOqzEvMe zV>C#Adp&?(K?^^HL3g>ku=suTH_y*7nWTe~OPRTd@8rqz;m%O7EwNc6rI^mzc}hf* zw1NM0hsX1y|LuI!5u1SUe)y5wV^R9@c+m-c5L5ECoiNf2Q7sXLb-y*K63c1SEx)6i zC-FO$2BI)R(JvkBEmd5&o_Ro`^9GeHF}2AwY5)q&LA`MSyemYCT7WS;J}!KZUZ6C& z1dEK#lFs@44l3N2fC?z7&0XVIAhTrilcuxue>k@57&L9nBz6tY9h~{~454;LN(rIO zY$`kd&^c}*S;s(|d!tvf=Z`RUI6|A%W2m?NUJC=l91V!gM)r-&Kf>5t2w_eUV%zmw zB1YAOAgU(yzg_r+sPk9*g+oY+lCAome(vr`YlJXYY~(Th>4OVH;hMtVCjXvv;ncSe zqYA)z{fhV>?&EF~Hn=9PI)zKWWh?mc3Dqd>yhj`J|IX(#|WP-p@Tly`1F_EWgHmn0rgi zw$nBDm{7WnotW7~;UkxzZ&{*0M%kul2ls1T`QrCU(9*t}AKzV@VznRaL3~#Lt0=e% z+`tTA7c*=@T3mn)(D)C4Ag+EyPzYMDy{4Blw+1^Ps6cA${2jaDu9)2`06g%+(S37I zxuHbQMSLJ9OcWnmCLj}EY=Pn%t6DLaqv=_ZbER?a*a}*re*Q*s?n?&qJKzl3`RU7K zmg~IFszt9OA=^$aWdC|kyGhC8;c}?2YCx1XbxT{%wk{XA)>N1s>Ol-%PWtcW*qytc z9U>zUSH9R^SmN4O{v6MnZ+bE$&i|2^i(Ma(xO9zsq2JIQw=mOrekCCRv3~SG^p!mY zpv-P$rFhbF?K5wJ%ObnVqf;rIAJInk^j7?-kprWorGfU;n7@cjkewF_fmFS%6_0-s zOh%G*OsblnFD`4c1QnU2>n6zw3pN52S(Ne=-(U4C7C=9;t|%yotGt1n$H91b1^6_q z$Y1uoaK^XcZ(nbq%xF`Aij7=Qku2W{KqMYe1BZTFhbDeXf_9*&0 zcAi~9E3>0gPP8WWjM$=IcPsGXT~vSc+WE^qH&S8+Z7 zB7>QRE9ZPj{Myxa!z>#p{X>PL5y1_o@Kwa1^*G=(k%tkdsw#)g5vA@6Ks{P7)s~Q0 zN~H1zw#!rPS5rGgO9R~=Gw_m-c*xxJ%=p)g&xkZqR@>+H7BUT18~6>|1MaIKlJu>i zrNo3_mBt-od)$8q16N}J%2|E7xsb31LZ4@H>ua#KYA32qFF?(@Ze4ncf2-om@k)SV zMv|DN7;=0@Am1r75KUQ`t{0Yz2fXO8~r)iLN-N zFS(-2V)P9_HXj5}AnvEMxxlnUMu)iU=~KFc)`d!{#52PkkG{?t_wO+Un2lHdB5ER5 zr`nkA?w}#H$h*pQZuExJK0VvwkBPz$7uKB4&h1Bdtrs#93Q`>#c(Ce)`qlvQ7WKZC zx6k0cJ(UaZCnb9`)3$BM6??PWI}O4Z1#9A9*RH;n@aA~%Y?^a@G+l@GnwO~vETm06 z&iI)AY7KPk6p^(rzs(-*RaFW?+IT6EqjCNHw>zF`YU^ui-N{nm`v9xHFJ1(8EtgUS zJU}Y<5pqNNT>eK*ope+P_tq;Ow4hbh94zrIgYRv*DV*PQmFQ6G)dpD2mKA{tv0=Cg zArZ0tik_zi(q3LGoik1JrfnLdc|_b|#KhBzjQ#ESUkK$Po1n$duA&4yhA|R?!lL`i z%a^W=19n!)y?LQ#$G$4E$bH2@vsbjZVq%??p-~@{p?_`s0KL#`ZtYVEe@j^lWK84* zHz3PQr_RY97CdQTu=~@@-_$a1i6c5tzieH zur@M?@G(+&2|nJMulhTY2a;s3G}Uo7G*NPKFHqSrmNgpI#9_q@8oZ|#!nV}2SvD?u z{MiCUZG@@AFNeyt1hWD}7;@F*lJ7aszYJOu3Af9- zYRFf-uh;H0m1TE!0VE2+oMy8*8I^e$v1FUXy{8*!0T*$hgzZVPiG9Tx!socbJVK8y zx@zEwkR%UL!CF7Q`;3veHs17DL{q*lk(Pa#dJ%MtoF$UBPp)#*zd{|Abl}&}s?s95 zo=w>1(NsNgI`gO%QB39^p^PnJZOms+2$S%n+-8 zlaweFz4VR<4fq%7US+e?x-8Gn`5iZIZ#Cu(>rHy>I}oq6(=;WHy+R!x&*$6rc~u;r z23+Fxb%qa|O^DdB6#d@Y)S)MOFHY{6=RtD7Q-f6ZT>$8@7HvI68m@~};v--bQlPs2 zurSAC&iwg-&C=M;^sQXaDgn@1W$fs5VcfiX$%zkhkiek0s$@+g3jgfZpv`uBv*b~( z0WFn8rLEB{oU_nNRb40zxW8lNLuaSy6@@^@QmY8zbM6-^#Ff8L^E2{N!%7Sh=7p?6 zT%Z2a>c!aiq+h$aUqMtH^&fhIV zkTeYS3&oDm;2H`wFL7c)3Bym#D`(jbW?QnX8|8hT$T-!95u3*J4bSGST?`v@?+bg7}OizK!?4|c8D!NR^MbeMq&%YUW5HB;M}cen35sT zf+q%J;=jJ0XlhF57hgc*ftyRGCbWsW*NtTb6za7KS#8_9%3h@PXgqn*%!FGkM3XeX z?DB5va=s!pr~b27yB+2N4@^07uKQUQXwHf{atWS3lhE&Itm2zakm)kE$SQrRA9=<3 zd>HLOfM-VzoyDARHTMf0mW_1%oWYa%Z2G5JMji?kmUC%jNMi0`^@&@q?$s^s{^XPO zJgoO!MAcGC{^HcLm?6kfXgl$bTsnLyqv(HPX(sHfOGEitMDkmJyxfa9guwDq%`{Y7KOx z9ieyO;ZW@k6STw?Gs6SfbXP9ZTDCyh{wE@^$_ixxv-ONz?h@Y zc>!lNo|v^DLWr_kG52gK4>`+UL@rFjo};krG3B0=<^UL!ahw*xJHy+`Rv;kM-@;r@ z_eo|oD8>04R{F_wzjd6Ibe{z|nPX~W|C5(b11;`Y6|parzI9Am9fldLIlgAr6UqOe8NX$`4xx2J-q6^aExA1IcQU2bOe4gi)ozx{dwXGIY*--1^)k9sAL=Mgf}=k?OuhaN zTK1VXyqNZw&}(@&I5NT!(`o%dEbJB62Tgd5+zRydgBd<1Gw)U}D_WiXahtQ>S_&yt zYf={VS*NVO7}=uicQea9k$o;@Pmpqt35w<*MSHEc!M3mzPNw zZZn9k_!K;7>Jr%;q3@&<5PH_XIQoqZphYgnD_8Z*^EI})nd{`%@r(B}ox3f}$R1KS z+GizY9)1N|($uqNQmAr&@WQweaf@=5WN2(5x8H(^WtMS|N4}}^**znsx*c&ooP5pa z_0HBat!B_B^`=C#G_{#p=4Tc6r<;}M(Gz#B4BBxCHdhC?l=m#Lf1ob(Q7|&W5B4!K z*8=J$HUksTUK>oV;{GI$*E_kBI%pC5Bm8mRR9;o_MfR>3jA_ZZ*6{Z62bnGgtg~{# z7qPJmeB&0cKKbUKW>EHhtSXpn*`<|orQERHQ*ijUe6`coEQRn}Jv0SrPp5Lndxo+j z;|VyQViRXiJe%Oc$JR=F0<*qRcixWAqR`|ZK6vX-etW=y{D#yMt!H#qAG{N` z*3g93%f8c45||YdzdxO0a6-h5A*FkZ#?Cr-w(Li9XdeM92lvAmIV~bAyV6X5(Gz4Q z-faXI&iT zf;#N;*r8lgW{QyXZ~2CG;`&8Z3UlKLw<#B#SgzfyJmvo2wAP$LtLfHdW&!rjPZb}N zH1+xiX%QB2e$8q>w-T2uXX?Ysaq(fwluURjs?tVfQmYMQ6X^7I6@4=iB;a>V<)5qU zvYwKm#XWF)BK_&`YF?&6yV5!J6UBAZ+LpS?saroVgYDr(!a~L|M_+S}Rf5wD+t`$- zh;zJt(Z}680Cl7Gny;*#V|%rJ<4ufx>;CWZ!3=+Nk$XgiS3~76CgTCi^U&Vd$Ff`%ieen1p-vFz}a(gvi%HPgv8x>SfJ3x`w(}FFM6h7v6stssrp;@dYVM%W3 z0rO9cOQ$uHw!Kt8A@abFl7yJR=3v@14pU!=hQyQMvlhPD@Di5P7Rws-m=AfKY?-LY;_72$xm~Gz#H8sXQtW;JLnev7GcUNN;zu>CkDHLDSB`L~;?^h| zS!QM(7zrZjfoa(FXPT1qrj1_IeuSM^y(~-KtkrxcAFHmADwdwl=f7q+74K^TjJZ4- z0EhAl&s7!C0QV00IKH>zutSRy$CIY^fQ2PM=)}-2{wD1iciWw@ooHBI^pMi8MDXcW zw>ih`wgl2EVrQu2?aGO7C#@Rc@ahyBYj7>j14Na-N3E#S5xWNMJ5!;Sm*>{(7{zPW zMNN=WKl&RU;L}Wxo}IkI4L{qt#>tH%QMIN01O}7x6&lKzlAyQL<&UxH`&}{^e7Ado%b{Jj54LmS$GJ(hW+Ro?;$#GmTUZfKOe|gJ z717mY39h*8ty)C}YDo#E>{qy+h|k0D_B)i7=D-mAcxwlZA4}}0#gWi`lRoBUdPyCk zigV-83{WC246>&^iyM_JVic~Q!L(&{6$|Z6T+sViN(}a?6Pp`)k1x&z9BLvEj|@*H z>o*4|XVQ$i(>HY)Vhqh*5;cTdOu^M4C*@4{XRFIN&F8!fL@K?pi`_vdOdCls>(<6| zGMH$kPsZs(#-3yc6i!bHh);>isz;9k8+~TinBe zFg!b^sTPjq4dj2g`uLebZ&R=uTa|WkT}ig-sBDq-YQg? zbppDD6~mwW^+asBoFCrE8$7xli~FkN+Gt9gyo9l?P?n~04Y(!SysM74^T|`Kxc5HA z32Am%ymDhpr~g5auojN@oOc<5HrD0KvXh^`8xM4=6vG#_voftN;xIXROubZk{sOcE zmn+LT@F6TFC(Q46bCe8~S#^X|B^hwpBC(#7C7|$T1tZG7WYmT^ZZKcEUrt-cAK`Oq zAt6!=Ys4UYQFbtwb|+_5?E4X4=9N7R%d!S0!35wk=6N&R&pc6iDVvxJR0&@&8EFkk zWjl|{U<)`zgsY0?N`K$!xQd%U`a#uW8vDhcWb{FI*PAZSWbKaqno4bN$@W)nK84}Q z4y%ej=sMU=yYwvb)&a370c{?@d})?dw8c}a5@{8QF8+sN~{rdx9_pSi+2U)9Q@;!4qB#P^n(ZJ8V68jT+Z9P zYYF(PDJ8e{z%^k6?1^*C@AP1CNHojzf3f#oZ%y^z+V7)27A&9$s34%yyC6ksLQBaUBy%XsmC3K`lk=}yzB7|z_JwOsN=brr5+WTa$gZFxm*B`(YGBf8K z-!bmbxNnw&0*Q*N61L5eOLV_eFZe`ySG`KmH=u$(J(p|Tp`>QT5q&Dgi9_6>T)nq3 zW);3qeADqbTflJK*4;8rK?Pllf@aoo5UZ)ZenITA4>^t@)?kp)u05o=r|Ip>Q`^9V-)3%q zt~q6W@92Xj@mgL2a+DXRv2iphC?(|S`mD#kod!&!M)MV9m8a3DFy(n}_&$$}67A8s z@$AS`vg8+}CA_HfJTNfOxT5)r`$&lg`=)j#o6BE$eXA;Dn7Rw1wj#`+`=G;lhEVd? zn5OVuRRFYH{OQ!H!P*6`(&12{I#Y;)&YQsD<5J(4F(nnd;L6d$d{Lh#%YGY{tW2t& z2ppI7?c(8%SRk_Yltbv9&E*J*4IXt^%gVpBDqs@MU-|qoVMLcws`mCSL&145Ud$*y z{MRlP5@v&QXu|d&t#tg)8D6~3Tk-B!TJ9F~`?d(S{nNEqC>Y!)&rtG6cV(&O&$aYX z=b`W`5JvbfDvYoB)XMH*FMpM2o`tJG0%S%fN_T5T<9wHJ<$tz+Z>ZrLtf#Lz$@@QP zFs~Vyg-q`dgw&A{JAtcm=^lR%*xI3U@-oF->=5d2P_2+8n}Qm;6jM!Y$}+j6*_b@! z;<3e&+x?BzRm9)$7PC5p17QPOZWW&|#U|gyOQE&XRxc*oubSK$7w{SKs)o9Ugv}sm zHS@z3*I@mt3p3aY*QB4%K?v^^#wiM9XWX!l??nKWm~5Z_+6`7pKBa@@hwnmTJb`h& zEA?xfNcMSXhTmUxtDt>3=9*_b9x@pyD;T=g$a2-AY9w6VCASf(F#c9p=)|+dY44Ld z#?Mn`^5Ehe1i$v?Gu(6H;wmj=_ouHO&E7sWc%C_vf4=23F)(!j($k}ZBgLnuA(tuEji0J#b;E%y*TA#{8!{&z8#l!t)VIe29CABd}LM)9_|e?6WXdk&Z6t9jU* zU;hUZf42HY(G*6r!lGiI-bKiyYBSv2q2b$&RKnRKc{ zzky8cgHI5m zNZ>*l>)z5mjo~GNxUrc;j-+Zm(`gBtIW1wLrzOnn{~LfSm0st)G-2X;p~Q}a(m)hH zo<1I&osGrU6;WM#H1SI}6TkrL82kLXcIS(I_3;H7QU=pgdU0obpBEY#JmPXBnF{tg z=U&+OP@3WxG&F$@@Rt1hj?um4j`?Ybs(G-a!-WLxJFnI+FRwcJC@rs6E}pu6!5tLl zdk0pZcqHFe8-E?x9P08z$>Hk6`mc){`HoKr6%e?0bwXk0y$0AFUao!Kd$M-Ul?Cy~ zE*LKCU$xn-guFU&&0P>SSyhNei}{Zik2A&Dj?|WtrRX{VN_lFYk~_Z( zLg*v)#OIXCw_%%xPElyFpNw3q&oDKfWC+eFc)#LX5Q|veg?zAJ zFKH&u9kMB9js?irh80K_UT}P7l8LT#WQG)@Kj$Dd&|!2>$12B1b=A0A&w9v3v9k1U z>RRz^Ej0Et56GzUh}x_5+NkIp(*U43E_Jek3>;Bfn*W%oNahX1xQ+3kb7`CTL{v zX|k!Uzl~&|j%;gy2E-?&AB?XQa3gdPjOPUyi$!#_WF<%*BxJ>emN(mKnWh4jQ1*1|5a-Bv zDz%DSO(pS-tzlDFZ}o`STx1L_Zg~wAn!N2 zQ`f)ndD4m48W%Ctj1$TsQPCiwaQRED81phm_W_Q7@U zu?Hr#bokB5@!zp-+l*(bP-+NddDl8%3|AO9EBlU~b-|b;PP_L=~<28%_R>}KQ)U1&ARhu1;%koLa8sHF+@;)AN6>*USvCT zqL|lwC-A%lG71Ym9i+d4tb|JwtF2wxUa4aA8yS^aYdni)JUW!zi2h>`V0W{cyY{X| z17{d)z&)sA<||asB&z>)fB$2G?V*!#dZN^!C~IcNp4rd!~XoQEZ$s1m| z)%!tD$aeE)DNoMVkcI^`p0MZ9E7|Po0@+Kv@mR8ottv7fl)4Q8;ydidb&5o)QwE_S zjDgv`-5j7M5_Ef{L$~TTbGSx^mM)L&o>(rp%?xD zoW_P%JG1_rbS3)x_akWdJ**YprbHD&t}P0F`uvnV{Q3zJU5zirW&bw_;jj5#>{Q)+ zDfe%%!V`tH(-eunM$wXgZzI=ZXEzQ`)yd{C%IRFyu=x~K+O5$R)lihzRcV17QI@?M zy_GdNoAuv7R)zZ#Dk_E=LBCydekho*Jxzz8lZHs>d(@3yBK^0l+97yGNj!3GM7-2H%P#0YbkU3^B=Jr=T%!E<_puCtnx_s;vn-x}8^Yd0_7{+>Ns0WxSgI$~ zC7DA=g+8;TyicTeL~Tk8e=4_Wxr^Gx=taIAV#-gYTFr{&aqk~|a1EMnT!SuDLly&c zwf{qf3^JWgJ0#X_@ZB5KKI`)+kws?<;+H^QNUWtqs+~&Wr%3e#^aQmY?=DJzTh#i* z8gM)h)HXm#FQH=Bdzm0WoQ1Wz~Wx;5MpJI&tAF(3rDM;w1A141lVl8f`*jJS7 z|NiO!UZ(%%4Zr^HE%9IM*pvUgCH@a@iR3Iif9qF~vvFKFW6!?-3EIt3d)fLiG>5PJ z*HDK>2I=pU5RcpXP{;#TBwU0a}Pu`t)a3Nz~ebP>PU8OUU z$wpGH{G7E``M>83G9yu8tNOJGj&D0OYf)~=dw&AV zl^4|;5}d$X@VjfGx1wn3|LXZv81^kER2X<5%fFLbXeQ3AKiK2VT zEmP0gZBU;MVIsf{HzRTtH#&9Wmjq}1NUaGE%vg^Trli>Jh$0z+3S<{Jxqz~2k0+@$ zo1P5pQftXxr_fN)IPf<(1lBGB;oGQLA|R|LTA+fBp3LxRiV+-jt-`{_mfumWk_%?{ zQTtUkLP#aU4*4ue;!uAW&!@hKcQdz6Xy~yZvp?|0|IsxkSSn&p$l(unp4}dCy7Co)fCw=T$ad1h(1?geqnnqN^9%WMz&3zM{8^R7H{v1a8jqcm- z82W}s^47wc*B*CF7N88+4qG^weKJcZHk9Zxvo+kkOCP^!rnM4S(J_BX$SKTDq!Kyl zDhZ}N7-@e3)FiIqkUJ9m72y6hvhnL8a@sZo5Sl@@wL}7_ZJ7V+s*t&aADFNOE{e4t zVH!03@g4YV^J5@EcDHeu)ufq{X4Y_Zj|{srlaGhRW#QFBJqm)ZBx{!C9=>>+jfj>a3&0>p@q8d@BaHFJt&~C5c${ zfhv>r^Zc;5`%|HLeqSm434A3=MQOipXY`K0x~kHWQQ761UtG&loT1l3+gND(%(H{7 zchm4GhyMLZMN4a?kfaQ)j-igD?7#iJ*iG!)q{;2G4>;;@QR`DK;vK)nqfnp#|O&->RN`id>;VftCL+0Ev=i3UVff(zBnpgy3B zm6$z31$>hnH7j8lZWY{e_ivYq^w8ZVI9uYiq^+v&V5ApyMgzz!2bM&SkGFhsN8iPORi8OYuw^~-N!TAetT(y4j_Z=- z)1f2yAwTS;Yr>{b&xjc^zrGF|hKC~u4ObZsP6|X*G-zWgNp}7(+O)Qj@my=!C;7g^ zSXTXGHQ73xe#HWR_5}DGPv;0D8O8e9X_q6~8($Cg1a25cOrkQQD~IhY3pUeb6e@om z3HVG(U8kx6uW z>@ADk7C+xUHkNZS$ox@I=Y3YCPW{?a;~#cJsO3EG$bRuv`j}p9Z{I=p(t6i0&nrPh zqmE2NK(@1#p6SVO*~U?hdTnpK-?*AhC4U);xlseiLRroPz;oOc;)Q+&5l!S%PUH`L ziLr_2yS+AZqOxBLn0@l8*H$z08S1C?{pc8m4BCwTquaz(*rZzar8knq zXDgA2vRgb^{KUy?@EJ9j@T##pKtkz4!qSRg1%(aie(Wn9E|#!sSXzh(+ZgzcXgD zgEsc0b-%8lxEyi0F;&~J4mWI6jjD{!k^^msx)inLgAoET8`|lI6w}uTPVo+#ivc}D-$beQWdsFY(_V@`IQSMH z>$kr+DH(pl5L?(bRd;S2t80T_;DI@@@`QIb_*sXy(sIL@a!lFi^2NY_gYn3?AY(HRAyvTiXQ0DPNy2^Z%9m=!izRk8@E(VDl2S}V#Er^ zTVLFJ!gPdr^pb>hEf)SB8zyawu>T0#)3~|EAzp(iv>f`?qa|tZ#X`@b2#A4wrzrXq z0n@z*f6J1Drf6+5Z?SqSG-xA0bPIuiHev$^DJhRPx6bw7POZ$2W01Pbjz|f12Zzh>(YYl? zHcDLCZHL?l|ZhftK8h28Nrgy&VJH6{> z@UENPZYe~iMd2hZ`<39nXpKkscm=84UV4s`$09nomLcTv6Nb^(9p)%a+}f&M2*Ym9}(Ee@&-6F9up=Wfc|w9Jp=Ai(xw#W z!+W*xf4V?cUR}i|W%?!GS#{fQHcqmLgn|BHHKsV&mWD5r z*{oKjI>(tICFR|!LS_Co_%ey(m+r?ThnOvuDr~%R}%Wn`bc z2(<81^ySb<(P`oL9m&%By0@efn=OdAQ(5Kx)}iYHS8AD?_hnpoQBDp=hHJm+Ej1ll ztAa&&PI<-l$9c?^en|`V%ZFSu`pzMBcK9F?dUa1JVVcEo?|bQ4Ho<$!)sg)`#g zxWa1W6iU#y3|0o)2Ev)Ik0TuE7Uq6l+NIdA8+(H{ZVZFZsEriDnaVJi^7zoOnM~`j zqQ#LiO1ttH{{uJAW9=Y3tF>VR-N|D``}LnXg7iV?y!lSeIC7MaiEBn(%ly?A@+ zPG#ds{DW_(u)XPk(2C)DTUZn|PX>=Kkf7NkT7t*S%ORiFnKs&f9w~2*r3~>*#tbzi zSl71WS(l6FVk(z@Cw?^sS@V?0`jxln9{IlQMGVz&BkbbMjW&rmctV%dm}zZn!hW6D zH@zqMd4#XTm}c}qNU62WXuawg`Y*A?vacoS)5J_~W`C;Ze;_!;yx;Dw)7N^DalwLW z1I>*a_k1hKTg;BDTKN^oG}oSV@R=+3LtxKAWWszIT@nvIVnC4?_+^O?UR}(NINP)A zD+e!FGBT?DZJub--uYz`r%GHvYYhibc@YzzYQC5j>c$$5zV#Pt>*{6)>>u}JlMLmk zDt|vO0zBvzv-5U;+%|5pMG6|L2o$$B`jsx<`@4!T7`Ui_XWfk6`-C7V$yUdmkFItL zI#!mgG8LOfWxkA+O&~=332)s+x*#VB8{?=Nvzl|@zQOARG-;fbuzfdd9J3#8cx@BY zaYQo?qp(ttj_06LD-PVD;3l^r4h$1_gtEj?R?`H0pH$+7kk1eCuo}Me;g8rH{K0l| z=fXZJucj-0R&5}R)g5%AvJ6n0yHj~_q;uxsgnpzA>?`<}+cpdnA%G@GXQc-lF{E-5Ae!Au_Mf3E77d zjXmjVlmhMdEX~QH_k%XE+{*hGrneX34*CGjY2=6uAL3;U&J$Se*<*R`@$FmH+~|7e zE(zYO=GmY`4)@l*w#H3>L1zyDEh9mIx=1h!jHJNVn3~`f(NJ%~li*Wyd|nZ>9KVjk z?DB7Bd8et z!P+e%+ae-MwHl_YccHOGTi-4@lOQXlbljbe{0n{_i?1AC+TK%BWd~T;b_EOBF%g*F zXzv_9p5)!SnZis|C~lRvqqldj$$EH2XL&6>Hc>G*u3q;CE&ccUOAa!w$)>agPTg-{ zU2^PWNzRo@%*+oG$AI209l_1|#M=JD@I3+53f32#$S!pWK4I}*UH)I$mG{;UdVbQ# zl{cwozm%49#HtP7E_8pT^t>#*+t3Gn*PHtMq({WA$URrL42$j{Ipqhq{y5eAO!X+; zRrR9#ldQ$qzUY%jWkoTHoroB-TGX@)v1bi&lKa$&oL8x;y`#5~u{&P>M-b=nw6?$; zp2ZH^OxzeZx>Xj&lSlZN={*>tlXr;!BZE#KT=9oO?5y(-rt|e*~$+v|WFtR>PNQ#T^ZZig6d`noCXy6^rG%nRDqNk59d`G9- zTb%W^dP?=&cq?p1yuFhf8@v8hiOJztuTW%5Y)<#y^Qg-^O{CA~70H`}3Mv63YLj}- zD!E*4l9h^8$Rv1k((ECPSkZ&Qq)`4A9ew`iIdxZ!`v#d5ANoN=@hLBWgG=E z>vsp_Y0D=zgi&VAFHEwo*Xx1#MbA2QPO91v6&%Fh0aR76-nfK#=I1ohuf*GsyXEPa zcJJy*C&KpI%bP-WHFET~5r zh9)^CAwP~#$e2PTbcF-t-+*k?tI=fmjB4n`BV5c!iEHbE9e?+geSn_3Hz)U99#K#@ zcrnLB-i>XHM`R(6E@A@t7d!iOd6jOvl&h9CT$d4x4y?pCnzrn{YZ^!x@THO}Xsx`b zw(u)wlYZGZAc3uhcge(DmX(?apsoM&dlp+2nAosZ8j9Pe0hIt(<8k%xJNR2i{H>1a zhbHNOce#cDIppNTB~Vd>qy-T=__w)%f$Yk}#FjAdCr+uLIwj0JY(xC6cgcXaH&Ih2 zD&%nW0$-nd-DHUFd5jmH{9O4 zM_c-2T+M{O?Cin)E0(;Q1z$J9SR65mYnX%>9lpAxm?d9xayi&gxHm{k)JB_rR}&OF zTZd6^$yL5K1H@MpCJq^XboVKzBtGO5v)osR$S&;k(+Xl;Fy{9mXw+EY z^ZaDgwn@=jaVlhhp3XMXub9mJuqNJAZWB%s8fT?M3u=)N{@wHqtc~KAaW~c!_~{yH zw`(oj$Gq%x!}^E+N(;Nn@W=Nb(QHPqV+C2tU?kK?mT}S(&>`uWXLP<$|VW0SV-7pCe?V&hjz>QM*W1$xXm-ib;+orZFnl2ZBd z0v~}vLsqLMx}f%|tqT7ir!O294q$HFA;-JHedS6-ipAP-6JxlJb4K~sSo;Yf?Et}m zHh;y}jt+icv8Eg2RDa-l8g-?Ulvx5&%Fb@N>up*BTwLuD?uF*G5*RJ=qG5yNHg04d zJX(1W7C7`^D0MLYzQL;)+v=&IwFs-C4-vz+GTNVixrj5iD~m|T5#{|=qtjD;>q!5( z2T{A=Mf$C|J58p1gT2*pWfd8hGWVA)SdKV*b^=e5wc3qX;=m8?JI}MU)2)hS za$a&-oNqsV*T9a*3DDD=9gNq=i_~fTju{jF-(7}-xE#TD4{Q@w8Dt6lP#Nz0n32hBX*ru-9$OFFH0s< zFJRE@Po?E!{R_UYZAd8xBxja0InFkLRV=|zh|+TbEx@KsbLb#r}kz;Z+S8G?;-Kw)a_XXz|OIdM`vQQNzwBK+z2r=Fbx zL%w^F$_Jvc+qX11aYJjyJuU6oexRQB=&~}oUwoN)Yd>U_3m5orqu(@VcR!y=8WNj-tmwjRYby#MeD!~bO-Eg*d+UpUZJj|w@vS-upmz~JiM~0C+98H#ztvg zJ%q6Xa+Te>6Cr)!!ISa^FIke9I~Vl6{(Q6(gJOQMzNRSkES(W~8x>723bb3+ zH?Q5Jjr9|g`DqZ5X6YcgI_{L9d$}}b+s9a2+xRsy#qW`+p^+>(PAA{e{vU52KIy2b zu&H%j#XPCdLoVX$9Cz0e;RM=sfj7WsnqTxxS| zRf~>`d*PeV0#yu!7kjzT5h;jm=Vc z**vM>KVw59<>a!PP6A8*rPM26(|T8mm5feZ_BN~qc{Rp$N6rvV;|F%ED~-ch4*K;Q zz$J3X>7?lxxHE%i^>;9Ovq4fC4q&)NL#KO0#*qcK*PD}1i0Detiz_xMQI3}c3y)&^ z5x!^ky@+mmS++n^4KX~1PTH7on+zedIu;Kt-lJ9HpvZhk`r@zGRk#1E9*Dg=uJl&p zMYY)4#^X%|YrfLWXUo~aDS}~P#0$H1>h1XLc4kaekyBH~C9s8ZX@Ow-bmOd=lX3hFgTKDFc-nxujEA5t8 zzEZ*1@9WF&4mK6`L!2l*ZUsu#{{>v5A$+tkqa{RHJ^2h5M$KU3l6itR)-zI z!}k^zva;94k%@xNI`t_G43nQR{P0b9eU-;-oKDxa4p3wny@}-=2&~g6?iWqh)#x#K z=ExwdeOPoz+h_vKmsrWLG9(E`0wg` zxYWcwodXJR+n}h0;!(>gATfJR!-htE8H-?WiOkz0Vh&D{YJ?n2d@|LJVrTzsSax9% zyq%A1B5Sn4w5jTX-lgJxKDjtlEM1)xES3z$z>u~t)jMz~Ok~w+X~kka#gm^c9pgFE z(Iwpz9sD|aEU_$%!YjW_m-0HKMKf;A@irEmy{EJM`f}2eS~Pc?#+!3~@Cp`M@bN+) z?XjKiGp<;9ZTu2vIh}!}V6U9$i+-kbj<*q>Q^US@h##)(%Tz4MM6>s>@zl!|zTktv$uI$?WVEV>{c#Sc+ zE~L)k8Ar%64bbBKxqJ-~pw}tq&ytoveQ_FXsuErD@3a+%GMVz-v?csmfZ<*=bDm(!h+d^bH)FQGkt4VHGD+(rs}+|8 z%Ni_jXq5fg?9In~^FuLjTq%+qAve+zrgUVgvF|#cf|i>c)CTB7$}fU4)EkAR%Af3@ zy-0{{qb7+gP``H$=vB5_5t%1T1a!Uy=Vf27qmT#gX(ZOhL&rLI%H)SSSajb~r!>p* zpjV2s?}>Ej2C?qoWSinQyUb@8aNW)4H|b%~>-63_r@Jw^OAJCWML^DzaYbuIr;SH| z;Zw5BUKJT>bPJ`zp^4|u;@f8BowXzs4fSl+@n0*$+<+m!_w@yg4~lkg)*U}U7HvJO zPLS<@O;43gKadVPY?SXQSQ62sTKr()ZuL8{6ZjJVi#o|L`5A!yc2#xJL@mk53@&8Y z9`0?m8gN%F?peMQ!=e;lbEKn>G)L8flf;;Md@d#IUOkWarbAjve1^W{WSL8DIplNp zB;6-}cr5$h4uKfn%RM%}Qpey%b7&g7p~oiEnnB%b(SKqG-}B$^zI8q4i~QW3zAFDs z>@5Ta?-jD`yY1rJa_&~pwcCEORQ%;P9?>#9Js11L_Q^d__)MvDGr`0G^|`C0ucYtW zTG`r`jQ$#@SA5V_+DC7vKa_I-G-%L^ znEp@eyNHU1S0R1RG9Vq6xri)jz3rBcSVWIw2qbJnmwi!;Fyq~If=e?{It~&5o3~&A zRd#-uw$gquZxO2*sKqXvS3UB=gsIdC@Nk|aUM#v+wR~okRoeNpWOUn8+2pw^CU!ym zy+ul>S_vR6a!%5TKvMAgMX1Xq1SV8qV$2i5PiX47(&qotHa@hz^N&Ev*S_xxf?m2dQXt_gow7%mpz7U(`oP9!pk&vC-}d9d`dX+7I1V7l7^ju7U1ffDCl|2v zLtiWo4JM!}0H+CL_(J$_^^CJtT73r+YYpgUD&*0X?{$slgCmdaQ9qQQ zOuFP<&>lHDgwLTpDY*E9$o$y=o)6iXUw?Kc4&6;izuCEhnShX zMj1@Re%|XWqg(Cbp!0jppe4!m<$F=?#|J*j%-dQ_`hONGRrp0^v|rRz?QrzET9dj8 z3)O!{>btPtU_^MFPuKnT{qrCf{(3Efi0!+xR~V~XSy-4OV2C=(E_}l0@fEq-T{s;ele?`kGj}<5gtjsH@kc@ zr3PHqjYR4H1&6tSV4_Phk{-@C09!v!OW*H2_eK^NTXc~HOYk@Xsp^CzQNteX4l^IlU2K3{CNQT6a-##fF~1SA4rm&mY9?TrmIL8( zk(l#F6t057dC!; zw&u35a(dJdo4wW}Z;HeR^q6bvk0jCF6*MgC&tF1FMqu1^dZ!F!x5?jRgaq>wk(SL? z+-n`D0k=&F-B9JN3E&3ji6$++gn9y@6gT-kI%HiTZW&3EKB+3hT)$W0f4CLV zzhnKeCJ4>prIpBENAGyQP5zUMb%abP%@rr$`Q(eD;Q2>-^^ZPNnlFFj)li*_;MR$TWu8o88>P37m5$mL;k8aHfA*Ph?^L`XyGM6J z3}H=$@vwq1KSB>~Ed7S^ND{1D7c!eBk{oC=y@w=RU(bb9{=I%Hwyx!~Q?_37Dv)FA zM;X7ZR=r%W8PdNoPJre9>Afcji=FAwE<5x2&6Qo3_o3(Z488+j+1891KS>;8iVDOl zAAHH=?rAS|STpSy^K)kMu&sHmKOIcK9mhmQGuyJ2*^BG_Li{CR<}cpz^zoP|fOnua z0tkaQx@mq3N9c8Pau#3lsc2mEFff}Ptm$|;VkUfS8Ns*y@IvCc&wdFzhtXDn-am@n z8ap=}X7@DrMpUCNH{7v1yQZ=!{dq8m`k^erM}A5~V}H&ve9Ghf1@gLJDxtTt-!{D6 zoA+D7^{@$UkqM0K$zLSh{`-w(Wihh$_v7S`K<*is(@0XdmCnsEALkv+s=MtWD~+GS zBv$YkE;m&Iru979#OfM`P&2Qw_|0W)wUAj>p!93R1Wo7q8we`%7)Kz@ycW?drHv<* zy#{;WZY8V9Dr_hlfTir%K&3crlP!v#CcvgCFwJK}T7LuKe8K??Z{LMy0Ep>r=AnmH zFbXzDxo0(#ZI9^1tee4$5vA4|Of!VgZ! zn=ZIXe<;d!;3KAWH$QFmxBrraTyBWmyDA@i8B)9sO1tysXN6yV&jelT zU9fyZd+GP5n|YTViof3lgjZc8)fUJMan?Gcn_hKWc=0nQ*M3X^yf$o<#F%y1Z}vIh8WPm*N*u=R}0LG@*LjiSs$JE-AsI2qz}Kaq3YiFfUt* z?C3b_>l;GS{vA2?kJA^{U0gg-chtR{oj{&uaILW!TS5j8kwDTGWDl3|wr#K7q0HOi zCIv6iiyLu4C@p=8J?K{~XpH$NVDLeDht+S;rWR<5<64#)d9U1~qD(8QRxz z-mHsviBql7@J|kR=RD6f~hd*WbjYK_ASGizvNP2WRrMPHz@rd5w zWy*T=iUa5tS4xVi^tbhmcc~TK8T;e+5m?edN9^lQ?k7Gx!j=O!-G0)jOS%Zk>0E~| zT9QjC&Fc;ALhcEiw`@#|2+!J3e7Gbs0@Rh)K&5mwi ziZ^+Nqr{wZnC2z!bVW{_nb|3O_LsfI3Go@_Vk4xlJoHI{gOZD7scp>Ty~Fy8(>+gK zASnI1=EARG_m9x#woEN{RO*R#VVGf8uqq1EOpo-MA-c?rw;X!(drzxv2OMe4Ca>{ z$K(1rOJv<=EteGV!EHv}$EAtIeTj9(9+cuH#*W2koixx*X(FA7$`8EqPpjT5{T|@k zklmoxW)yPxXRP`@!}okarekM%{;y+H0rZLW0RLxBVZ4C~_*{$pZ{jF-dgi}RCZA2e zhy4O;P3SDi?TnI-PNE-*O@Rz$=H+K6RHEA~j-4=+RZ0%20|pG_ztImDboAxnNOn=&W*zwP_`!RohtB`RDibNv%FTu5 zN_Ih+BSbuLPb=MI!_7gK6{qA=V0q@oM@@U%va`6`&p9kp=!`GBkON&VF_uWPh{!mQ z)!v7BK5nlawr|x>iax6(S9#Bk_t2ovh;F4git`EQZkCo=G%Gb-dK*m`*YyK_kj*8F zq9IxQPfIeh)rT53QkM?%0egnce1W_Z9}%{<1IlS!_J4lZV%!msQX)O>HAA3mN&7?) zppfILRNqy|W7cIgfFj|tDOi8J5NSUTI!$dqzJGgExN#md`^Cjc|DgYGB3}L5Upi8< zY6Yx}f{DTqj;F^?8XXpq78KcQc#P~TSQWoR-R$9R$IE1AUqYcV7Gv~fA#?t_IdW_r z>qC*W8%N;}mT{;P6l$_Uq7GbwoshS}_;5OIpE&z9(BRZkLl4Q2$;z|K6fFt7ok_n| zV1$#N3m;)PiDuVtXW+EtT^dNBzy&+xOMdJN#aG<@jBrP5SSV^P-SDDn+Thaemw zKDxwm?1W6qFude17Bq90e|@3|;GKg$yDy%(VD*MuVW0Ty-=fU5DU~0uSj67TPYTWW zt!@8)@|6FLco6jiPX;-Pwrc;|0t|kv#W7saakFYY|X5{5_(7LSk@%K-Q%)vHb z=pt?0t(U*GZO(a|rJug(&Uy4h*dZsxtb3R4!<%}+!;t7y>k}0Ins)Y1ckart@EN16 z2Y$ohJwF+JE!7UPJ5&ln0mzT2T-!Zx(N7(B zk4;)ZUs}{d4r)4StIowP351>VZe{=RbljouNk#_+Q;WFKvV}yG#0JUwOYX^_Cp(ZL zSJwj68r5wYeO4yjBS-gPMg;zV0v|A$$mYTMtqmsbt>+;6h_$y3lmeh?{!>B>XenEd z$~d8GXZG@Q`%AzMbg-t)18Ze}k=P-rCF4Yu4m!t@1jI*HmcKXRo^GwvREZ-ak8mv? z?yX+0bg%(vE=36HriY_zL&-F=U=>-&&r)*+`TpW#OC8%o7fZn5eMcP!15Mk)dh{JY zS)zak)V1-5;e9fl*f2Y1N46USI@iQV6(HNgvg`CfClk~}fPoGyI!dB($AJ-o3+FHK z`@FZuJlkfn75$RGvo9?5NTF=xU*73=ez*F1ippYYlpZZV(HBd*^~ge}`>B#*#H8X~ z+tGDRhq%aUonL`A^UC!~pYFYSZW}o1DD{l3@I}t=i!`Fmb9T{ftKyB;pT9yXied7b zk$aL1kxMV%a7v^MjTH_hZh72Fcp;rNUra4M0&i~m8Q`bKEqC8rJGHg0Dvh$hw77Ue zdvRRdPptY3Yt^eu7mTk;s^(^KN=E(kLLO|W9bzW7Nn1yRPky+`m~H@CYhFEFHQk!~ z88q`D$i|a=w7E^qDmm1gpOksLo{8KdG82IUH6eeuquppw(+fE7QcgK;2X0ToqF^%P zsp*EecW(qO(dyv23qvhmQM=w1MI+eW!lHMRh*Z*vTDLGttFp}(Y3}ZOWGwMqwCI*!N^0)iz`7w#THNVMigJIFA_ZGQg)C?iqlVy`nLMghtr?D zyVM`{476Po9-r=-NLdGuVYO{EmJTK?{TImoRd!lR&+J)esPDwr{dtIgq38Ma>Q22? z`1?{baj#e|bN{Kbmul>yzkdqeFJR@#Q0?|w4zv55UBYA63*rT#C% z-BqLJ8*uf!7CE-!_{^XCg+BG|76HuVp(D@IqTU+m_UDIE1_pkFnkKM2e&j*5h*-+N^Q8_ICnw+exE5 zYy;n&of%Rdt0lo|oXcJI&nR+dIe9K`G{oIO?2fWvtgjN2`27+~={E|hDO^w|qGEm2-=hTBee9|pn2&8q~*d`7=Isfkf za$K65=Heu%T7@kJ)%>Z>69=-{cM^WZ#i=Ik5&y*Wqre29n;ZL^$t{ z*tGj49PtthX|{L4vlcQ-B;Pe4Xi1E35JT{lZq$4{vD8G(*AHtoTO}zx-XtMgLBQ0w z3UT;k++mhGXYnJrt8Ioq0FGpyG_Q=x%_A3S0?PX*5E5l!c{^EYcyK6hhkQHs?X^0B zZX@`zq;Mo7%j=?ILE1Tnd-tRU@9JC-(5uwE#Lp>mK}YhQg&>P{>@&-Y>&(i^U+iP1 zk@xAnN0ZTa&s(1D`r&-7g}e7&^*K==DW=`HG2;f-)v&{#!gntY-Nv}*4V;mQgf~u= z^Ylqk*X#X!^zrf@CFA)gTn?eOmXTPn_679ur;-#|1bu|ck1%h1$-h;S4LFYHVoUh0 zErZojD>1K_hAecfZKh$%$P+7*AO`p|&EgLhL!kAS0}aNNv}+?TuSRdz82FL0XWM~= zTY!Otf2P3fvgSqVyDMeG=wCB$7O%B*x7~7FT+a=@$3I$=mQ}T>EU?nBm5_v3WqCLE za|_iqUi&D`q&W|H0V_O*#&1Uo_zi@@JEZGd+3fa|RU{VcIV#mpd6%^?!<10?! z^6UiK*g|3Xe^RyYzk1?S1$zAg0)Tdd4Xw&6q(?O)S3`%2hCl~$=x!gZKmla+Sx(rR z#*xguK+4f-Q68Iu*7lPv$TD@1=5Z6cakpdLttvRh;u8@`53-KM8J@gr_dmknnB_D* z%WE^bH42;}kqgD1{vw0Jx$K$~Q=P0eePzGC-E0tN%ZnS^-}V8_(6ERi0+54J(fmLe zPjYE&ZiM@S8JbNu2D~JkJSoD$T)vzgjVW=RQvI_ay#gHJR{wc_3H|!80eEUqKGpEB z9<<#|Atbfm5+l3Bg;bStP$(h01fhEmX3N3pdrD{PAE&7vTXS`wIH~|6Cg$|XR>DOR zy~{x)uCNkJFj_(W{`s5E&e>{HlOs|kQPK$(!3LuJC_=w$Q`g-Vo>@2gm+0wg;_X0` z>&oD(107wSr&+=gpOVAEQe|euza08IaRe8HrE)W=$orLxbL`%9yM9-^yBlzZ}UfrHtfB9U$lR(g!hQV;sx(f2UpHZFjVPt2E$LTs8#0OJ3l>8$^v`2T3Hf?^;c zNJxDIm6DL|6)7b}KpIrKM5J>>KqOZIMH;1Z>1J0%SVFpUfu(ziW!aj$-}|`tADAC@ zXI}4_^E&4|{rg1@{QW&?fKkv8(w*4toF<(JX4Qa^EB$oHNa%YN4AkRZ%K%18CUjN1 zrYM#~B1-;6T{{KuAlAWpP!g0}SHdf;WIDBZcoUV0!v-ys+MM>_wQp*SVVQ}P){n5W zW$1h%B5h63=<>g; zMc}pX>Q}>t#i%|0aSZWBc%;L1O}tScz&Q+n+wBYyas7M@jmO=q|+pc_QtDudLF@y*TYJ??Iu1h!1pjtJPwbYKy>V=X@k2T$q-dJAgv1_ zuU#adToZR2ogy7j#oQS|#Mk64l30r#358BoWQeo3GY0J1nbIN zmiY0u;XmU3#P3Vbhp@s-I@&_~jU_fskEc3*$xUy#vMq@ESRMe>OTb7zkWS(QBf??p zI7qiv(aB9(G;>As$jJ}pp=`pw5mZO@Y8k%|BO7;NWqK8mHU(QVET3=l*iw6K0GCs$q~HPfh?!a z{Ntoabo$VfHTvmyB}OYSh-lQ9Oah+lvi7v$EYXq+nJX9|_6!`!(`tpyQ{s1&Cbl8k z273iH6w=4bf3SIDn{R{=8WDT&IEYdhmb!Y-LcduE(x@DU4Xk;rNBh>F14`ruJ7jYW z`Zvp7)7tklm%UbbKlPtc$G{}%;qB^>QHRfLFx_l#HxR89EV6DPCR5Mis8*c~q#lAn zB#geRP~R=@Id&j%r5==B0AOfOH_X{o&bifDzRGC(SWGhro&%IP-#nTJ)Lm%qcIB&_ z8GG50Fa@MfDucEDFSDB$j{&(*k=1kCH3wu4>kmPB7Sl7HU%D^Z#5*?9zlT_6Jya_# z9-Yd+42zB0LG@vv^9@?l`=`p<=zLJODgKuv#v*$rik2s zxG2@k9_cjt7Vd1)cFOo29`VNwB@=j!Z)At3AYn6^dB_@}X*)0fGnM?_%_Tqg_U&sM z%dTTelg1NA(R2>bg6YgYjb9#&Djd&geuTc37P&!(<}J87m?-^6R!@A%FL(xZlIR>MtQ9^!2Mg)kldP7v zLkLa|ig!Lw6b)x7b0rRiRvWVx$|uQY(TTwilRTwF2QbgE!hpC2#Z)%BFftK|V zvfP6sV@+en;4xmpLggdn0-~Ns3NJ|!{eW$ z@};yd<*AP)7E%PdVgdpj%h6cBM7+{+O3H~eI05cS*wOAlwSV=V!tNNW7Ywid^ZEhy zXEB-}GIIL4ho6fQpc$S&H}x4Kvj$2TW_0EMDSPB_d&d|z{tZkPu{M79WH$0= z`*gw?B=U`1z#Vu^gLy-V_ROKBPEYzkUs)7MmHF`%mj-a8CkbmVzq#snER{Py9!|^H zoThs17#SOX`232i|8?~?qn?tKjthM~|K%~sI*mRYG|crLE2%zzE3~@O`&%Ha-!rN>C`G*(1eyJ*zu@G8^ zD{V&4*gG#jzFeQiV4LhorgycczWvvodPJ``_PxI2E-;&5QBJXV8hv|yHO$`ZJ`u(n z-4PZ$-V*h)e}Bhu8ihwyipliH@g^~Yd3h?cGn7im{!pL90|)#jGOU%bc|g)%aDF0^ zl63-frs8b&9)hWK0JGM z{zJmz^nC)9o-9t@l*30V?rf>A*vil7BqV2SHZh?urBW`*mAh7=vchCm`{~)Y3J!0AiAuSZ>fzBo-6Qo`~m#wXb!gJkCZHq6! z*XawA2Y&qjE&%MfE}t}*UcP?*uU5WcOX*gBWZ*GmiJ?J9uQyIb8nnFXmguaBQ>s&Y z0^>C-IW+m2X|B!fqj(!s3?zj!7IR0uiK|PkAT7{{gms=GdWuN&&ForOVU8F*mD{y@ z(W(1)Pj_H_?N=Vc?;}nTt^I5NG>Hv=g86QxaKG%j`Yu-<#=#?+ zQbQf}VpfY?IIhmVshKHi`%{ub+U?Ld?Q!g{!(dPK*9eZgLZu#G1~&@F8@TpMMFLs!y8?`aD=)ceflDPb0nO=%X0U!0fzy_de7h1ZmJUKmQT>#kEfS z13lDPUY1~FXSmdbcx6C<;0xQYslpA_Z)z@EhTU+PV68Mz_%Je z&T>R`CTRq=wfe03`o4m>&*Y4gFL0uTK#^u?Jm1>i7_vR@L*V(V{I3Izdyp_(lOegt zE-Ugc&IejFGaR1jIf7rMj8Cb$+J)4=C$K(eF1GweAeI zO6I4^{SO(kpor?Ff9TE)dWIcyw9*4OHJztxgtP2j3QNN?*3T8pyF6>8KOlYFjZ*eU zjV(0Ca;1LblFkxI2T>t287HI{JXVW|ig0;5l0)G?Kd3`m*VM3$|C-K<1~AR~%~*m9 zD_JOzuN+%!eQe;ou)1wRKwLAk2PMe1LqHRx>}QLMCODRzwQxd?`(6(+p>XfWWPeWZ zXeNks-zQT)6?68z(P~k5apc&tvPt*oa|fCo__ya_12fY{2EwOlbFd8xuR=1wk=atM zmSYd| zc}`pnbpGqRA$BP!7{v^w@9s_Q{pT`Ci+?@Fte+~}4&)Xii7s-i^V6VoGT!p~D%?;ls z+yJ(4vQKt^>bWpQ(GPq?3ZJxn0eSLwLM3!)`j?OH!4nV-329dRRn$ECvnNNA{PK6I z?|Z7mVw{_-rim}_F3LPa>9febs(%(bA?zPwh?W}pvUoxrUGfU@s2lk{8Ux$?gG*j> zBTSJHMQHF#Sj8R(3di!Z%_nH1b+Lom5wCIV83#5Z&?uLLCTGEO6k=z8e>s}lCXlS` z^VBcITUwDq=gyK=kxtaw$#H68KL+P0jey^Fan;$A>DeGLS*ALxk%OwG{(K5xr z9dz$8T0Ns)N3qUk*4gu91{|h7m4Y|FR=l`#a0l1}eTk14rU*HHq(-LWAxmJ*HB`4* z;2=oFbp!+URKZEOmX));*nZSJiS_N<4T@nise7x?FY{xsP~ zWHYUkOOvu(uU>6Emw}ar*mK;W-M8(Y_rGJvZXFco>!mn^+>;hoBO*@oRthsm&~Txbe_LwbrU8gV;a%aRwcxvT z9LbJiAz%9P+DV?Rn3jEd@DRO_=5#bRemq9eFNYVf1+dSrzJjJm$a-RuVF`B}kYR}BmbDA&T}nh^Eq-n6=8o-v>aR5J|GQ5Wp7T1jg!SMNe~7KI zT(qc(c<_Z1LB7(kn&dY@pZd*8D^9l>ffZ zE7y=4$hJ_xS4Spei~B4oXm&vZtoC#_{0YwoUw#ITb=FVFPJ1BEhYKjuCt}*e4o1YR z5A0hgT2$*X>K$C28%9EOOWI}qJ=slm+!-O}U<{5|FwoDz zO;?>9dya;a6o?CI(EWhKdAvTdGjOpd{S4|n73(+pt%-$6fL)=@>lYwmH)^>rnQTu% zgzqxB>YrxV-F=j`z-Q@g=d1+s<`KncwI4C1f9f@Fb76={sGVQx{KV9a6PM*GOH-_> ztXaLK5{qCATh*rNT}uZVNXtG3sqFPiKIb+PUoFIzoN&Ki5y6=CA zFRYNgcY4^`$Ci|Up-#1V_Q%vD_-ug1ys=JJL1&AKX6!h6mxWfQD*Ue1gZd78h2S{O zw&In%Q*St{X1fhBPq^UIp7wI9O2cK_e|?d(szM)OkkosBSDM?c-s_DMc$g_n^0&jj z+{=x4J(4X}D`Pt2u~unh>+4d`gI0m9?V#u<=#uV$*k1N{B_xUkoX^u^<`Be*ME+2g z``ONT91=3SH+7S9&J&DA3U$t-Q*R-=$Q@$!8nWfSJj=%=Spq2bB{rlb)$5xA$lqMd?Yoy1wkp3?t=0KwIC5BR|gW#Dm4#^{(Wi3&vPE%ugqMgUp%Xqq4+KJQdBc z`wFD)<;!|$@U0mzv1o7hMLlzsvM?rF4greFpa%dBs+rDm}qJ6QKy;9|x-p&x$5pa;UMs`I0@1sTt0 zF$=<9^9_Vhj=F-Q6TBF8Il7(^GNoJ*W(3xfEnbFDH+p{f2HF`adrnqD^dK?N!V0ig zmVm4&(OQ0=9Opqw?Y)}9P(BH{l(Zeg2p6!tJ$(1SgYC3&`wFAwZS&r-*tR~|W15<~c7mu04*coWX5-<2%y4ZdvDbBKD0+){8|9xYw?FJwacad^|y8oDIGuj<~`PxYBf%RXEVuJgf z^LfVbZMWpKZW?6MTn#V}CN)x%rKfDhFa-@61u)W%?1@(kpN7m3ScX;{^eYDqlvFHB zVlZ08@(JBQ+4~O#Ri=2*{tSUk$ZYl^TZ)pWu#yM6Q?ysaSt ztd4_-rAy~tz63G&>Ppo6B94Rhvx}r(n`P!Evv@^*@mI__OE6a|_!0^o|lLvfn7-^0%Qfm%gM?>ynW(VBkHRvFM=mR0c>FQ6$pTxPC_xWOYp z&qW(nV&bGD$zCInfVrFbSL;E&{JR=zS8cPJYyoFUxc(PuFykIJbvuKAQW`-%e)(&L z=idOyvyhuqz-qe9^agnl3k3bP zFf~;mvrw#$ArzM}r?;BUK4ll(U0Crk;2YWC-f4Na95)G}Oo-8#fpsV~<;p8^%Tp91 zH0AiJ#hh*CK|Is~w~o&@vKk9;5KGAHJM2t9f+=)&+EBUTB-E~+G}J~0PKqq6)C^>9 zx}2Y$J+xjecSUC5>D2kg$(?TYmb(Si9@)>Ns>MAW6AK*M$TtZ&g|b%JaZ7IJr$o22 z@~Iq_`y6K|Yyvue46&Z6=uRY4=CNkv6mDFC482%n&F}CZS&LETEsV5@L6BqG` zdDgFnyHcoq;`h>9{Q29`nJ+^*3>VjoX97Iq#lqjJ6=s$p?j{^E8e!Ewnw@YQ#tq&4 zy0TO(QKz^CF4;}J0uHWzl$+Hs{Cp|_&vSBzP!uoLBG+&0Gti=>Zd|}n$zgNH`_-Nm z|7PI0QDxNH$19ARIc+b`t>>A!gwE~~ID<<#Oe>!1b|dPd)xdcvj8ffoDp#?ABKLgoBAPK4aJ z2-*?)XWHqI9EjzSB6dI|@x>+E>=73<&U8VJY?*t4vDFvZct1N2(jIv!EMjly#D0sd z$vw~8s_OO>o$(g49vCbZxX zA$uq0wLwa^(*t%|CUf_N4+hBYYn?=$G}pF#)2vT8j#=yrqK2XITLKRUBVm1(=Z@8H zw|zV`!_S-e6GaUdD&~LzMSqD}RS8C2Ii-`>{%hQE(w@u7zTny1qRJQ)ymKPmlxhv4 z{7Cf+0PZi(R&PEgg9iO0Gi!sj3|yiIV8Lgti{?h_lZX5To-E+r*u7t!`Y#}$ux*34 zjXlKu%Veo)wb&e6-`Fvf?X$XpqPUuwQ?%gaR6cjcFg_08A$?2_Czd2y+Lnxg7T&Xb zfko2U0vF(ic)L~b^9ZBZHho_D>%Q5riK48A4!Uo;vjp3aDty>eGtDqITsIoEQ;+#_ z$@7}v%-i&soE?B6LTo>YYSWQCMIRw`Gb;Z-L7?Qnji)iLr(C5zRry9Gf5Y-?9Ntw8 zEwOy>Il62<+$A7blwedaMG|1_B6Sz>sIs0PP1;1oCpDN6CM z@;eavDl?-JL2lW{b1W8Ot4W)TuwTl4>$%=tC^iTS9d4TZn~L673(6f;YXDWj2b_J( zuDgRo)qxnrSL99Ap)H}*2L#{{OvB?)2U~;;7Sawy zaZB1}YU2H2V;Hux?|29qb(7e{8FF9v1BiJV*o7^=aFHoyP@SgBi)cA`Lgc$sWJu(J zlA-UPC|n~^_@^kFDhMXCiT}IfAcQ&uLMB~kLiYT{7o8&c@^U~XvJH@O`s2<3B&8ZC zI^>xe%U2z7iSk(wmvlIt+=T=jmf!x;@_%zD1}A03*eE%t8IS^sEbEf&)2^YsxqN6E zH?%wiU+&^4+@2M3=-!D}n4-0Q@%hEZ51pJd6OSsDM5pD}<96ocb}D#1$?LSE>{S}H|(r%dh`bd~=4 z-u}^!331QKHeqE*6fGVL34Sj`J$+7%%MD_;cfO*=mr_nO?>AB4rD|HFWU$`lY5T_5ZD9+`bjzYJ4n^Dtq&a z$xYN$Udv?KUr**&x3t1j?08*yHJ-KJ0qmN$>PsGfO#esq%#IfGdm}SI!`b}R=fxKy zk7 zWY1}~gZ#T7XsdhVsU`(+^%8m@liT6$P zXKkAtz-4&@Bh3BkFrVr+ZL?QgjK1#ILE7a;)d`>JY49D=1`b)Z#-HzN*a`*bz$I7L z&kzO&KQi6m&%iR+{XXBn{VAl)s;fEJy;CrziyyxtfByUv|ER+s=eAZ+eJ=pbb%tQu z3moHh7zg!AS-8dYCp5T$E9$O7{xzV13^^hCD!g(=k#|02QD);41CgG3`OC@3WCyTshF>;?fctNWF0WpF9Ni}8w39u#0k5}~ zKqSYh3I3OKtEmqi;1Y3EFQ4RiEZmV5-pEW(g8CLseYzA z$d9?F;%W7CXe|Zq-+Q+Rab!oA`5V zD(I0@@*lLaH@*_Ie*HQZ`uxTX$g}RAFuAA47&{H3q6N$c-Fw6+d!13Irpg6$3Qun% ze^hW2dWZqOeRZoC+#K|I5M-vpY6EAq_q%Gcw-i72s8~p2BdH%Q=foUKfBF@b-uXqs z_pPj(2)^p8v-`*=Zf5HWE6t{%YxhKI+As0)vLiUnTk?Ni%%3}vOMUz9s^vuUjdZMB z%$&SB7j7Wj2-o7>qq&HyI;s&JY+|$Km8Ev(4e9kg`|eeEHN*b%rTNj&J3N$ZsPgLB zm(oVC-}0C!R#~OPkOOpS_SfBVky3f@j?k~nZpc}8A!s;n>k)0S{iL8X+;a+r=Bz_b zc7Ygv=DTskc$J{Zzii?3x`5Ds<+g>V{0odxPI|Zz`C!h;KHo{_X*UW3f&X-nfm6=B zkKqe-5#^PwYg3B{MWwjJLi3oS3QC-4e?KCqk-GSkZ4~**EuNM^^@=Ka6%68(%$grf zL!v+eF+&05YTuItG|%OCs>d$|DPY}hzr(;zTv^z6xhIR!+-e#xjzRrXuy++)Hz$TF zbfau)Aef>LKBnV1BcES<$v<;gCMdI1h+NhkFG6N-?Wxtpx#>DArbgajl^TEo7oKZ< zeEAzNG)R1Vzj_ao!7TIR+&_>=a;kBz{LUS`>*V;u3A_;`Jq|A~YMdelZ_ z{{k(65s$PJxz-yC2QwhfLnJwVZwMcUq5;uV2au}|kU2s>#9Rlb-7rY9vn(1Ag^SLA zzXLE4Ac3at+(3;ErTIudk6QKC#LlUf&Fm4`)Y|9L8D!r=!MmL-vDQOxc?^N5oKO_= zz3f1&IgG=zX^FT$+P^seKa%Kzxzk4QD-p|MK0X0-m8$3l02j~X&^EPI22IucU5Q-E z@9Tn(SPgt3ASE8>bb9;0zsDM^*3;I$6P7KqJ1)ZR>@Va8Ya<-}_1Iv+mr_E@k3E={ zcJoO+KQciLl}8}6;tt^Zd@}W-HFIbO))M;EPsc4goM&Jn7dNED4}Vj-hN?+BoAo`` zw*f75La0^v!<{_u{WT{*pFftVSHWw3w3PQDn~Rw;sS3Dbz85;G z%{)gNMO+bBm(gf?8j`BR&i(WKFKhElvrv;5{EykshHNX&&%JJFMFw3lmE7}7b-8)v zvRt7sdmYPsv4zwHH8INvhZ>&Ev(5oO1=F~FmiTm)t`=;r8WwQYjY!*gSlmwA>Oul* zBmR6U_mWJ)@7^j1sIe9}8Gg%wZsnDU6R={t^uQ`fX*84%KC9svGUFbc+X&q}d!+$& zzT#WU95~umn&~Z!Ggefkx|aa#p~3A5?4P% zvbNOfzpU-%k7te`21W9i0?3gD%(eJ((259FsN9lzGy4rnoIgeqG>s6J5XNW z0)vp6^QFxondUUP7%@3FUKYWf6!DITyKgc_2P_f znAPRDleL^??B?Wq632wd*c6gF>m!+1gbY|#(1oz8D$b>2RT3fVl_#d;PgW~L8+e39 zN554d2P+`elHr_WVc4c(WJ6N9bJfc()CSj)Yi^q&iDLEkCBJ!3C?22-sN13BhKF4* zan!?J3N9T^5D}Yv(|W`cc14?zEseS5bEIhe%|*o~l<%tnP5vZ8P6$!&OTKiq{T;g3 z-rbpwG426OUctg-*OtU1VLVEvuhaxBW|JvNZae++)hjrX<{InRFcea1efZSRl12R+ z<4>8LPY>A@76I54kCGr*K4lxlfcf>GSG>4N>I}#~f3+%pw;ci6li{QsuppR%b}k_9 z{)L6u_)dIVu!J?Yw665^w~`36Fzeu|7(p~NsfG>sv$rt`CL0i~c=jmb>R67-B$?tA*MQYhr(I0M*Cj93F4^vFX0dcYw~hfThm@a5V=k7N=APL?8_ z5ba`)3aI7C+A5MS7nh!r9uofnBTwI`i-kb0lqTOU4baci*qtVt9*a!Xy}Hf$)UbH@ z>~;z2vn^Tc3VP^dT)MTt(p7M|^r5!y1FVG>4sZG-h&U`QEwjS+m6St$6;Y@9q3;g3 z>9G4CTJpoN&`emVG56P8CP5QUm(=nS@>%hbT@j(^QwK6?CpN9{O?-f`{ZSNSvt}vgn!YFbVD8Z5x?;;c`YUvDogBLF zno_m+zK!#J4e~L~#{cQJ`&WA?Qsr!Tcj1k`y-??ZgO4gV{2HCZ+G`p~_CV^8Rr_O4 zl7NhY#5aa5`1&V|?>FekpX3i^&d^(hGW7Xdpd--Pn8{8P zAX)u1(_YT6=rB!OXPcV5BYAip|By6ySiM~6KR+FMpokiSp$6cGlqs9qs>KsJevp(4 zO}_0GwGN&j9Ois{888oO?viCz&M^Fc)(EywWKY1D4%vsHzjLd3svsIGD6E=#chPHN za}lRllV-?%KTG*Q*tcc0!4YwUI@g$@IRQ22h|F3y%9h0c-L2n#UAyNr>37N3?CGz) znVq2ac{9u9V(xn!bKc9qFfJF~wt}j?Nkzr`VgNCS^%W8cA7XX$yuY_$H@5lMf)N12 z4xavL{e$rejYh#11KQisfq9LmzJMz3`mdlD#$H429sjd0L5VYT_-K`H8oC8|9-h(m zUl^4rO{=#GTz@x$j>m~Nf)A31`G!3eR1Zoi$-Ff1(e*Ba5aJmQ+i++ev}*5vQ(?m+bo zENmu}>`87=4B4#ebXr{AD$3ak2n7lL{vohY3Nm$Kp%}`AIIS?9iI$F4qBig$Vyczk zFVU|<4;Jr|USK7*dijCH|HYQ}!a#bJ2OO1?&(pZUu!fh%5Gto_ypeZL`3{6$k+ZrN z*Z-!YhqKGp8jQBSl(Kb(_;q}$#lqg76NQ>fV0cjh{=1ajJrb9?`W!jM@;YPe3PB6U zYrc-B@p{Rr{H*&-@YtX<9?Bi?>J3pk$l!<%jMG1}_i=x}{P&ZPj_Avi0vCcqTdUV4 ziW3)3cBtmR26@Z)vD9i#ad?1t_Oqvr)XWDl*Qu=!;`+BT36N&8Cnl9YBmIKm6E@MP zi0wz2gG;=N99L&agP9XP!BmEgg2Gxdftebf+H2-U*FL@)W`Eo8(UB2Nt2a6R&!dBRyjgWyq!-%!cdpwq>jAUI)?TE6m zhR4XyhEcX0&C1T|9d@2kq^4bzj|ks;wTy-z=sX(3zC>pE zPPDBOu9vBOtCRU0yW+J6q)=BILq7(OgGIr_Jvb>+YXFkyq>)ID;p#5fxNquEd9N~A zy#pb9%Y`tA-y zddwNY_%NfII}|#pvf>oEVs@FNd%kd-K#DK=CW8TA?gi-k*@Jm1?`=y_kr_7JzDxMfCrTgV4wVjPvfCs^A6_=1R&BjE*BI1VA(KC&AA zNa3(-nnIxL49lY6$Xm92LjA{D-;SOYWqbd@qS`K!s7OMm6elk1AZ&J4tNvUl5dpT& zwSYJ$U=*{;5@W!+mOzm4ccSY($;~5={i$}mJ8;}dw)D*g-jl+051Q3P6XlPg*Vt8u zZ&0!Sd$%NL*&ih;uMMxC4j?W20(W?3KaZJDLDF}(`?#)Bx%-njc40g8%-j{gO&%ya zv(>1Sii{4}dunQ5sOCs~9btT}(z9*mg9X4k4H*I_)wazP=kG6=Oa9j2+}me0IoW|s z{pcFrN9e*J44>;alft8*E-eyS3oytQt3b-&t7VBSy3tEWT-0;g!t@WrJn=7$+a4bo z>--ShSko1-4&QW6P0;PombvLVYN=HC=t}_$d^XavnISio%t>8(;%MQ!&y-H(t}B`@ z%yjzK(}sOpUsj~1`q7U<0kp*ewMyO7F2})?alQ`dL%Uf~qx3{h^4c%`bQO6jg3 zyMGRnX>L%W&Sjdo3_Rj>1idUSC?T1Ex-Ip_q*F^-J0V);+f4iO=&HrAzUqfXU%|U9 zf;C~~Lk42nQ`Y`^{*Mu}$8s563k63Mv5#Bsnpe`PjNJ+G zp~>kTeNmP*_5wFOSVjcUh*s{w<}F6jom-y4g*@rt{R^RTiTIo}CDw24Lf_bDAW@#S ziNhOb5bOcB$|w7OLecUSyMxcK6^&lYoM(UV%sQwqFl6!!A<;DS@-`INa!KSkR;a{( z4zmR&cm2PIh63wm$ze`rI;IcT%Y6Ux{j}?U;w)^kBZxN(b)_Tn$39&R+WmhaY=`Eq zk>fbY=|bEg_v~txM@wgF_hrs_Ci7mk&-kJtT z|I)=0+fQU3a4&fwmAr-BFR|Uub94VMMk_I1elR5kMM?EsZodeM*`8aRv4SZ6R*Hj7 z(GotwT%i!E(d)KgdLMRwU1ss>5)@p<%Q81l-Z$XW!e>2;lq_(}6Ipx(af>VBRR3aC ze6AJv?DS}?5(t{@`-hX@lY~Bk12X;m zuetrd$5#?@JSweh587k>e}c<0aJru5>FMe@iO0pp9!zHt=UXMHIx!ZbxJjXEa_f`H zQxbQ%ile>$WX>}}^eJRdukn!z{SEVr;tXyM5p3vkYm>)9m$czjg|sK{&NY9enLPUX zWtKYjx0Jjki-bk({g^a~Qw3=wKHi%7kvirCF15v)*W5*iW-kMO+bbOEuoPBah7eaw zX1L0BKZy1HilCY0=F!`trasLLuEFjl};YJGc8tJCYwA=ekzKcXtxRRRm|I&X&Zh^z8m z_6TS};>Ou*3y$)>rjy$5B;%y!V0|eWvZW&dJ4)S7qiaJ$3>BXtd;e>%$PMnd6rKBQ zD{YmceA@41e2bxlmOsW7Yb0V91RBI~?B;ZzMVNizvvfHoA56&o#MyyUups@Fv67mL zr2dq}2X8)EoVA8%&hv|B?nE%OdEZ|%k?g>mm4-Ya!5!K7Bu0U5! z(3@_en!Ao-SDlj%v#;m<9`?(B!{{=lg>s|1FrF{@epFQRIY@yGIM(zoONEbL)jDSW z=~d=m+Wn(d5o#II*E2LdPHYt-kK}n&Ctni2r*b6QAGW(t%C%VFIRegAcUmv&Q#KJr zK6)sT^>Hw{UEWk_I~^FJsd_%rCXSx4fn7Vh_G*c`tD;gRWv>2uXM3 zj5uEL96RTawI|<2Db!UtE}xMgygZeN@!9T=X&O>rDNn?J4XBBR?TWt`yV#m}JqN!I z)X#uj8_z5~p36Ww6`IKwKVaqz9lfEe#$ z+#VHa`qY!Z@GLim&@z-C#iG^)-#Bk8^Z@UQIRC&E&tm>9i_i zg=V0+*Qi_!#rl3Th2B6pc%`=YNTvj8;d&&s2LtIWrCB^RWU3K|U36hrDt_Ewis3)f zfjrIDC+eQwHih30`*IZ_m|%p1KJD+1baI$yY0XQ$n)2k~^)cBHS0-Ti-_uV?@Tll^ zW;xGmwjYj(0EKxy`21CIkS+vqv+ZW)XGkH59dn>^J6i9oLt&^By6Hf$9lw=^gLvTr z1;Ur6fSD*|kB+#T#h;4GbIba!nF!OJJ1T)ogSz;4v9J*2YF6Og0Awwg7c51?bBxF2 zXzqBT4aUfj1vH`&F);S`Gr9XX2W=LPUha_d+O6}}jsYW^DHx_N_xcy^k?(s2k@G&@ zr4sT;w0Cs}0fu64sUn1^h5OT!fj z{>BEaUk@zs-ySEbO@H|fpwnzn^QUL%oL|i zs`G%=EguQ^Y&XHv7Pxd-WkUuup1LhN`kyPvaK%>l_fJLQ&!URk+8_11{dEFz&9Qj@ zAX1!^IA8zoPpcQ!nN{w*fTddKF0KRajim7-`m(IAN;My0SI8PvKPf>sz6gtSIqYRu z0d@d=Dkf8W6I8nj>t`{hz`J3cxbo-{EdMDn_YRFRj(deIhaS(!YJdaLAs1;*~GoziTKlf>e3+_#N z3{U8Qdy+UZu-dOE_^j?iR`2$6`bKKG%!73)9=KGoeZ>&m z(@jTCSkn{P^rlqRTf$>^sCXUjD#mf!m)bO#-B@<7%K6R+zoy6eRT7F#$ft_JDpA8n=;s%0y!`?`!sa{k{ z2Zz6Yc_3eB8PfVBigsLuEXipMLvs9UHYZw2{E-~Q`+iV0MaMs^YWqdae*d>7ZX?tC z?Y5~Bx5_WEpaov?a%UXko?o^Q@x9H!)w}G=Ie7;s)7lEZ>WB6ZS8LM2MyKe9Bg75q z*3%3^qTHAJ0tG>5wx@z?(>d%yq*As`(tq%z@TW=V^2YM-ty}q5=r1>J18mjaYdEOs zE{Z$nUjVWB?&4d!>#SIE(Q{ni-;RMTA!KK!M!@w7Fy`q@J~-)V7Lz49cjSneuW115 z_CZ#gfVBVQ-p0s^;v_HzVMk*NYV>3?x%jq;6=*1_h&<)g;<@F>gkthl8jBO#49;N_ zfRml=G(UUn^IOWiqbMJgL4HE;9D=wWoU?s#R&fF6&uLQZtiVK^_V-2!9V_7D}1L}rM1gFXi$4~8!4pQAG0EZd!29@#0NwXi&s67o!zPhS3}P)yqu7!Rdr z=tqb+V~?y%iFHw0S5qSI>@L@b%K9r!c*fKb-%_ny)gjSbA!LQ_pz)SY2Nq z)5`HHj^mx(wt9h9-*fe}KSNHJ`nUERqc#)7#AU7$N4a#r=RZ6;idH{#F?ilYEApkz z>tAmmK+9iWx1?L}N7mZ@GDL*1J+n21W;iw%$nSnE*ur|T%@J)`6L`l~iK^W#NI8S# zT1`^FsGx0`Eb~N%_8xQS9Gk60L2dkNP?6P|pNRU~_h}K#?L!zqI<-32i-ch| zhdvyZG72g5pkaLqfmuHyfc<96;F_2WDQ?j6H>9pBLr=>m!Y!M$@fLGU1SK{13v9%P znofT`hhc4*a6WcB9$9OvDL>+w4e98Qv`gMMhi-$j@MNCuO72j#i*Y zJeUXL8r52d&xY>T0&~hmP;}PkzZ?V(l0mdOLX~D>;1K+DYCxMU^3Q;~P=;Xa(7S~M z_8`~^GT#&;ioSxM(}7n=gLO9X!6k3bWhz-W(rfUbj&$x6K^nd7+YXL24}8OZxSj8H z1+MgM2Us^|%vFpWZU`}HHoM7ziI897%OxK4eb!(;rG&)8A%WoisnMQCI^%*N^K&Wg zgqCSB5yNrnrMRlYXx}%#{Zs#%&m(TsnwU=d&;2&+6Z80H@GwQYFEU+5ys8Fzt$t@g zXgMt8Mxg6)ma_9DSJxV9+s>j}S##f!4tB}X$4bJr)THBqus(*T4=MH`bH{7uP-#@w7{Bol_DYoU- zE`9BswWbR^w&vQz3l^?Dz6%AZaKSWoBxU|pE8^2t{8Wj;Ge{ju)$Oz()Z=4Lm}Md8 zPnFYj_mTy%p!~XgHBpRex@SBgP&&|oV+Oj|^PIRv>+vFJI$Owme z4j}kbV#4y`y`Ge`Z7~Q?~VRQ8SvKTkxJD-~J_(yqCL410N zh}R@l`d*D(8>SubLeoX?&kfWoxCuRMvsI*f2XF8fN4jg?gX(m=QzJj zUJbgrB+8LNv+#HRGymu@XABi8K{q1r%^MP{G$xw0o9xf_M-4f3t@pWN_f>iatOe0r zR1#7nzQrpx;XVgraoIYu!GI$g;?^NfCJNGGgNH% zNV{?Xyze}&cwlJ@Md2f-2#pNxl4mpE-^4pOD)@$8{WFaK`Ts-Hd4)C6ec@h(Pf$w4 z0#bt%Q9(hf)Sw`!bQ?{Gfb`xwqaaO6L+k=ewD@ z?BT85^l55a;gLghLc3)=w+hdlSxNf=HwsKG$iWHuR+)GKgD?(u(09s8qQ zi3g#18f6DX#O@>}c>Plhu)*a!74YnD5l~OYS=FbXB2aD-m{Yey zJ8H7q4XAnN?-kI1;rm>A?MJp(^?)l@CO56?NxU{UaXu=MUvebvQoVoZRXwUINa{Ja#z zroE~Y4OQ=R0~#wFAZQtN>hnTx&H6D3KA!-aIm>v=WZX^>8GTJ^@ExA+n!;Vl{P zJ-w$NR49*H%k*2mXVe{KP)@}J(3I0B0D~L0fZpw!pw^*#Ji^*UQrXKDVZ@2_X!F!i z8asq9CCQishImUhA9x+r)BWz0UH{z!2fD8I&iHKbUg#_`bd?a4N1IwI>XF#k-IeEb zVoks0Ij`_nE}yOxkJurm6Hv=M;q^bpKbS5VP}`~YqI{_b+z3$f%9g%z(Y-TznRQ{% z-EZn?%}`l22^RER?PQST7c!&mSvWt{p13x(r$v|)VwZ#LRT8Oiv5#Mt4<)Ui}f4>h+z!QGcYF7UtmlA5*>=>8OYdx14Ez!8_2>z6qjs-8C=2 z416K}+k>GKx%%yJ;noWymhZ;nU-&-kSH;c$avP|+=fq`tt(7rJ38te^0}{F`|JYOp zQ$5ms7}Wm0_tyXwRr-rKZcrHmbD6uaqCBuE??I(5ect1g(Pb*RLS}WS-*@U z`$okv>v$tIYfnSo5X?z&T2d7E_~Wx8rROhQB$f8_76d`QSJeJ=3SE&oFD*vJ=!M{3 z-~D-@4^LrpYFy7{vA=fvsb}RGHckq5u@79PkY*U+Uw7y@NXtCAF+SK;M>1ajQg($c`tpR5GFn9!Aj;FR*ufS&}5{+WlC@Ts^az zp5d!m^deLI8A25j`6vfyh$Zo@4FL1WFaPrOk{B=@Fv8#|YTqp&PED!lSbM`V1TU(( zLe4mmLYJT%nywm1n5$-c517`l-O1XmBv|;9FQvIpB~BbvIlaAqm9S?A4qj+AuUy*p zW}p7AavYv1OidYwE>STP^!v;ba$pzl*`&m19Q3Cezh?5~%p+Q1UpJnM{nKdKpJV%t zm)vf@P=<1XPMx4aGCQFQAw7&D@F3_^Zs;w=6NO-!y~S6@PVQ1@nVmf}K<-)=!QZGS zD7PH;@Ae^&Hxt3%|9-5JH(lJQwuz>)Q1E~e_O@-nwE9VDnKih9Ts!Fq)To-L$bPt| ze(g3L<-RZMydwp*j;(*x^Zp_6UgK{EXy3hxzE?`bklP5QUlcIl!M59f6q014s^F{4 z0Gw;Jn2t&e|L7fcB5$p$(m&gM%t~Q8@ztfLd-jc_kJfhClahH8l+6>g^&K z+x8>=xaL2j@-lE`M&HiI#602uB>Ur@{hF0wU_0H40idH+eBCLRE*n3Zq|nt6S3i&8 z&_ikEZgTv0JUo8V{%KDA;74t8g+C`ke%p5f<|XO{X@)4nO-&!W0*%HED~$jF}n;e;djK@!u8$!ovV=)H7*yWc!;8hGJ>PE80y zdvi8ed-~cJuJ0cZ094zBq(F?_aI1QqjW-ndHn>WF8iVoQj2kf!Wu`%Sk6LT-_tk6u zMU-ho+K0oAKZrsrRMx`wbN(o@{UmT##q$27m(-S&;|i?xBiWte{^}Xzosj|kA{;YZ z4P<}BhI}M+%eALOngYW);swyB-WvW+6+maW{sGF&iWOAmBa)hjI*8FYdnAyEPkOtU zrHQ4wTRuB7`Ax^p2t%3uX9E;p3t+T4NkSgnANLV*BZnF>JgO}Y3)yc_kKNA3?G&hN zBkW1os$^1N%!BwH2GnigIyT1t;!kHk`9A6L?ON}(9hjb0o@~yC4?WWszgxnc2p-Q{ zo3b<(o^UI6Nxr%u7lLtiHeIYJ{xJ3SlA7f^(g$k+|CG_e2RbZ^DVbdc&!$6ItE0s$ zoMv9SDWu%~ZQiZvNOE){4UOm7{qWj<{rQbM#cSv`$#41x>C0to>S^Sn*7;}G08_+z zVa4Jt*^nX^>f_JPS$ZNQEJHeBn!`hM(=;sdVDP%Q}&Xmn6tKmBa8=ylj=n3Ze5pMVT@OwGE zSG2)SplE`i8-ZbouA#||w&i8b?Bf9;OuML!y@ zW1BvIx_+8zi#&HlLE-MLF10Cj?=A6DACztXy|~ARaftZPRGSp1z*=xc`rbtcoqSNKd@I1@ZxkDvGimt! ztIxgC*|1P_>N?=CffQe`VXU=`SJ0E=g3ppRh5|R#8>dE(P}i31Y=7U%E{UW@W!F2i z1gU5&sZesRk3JOkz zQLku1=DUD%4#VevkErf!n0}@R+Na?~gxVejdrr6@F1Cg`6R_gzchkN(e-W``H#JPU zF!^u;l2?U+h;kYx4W}A?&9CWLvDmH?eXKaP>u#^tSO@ig^>D$nqmS z|NeWiCHYRj8{)-=^rr5RR-WY1r*;`Y7YznVhP5#G-C@3c4-%WAV$!;x)I~V9mdirw z5EK1Gshfi6@*vVH|H{>|x~S*;4~CbJ+@-E+(pTw3C?=H5e*W(Z^el+;fLJpfs%g;C zUN{H&9Jv+Pbjx}i-Pzz$B|U&-!~^ob;|HlZ&iB@35?;+Y5MZNM2g8CUfidfc0*8}+0L1DY&Gfw!5ECd=ArOhwXv?Qf}Z4*r5UPyN>tnzX+>&%^O6VV(anuF3e_)5@zjX>1IqgB%%OLB0v2@z+w&y!Fp(KO14KD1u! zxP>0imGSIK`Jp*Pk?>*;QxJYH;%9%d{NKZnueGvo3|3e}Ui|mEbAuT*%jH$?`5ThK zb0oSpm{h2Ly}1BVSB4_GI{q^>@Sno zL4`$bQ=^bI8ZF{u2XUz>Fo@xvdF*+)g}${GLEn@zb++It`r+vRT|;H*TJcq(lTouj zrXEwTAeP+eD(kJ9C14GA0V;ufKd%G6niLbhur}nOa9~AlL1~Zi)GfK}8@iSy_a`ni z2K|7n(tjCu{vjFDt}jBX>i-rd9uu&IF9AD#>z=4ITDRQ+VmwMqz-h_k*$828UT6KC z_CBBZv(@rVORau{P|RM*qg7;du-vZ(4!}Jg%5)C|y8VSpQZ4t~8h83;#U(KkjV?ah z-G2&6$_Kv}cExJ}-zsAhwlkX%_A9+tgWA+(Rxz-DUWC+bQo&5iXmdRO`G3}qUQiN< z@F95|4bIePDD)qbW_aoPx>7`DC$@t+Xwn6-f8B@9)hE-CU|xsif&+05(IX4=eUNPdW2^JeojF?u^S!F%V(T51Kr zi|NsEN9rI^(#-tA&5Y^}CtLD_NlpwAr{6ga)<5$Y)@^pYBV4BM$7;M_ z?Y95^LdNk_zbHNlTWO}L#NxXnp`ax{MT+WbNVc!;Sc)^+h+pc{$_R**RIE+mlO)}A zSG*B39U@FABxXNCCtZJM(<-)=c}d{)Dyy2rH;Pcmow8oZCA+As?q!SO^-QlE**)Evx-))fUo`Y^IeqM!cOr8+> z>$jeTFLin*!9(9u#xV#SKO|NNnK$h|htRqt_C_`En(e=@kfMGUT03{ieTkY$zHrRk z0fkjuJbs5@7-Em@)>s))uV!kew+SkVnrrUhxcdWl)N|*iKMQoD=#Cm~W6%$#N?i(i zRI@6x%E-9>YtRrltVHjHk^6>6H2Rp)xr#apneuU%$^oS^TV*xE#^6RCC(5Uke}oGi z{5j^-Wa}}ZuEl+`6gu{v9hs?G+O8Z({Z#{91F}U3kR4di9{U9kj##?jUt%`PjJMs7 z|Mn)*%z*0+>~RNPnO<_Bs|Z_ssO2ZkhdcdYwIDqJj*JmC_Fdurt!wL)DxH#X*XGgd zPi)qwX9Aq04DV0v?qYs6B4~8J*Y9ULyFY6BUVh2>busV6o3egE5m_q{+1FqBWDkyi zRvWM$b%uK1AgnYd1q$nDRUTOeD=F)DG%`rIjfM>MlJ7v##5Hm=SU104y3!Y^1ohI! zzg(Ij`(Sts~!ErR;88RJR_cR zcn6;ikG96$$MBhV*MWIA&ML%Yk76GCyh3>4O>qhq06DSvdrC(0Du{es;!z26@~zU> z&xE*5BT%>=X7(VvX2<0=cd*K&?^o&x@7HOSoRIu!0aAOwdPZ2ssHX%sp{-&~Wpoqn`=_^FiHN%Gei$-GBAF|46 zJx2a|a6%?$cP5u+r|#Ozipa3gkQv3cTFAGh3+j*gZ)>=E3YL#|bdXUCDoXGh(%Y$> z;=c68(FOQ4F^!prey7+$IU3QaVIOyGX}UxqwX;{%UW+#2uuI#+ls2yEi3xu0<|?&uc%h$RnOl2l_i@4f2fF)8 zB)O|KBlh}(4!3&`pHZI_rFl>7J`ZFMDi% zyk;Ub3J{AT8CEFny1{QRFq5|Fgwf^uFe&kdlKbq3CQ}^8Og=gwE z{gH*ji}9^di1sr0f*W`4SJ@=$j{}zrT@xTHDS9rAbJ*jH4fx|eMY{$gFx~74lIBgc ze?q$U%@uo$SS{T)KJV%S)f&-eo`YynC~b1gYWWQ(e3RwU)vZCL5vyj>5mAgKv6nbl zP0y?WjVB8od%Q2nm^}M2Dz`p0UJQ&){2Y!W4yye0UVJ8G79P_ab#E?%2xGqXp`?0z z6f56y7c4DDzBf06X2ja3*=Ah;vd~1FL%eI;;owr-xslF4$4k%P!*QS=v~|IM6`YWW zMK1kU5@I&$j0=XABuT|0Ax^M!YFyqN#TLM(RkBupq{s(BmZH<~K9XNk67JM_bO}f%*xkbKRO7p2RClR>M3F*(V3o=t%XAA`DyuI7zY+o zjQIf|DCJTH;LO`gg#>vT8Lzrd-jfqb+5r-@S`s-YwkKk#!?|-5pfyZjKTFB?MjO|m zm;rv?HXeQGJkR^=s!7s5hCJrScSlR`ws{mvkpzv;%uR+;X0UASZD8mBAQA`PN_`L@ z9^nrM*P|Pjx>2X$T;c9ls;n5FPWN)pk6gN>m~=GC&A#J#8Omf$$Wl?0d@)k38dgO1{-y>5VTv%1UBBPkiPMl$BgD3{IE?_Gqsq@{KP>LOH^X zHh_woR4p9s|!w`#t*m$T>?TNWxU$D!T@)P=?5HMoYB) zdYAsk0fhgx7@w!vPq?^_aG4kN7j#Z#_vCU|$R^`1x?KC3`lRWVqDnvYuQmC1kO zW@}sIka5GIQ-^}k22kXNuKfpmU*3BCHUcR=4-a5fq z-S8{xC$)%-_2S5Qe)|Qd3*zMhLJY2#L|Eu4ySsH3Ct+k^3O5RIG#pB5x)o@4=f}@$rNN-d0Xv%HQ1Rr z{TM#vw6+EB*qx&lyzQN+hqOJeH*-UMJQTiEFVi~Tf~`9bexh263Mtrk!T4zloY#!- z?bd?!4{86Phf#aL>lA};1RRy=3Qpl$?r;_a^AO&a#Gdt0%(*NQf%L36`S_MWoph9w z3!iyzy@tJ-g8LJ}k0A32J>PEEMgE1%Y4;tL(-WQZar&rJylTuUiU}7*(q+PZS3x<_ zzniQXT3qtrfy~ahKV1P^e|_zFcc`#kPX8^9+4}wD1KXNebkE3Tex_8{!S~3bVPN26gjN z4Ng-eF;r=FyV^B$uw}1{sG+eWD_7Kflvr`VJ^uY?E-9aF4I1&%o##VdFEs5oI5+xZ zDEyT{RRdyZ>a!#CK~h3#*vi)IMza0C1Q*Iz9HnhzSY?sN>+DkI?qB(Wh?afG9gPMr z&9Uaqt{A^)n1@`K(LSfMzMDpl`%&@Qo!)+6uX!Fd0_Y=Siby1c-^-+u3L6`XV;8q# zxe`Blj-4@yx6LY?BOPyAjOUg38OXBOQGueulNf20ji z=@b#?uOzFr8P{6ubm-zB^wiHj%>BO5o|DoSM0ZIucykasYB^G^SUU2bO`LIWtfnlB zLArFNP|}tnrK}xpfj})GmJ!^)b%Os|T(A}g-3h-ctz@BrM(Ppk)mqMRtSe27OO}#m z2`m@MaW>aU6k*>o;c~g~!1XjlLs$E=I;yIV;+KH;Z%e0#Or)6HE%-4|3CPItw$W zE^3VXOfiCgkIj#O^EIBdOO`MDpvULXrFftSGBR=sT8KW&vV~wSk#Jgs`&pc$gN@7O@_>g6;r)V=98rRJ=@zL#_zPF9@nnpPQX9js%a|kBVmK@o z&zs0NR67a{X?)p{TgXhPu~Z3sRq4Nq)9bt=eHL9a$x}d1KwXTu`;YnGHqD)q6qWvN z_9Smn<@vfqnlaKlg}mxVeLTAt)|Zy=q*2b%l2S`^^?GP9I>Js_vfj8W_QQ1^aF{DV z{ifm3Aur(VCg6#9v3j~?0o4c*AktA#!3gFW_MrTd)x7Z2D%vIFT<_@Mb>&otybp=% zn!E##Ii~H=p=t~|hZ8SC6SV(GYT3BSL4V}9pq{>%!*ORNh#mun)}V3%)HEubj3q}$ z$X#U${5;wwr^wEgndr-~B;zoPR>XX!u^}$M+!F24TS4ZSwD(eHltFAMSsN5_dvx*q zTfViJMN-F*+n@Q5th(V_tz7?a_4B%R3&bEAN{xXtop#i{Pl4c- zB=RTWV9hKpGV0b>PVdV!mlso|yss@+Ho5M9jP8|ZBLHSVYBBH}zh@C(*@3k35s3v# zO*?@Fu!#AC&^yF|c?)zo=LP9-CWpQg)RDS9isP6cmqS4#y~&;~B4JSECt@+Z9*Spt zm}hslcJ4T@>;)9=aw&J>07MYYt!v3ttJ+QIB~XIL<^So3>c;}_j3JkTz=br1b6-np z(aGcJ6H|z*>f!5!6o!`Fdp8-NG{I7YPK))xDyhAf%m@TQHr6J;ZWl>?d+{0ZXGz1E zJY>^zk4jHodS&MO;L1no$D?}#znJXuXY!t(e;8wz$JIV7-#lRW_jEoYczAeTi!K!I zt!Gb2eS#|=`f;?RROH_z8*TrcwHULm`T0Ms#BYqJ`DTUVac>e=`N&1@QS*|MsJUj^ zxY6NKNRkD`HL;5s*&UBo`b%RX70&piS z>rlei@{iY+NCrFF>2`o8@$`S#)7F`E;W!=|BjPk8Drek3llA;po~31u^v>=Ns3p~i zNV_t|{hl^&&FY3u?XyjqQLjMniDv$bKW7@v-J9>j3n`XI?Mz`+2NV0Gx*6jZ>ey~K z3`|xtJ8IqS;@z}kWXpgu-Og4)83Lju=cm()C*XI~?Zt?Q%s{a4* z9*1{^Ve~6w#!f=`?+3R$FV9F?^}Bhof8?~${}b_2-CF=hrp^?BhzUFbfeR)2{F$K& z?}pMg2nK=ofIcQ-R`+55&0F01+Wil1E78tL{YE&k?B(eGmAfwF=+h;Z zSwP$i8N?L*Y^k8sLc21vl5o(LPE)6S3EnOjd)21Tf5K$o-vAT)wT1b9fGKplho--%gqjWbR(<8cY9%;+ngVL3w-&WkrGw&QC!651CMQ{Ol1|J2Kzb0?)DTA)b)%yel}C(PFh|(fuej zM{%VY)C;y5$+k1Lhu?plh6lQYy$&$>_Df!wcFCzsVqP1L|ACn7QO^vd#y`?`Jc;T| zOgx10ago+110~b&qGEXMXWMCRr(O;(;Y=E%rr!@cc^}&BmFM+gr$lbkHR4F$+F3vI zg|(bhZtecJ9zFhgzf~zGGwMpLkkid_z?2F@hSX7pn6MMgEB!}4&`uF@PXO5V{Mzq^ z0f|p$vD5Y8He?yk1e1Y*ETuf8t{Hv3 zZ5EZjdl4sFJJ>gEiAkWL)N-BPy&IV}L0TKbl!l+mCX;K$$$&hrue9brXY1tTjJR)W zNY)PM{ui4*ICc0%IL&2J@`D|rs4)ewZx0iHVdgFiJts9LL3c7$oP)itR!VoX7WzLS zi#ZKyd!-dcj|>wA1)l-g6TiEce>fz6$$bt!u^+Xj%`3S^{y_7szPQ)|?&gr8E_3W; zvk|uNXtWf)D=-{UK=&y(QN~I?kHU0bZul%^>nLEoZ2Z^gHL(A`z+nGEfq@yQu6P@} z9*oaF@9mc@@OS&*_B&*i>RAiz6J86 zFpQ!y9V&Htt=nxGafvImrw|{NIe~;?++izNL&(`;df;V^UZJy|F3mQn9%0YOIFKw!y2s{~m)a76E@Rku*^W~SAA(z86$@K@c zXwD+vTS5Q$W5<4BUT|F!*J1j$Xl~irs#CndFrJ6ym0Fc4&o{xmwji_1sb{C#uXEq zI{T&6hZ{G1VfGQ%!`gvn+9uP7u#d0D54XCS1L8N*J4|pWWPv|pN#)9211lb6N00VB zK6>+i5_X?M`-$uo4Xr5yb;DyNJ2XGt< zFH!)kM5~U@9<^Y%=8ngMcf`e=Bw}_xw#`eB_rj(k&r+*=uad%XO3jvgpPg#d;kT4+ zoXOEDs^k7|d&Dn=cSxv*HffgofM|cxenghF`{Y=_12*a&weLC^&eK#NFE;S7pg4%9 zIZ~n=sbYBbvYY#L=ucP<8L744#qO6~*{9~DI5UWdISc`l5Ceko!_<*nC~6U5e9bY!G2@i zJ^Fr<8#;B!zZz+MM8l1J@mqU|e2Uf>kCH`{QipXG5HdL2n`}-YO?^wV9Jjbmk3H`d zl0U>m+>F2Z0zx7EbrI5@u19l6O*(t}LG{XkkNnoPuLUr7DVMoK&vkC@y=NHF`aX9D zWK0i9rp=Ts-DuXCOs`m5!yeKkVZWo-tZ4ToMW4qhh$U}H)~hdyzHTQ*hZtg|G{wE_ zCeQ*ZupQKNMbg8#B$h+eKK$>_0OAiqatTv`$eHRSna?{Z1gIyMy1b(U+P4f{y zweICaBrQ9f+D`+{cUoL~t;_K?%3IZ;{3PzReYnJLRtf!vNqmK%9JjYY@SmKwZ(fDN zwWW=U?<&4w+`c5O7QR?@M$N$Nq2}X5#?G7z zN1b6dbvoJWy}6_N3pLNCoy8loWh3|8_!`cH6ut^cPQ>k8I8%YJ(x{fli3ml`NivMW|^7p8Ml54di1qS{| z$|kS}=Cx>2W5v+2c7=lJ!>5K*_p~-H*)$;4j{5>z$0$*m?$6^U>G~-?XxVMi-9A^h z6Ry7f*3J&hjwXH2jCts)oK4M(#atdqKURf4MUZY=I9UhqYo1HBJ=ErDni;^b3_&Ag z6l$7Uo5@8r&^`15lN=?!mAx^`edS^LrKF#ncK8Ck{VmHwC~B0;X^f#DhX8|Ei3M+; zTZE5Y`&?vb7Gs;#v1^DV02?O_(9pRZTL`|+zNs8{3$wq!tEBoG^K9?3Qhu~ynq@AN z-ks51$HTR%e#kzIkfp}cTrD}?LijneQtC%*^=~u==tuJdSjErnpA&Ekw`M&*KIL(X zpyl&Zo@LguNB|w`r|kF7i0Ho84QHuo29@AjrQ28BX~r+(z3*Bj-s-|I=aeXBk1`CY`b;I~o@C!-0s~GcYFg433{wL;ZiU_!0nGb4+-7-=6IU+}TDMuyAkQRsG z_gjB&ez5eYk_wis$D^XY%5SVi*; z*$Zt==G1JbIHDG-NyH0GdG`|TO?K)-C51ePKabx(z@Us+3!ndH{dB{cq)i$(dQL*W zk}vm5a3FJOiwLfAG22~c3u!uG(awZYD;pgI9LifK?Yi&>5$Dds#igofZkH0QFFfhb zj9^h~4objrA4#c6WalD;g+myauu6_q6DQ}QE-gsKDF=zv`=~`r`esQPrqL=%7bx13 z>u*f?h&V;JHt#C+kT(6Z$?Vx416zm@KtNquefnMQ-^?-XAGSEobgTQGj(_r~&u8WDs zyiJw}TCYZ5q|@@M!hFH(Z^UbJsx#Qj9gC^A4(LdXdSLVG_~@Q z927-0KEa2i&TWf9_-?yxSTOqNLwPfmp>$zS6bX?$ZFBGg5h1JcwdYb&WzCJ~+IM6Bj!P5dLcm{k`#*r6=EZ;riq5e0 zUmvT1fan~!pgU7DC44(o_+ zfIG3WbA)e_UuX2~0ry>)?!u{)qWo_o->#4X1@EXpt!CHFN#xhDY`NN-RRvDZFUIvn zTD}}h&%S7=`-kvz^~6_)Khn*WUjIldtgKDnWO}QH%f2KvOgEwy`{!k**Cj;T#$q?f z(Jn=-<;Ou%`YTQU0`eQX6-tl)n4GM3Tl7ROYz-~(^2#cWUj~PQO#bZt{3JD(`PNeVX<>sZxGu~Wm9E=$cbb_jY%ER_Z zlWojOLaj%G52Y7F)wEfEcDS`(`L3B}iicUGzu`a0vDXvkU3=vr4;dc%B{FCLnt0*u zdsJvZm%%vh62q$Xw`Ubv@H@Np_ULpH-1nGtbeW6X_<$a14|Z0EY%lgCwadG20ddnemg}MSqYSuMx`M1Y zc=#&jI)n@{kZ?q|t}y56^&Yo~W30mBSTfLm!$?{a@_s^imVyc}r}ve;CbJ zh5!7+WgeLqfWjWMGv(=m?Z%Wqew%=ogEG1HCN(u!>G4^!6vqj~fI02q=Nhu4xRpsi zV8?UCd7TU@K%9W6=(*W)V(yk+F=q#^QYmJ zm=w=>cR%&*^)w0}cD5QT)7|6is@`%>xKg>;Fh@f?=HY)n`8vv7j}yl&Q{}Jx8LGkF z=?~Lw14(aWY9>)(O6Ylwgw@T9FpZFehuaE8ek@?E?s9nhXQ0fyY%rhnf#qZ-KH-D+ zDyBZuNr-R3-3OY%af~k-G%lcQM_^%v8zX+S3$J8-q{cMWYp9)1EpOlFd=SqSYE=D2 zD`#`G^=VI$U$V2(9CYU7pUo2$3(*XUeK?((|6V>lNT9BtR^T=1QqWz0N$_`_WJhV8 zUmMy=N%;EOvxKI4=JG(2h~bh;_nDSgt@byq%NQmE+^Tw?nq_!#tL)8>1qskyVWjh@f)(GGSa{E{o~Sk-8JRc)o=Ya2t|U*@Nb>JE(Em{i6Z@=FnNxxGLoz!RT(#B-A6is%8!B zL)tKKGPKX{=%07mPInfbDo*$#p9tk^29V7`X3PjhOGQSm>=GX~99fe(wdoj_Pm13#%KzvhiOi^Fd7Z zG2lxxUBNnmuAyL|OG(YX`X*uv_KYw^K_HTFzCsek4%Y&h0-l#u9>bsjdMpq^rS8)| z=#iX_*_)LKWYmmTbcV|<->R0dfBSx6w3(FSt(4Eyy-4)ORVC?ijKHS_Z+9DLNzD2+ zd_nwt?=uy?P6Q_KOYoV+RTu}MD z_gW^4hQHs%CJb82Yb<#27M|A5op#yzZs&akH2MZ#6alj5hA-$N&e5B@BO<|ac)|ZQ8<)Z&l%i#(6B<5O( z1zvJnRhgYZt-odgFgKx-FjS4`JPP0@=r%?7*CGPu4gKlZ7kN2*6qY=2lpRc67P`QQ zt?EBCrn)u~el>Q~Gjr{@lg`wHJOQKmu#7gtVJ+8%=xQf?=PZ+&2lB`mAez!n{hdaQ z^Q#1u(M$CBT31t$5a&mgIIKtz@|uWk{2k_H#RFZL5^7abcXdtl%&0efc_0D`Ydf*l zI8twR7W(?_1N4K^5>%8g0Ts2xp}k0|O$!?_Z7Sc}F7Zjad~(l8{zN5gT%hKM$`xWQ@~g%_A2YM;p$sdoQRylMFPb0n1>poBOg04q@c1afoN$sDIn zpPqY8jviO0a};FT6q><%3tOdU6pNJB z8lri4zL$g7>Knaj=Fb76y0Q}OkLlIGF!cUdRL7@kGv-OAn|xwDG_4xKaB}sfAcE8- zPIaiH$ELD1EVxo(3|ZWj+gTMy^b!vv)&jfuX#E?e@e%XmQ#}`?q9(~bF)E|etarEg z&hi$>cU1f-;19LSaxF9x(<{C-#hfw@=GSZu^cZw7O74RxBe+)e?z| zu85ytQUzUAxVai>*s^e-I;@(`K3L831tu*5S5mYTi;)+O+fh)MKUws6W2X(73LODQ z!Ks@ZRC|wo5kM#N^7L8dgSRI47EkCjITZGnE9uiwy%xZoV~p?ovGS~sC8=2;lxF_R zy(zPm=@mO>YDnCO^uDwn%vPpq`>+L)S7e$~dFAx~h2|>f?rqX9`WoLY_o&zkeldL? zE_g%TKJgzJjw~mEJ{xGR6$MwUCHwzcsX(KR;YhdT5nbfxupKwD--bB7>r9?dJqT1JD zWczvUYlx!P--mdUwjcg04jqm`iL8IGOf4LF0H(RAyllkh^ETQ{2<(Ir4rH#~X{0S7!ZcvMYF5T#Ip6fiMT6qK71MJM z<6VU+Q#&xY3#UTvt8_MXKr#H==v8d&1^-QcGk+h+O?&#NLQ)t%aCHrS`IyPQv|zvi z0g_4^q6LBi#^=TZ_hxph_5Wb5hpoalABCLey%0J*z6yWq(%I1+&?6JHT~u}Zv6KDG z7-=sw#9R<*q+a_O2*!d}pd%!B`-&Okvr95)xs$4;Gg*0P>dV9pI>dhhktkOv6e|RS zf937RyeBKM-i%8fEsFW8#=C#Ei>TceeO&t*gIa|QfPKPh4jbx!qKY~EKy7!znkkLa z%egb3H@7To8>R>DC%2>y(V0KcdczO=zK^554`FmQq1U~2-CbTb*tygir@uSeGzRT z&It^YrOiSsCwa&=V%oKUOQ>q)q*jP%>wj$z7BW}Hysj?AyytmOilOsjZ?H~NX>w{# z(JH=~c5nB*V{YEPI`l?&-Lb;-jqDmOnLXtAF|YpZmaN>^ZiI3f%%`{V-2y9n>N?s$ z_F52<$}qFHhReG?b&)E|e75c29=y-l+K0WQ%dlwS!mm1G`FPyT=RSNBofCE0Dir`H z8s8?#X2lq4es~1d=8A|WOf=Bt4;BtpKEc#-u?95lU`@`Fq(qou`DQ}3zOQFf==q*7 z;?ZUrwKrIrt4GE<$vxy`v9DX(F)sZ$AJ-l@)FHnIErt=tc8id-jE&TtL;>aLSSSoG5x(c~<0HuqlJZv|z%S8@4{6U*+LNB3cBgdIru#{`W+WVp{ZZ?^}|3tEIP9486EbECHT;Y)}KtMUAUJitfb%8PM1T$uuZ5w{@84FA-)+!~TQ@v*sH3>9g~( z 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ξjSpMvmp()n>VTjK#t4)%%PpfYr9|0SSyzr>Ws&;CRO|qqmkUjwiva z)3-K@k1HmS)4!*ZGy^8}Ak+92;>vuYK>3)$iVxY#Ikml1p)} zgYx?hpbn8%m2}pTS`%#(uE4#}YYU)_W~Qd5T^xS;W8I+SoK$I^QxU`ousB2K&l1gf zj^4^nHvu5Cac^5Ly-M{GCnC}s?(u2iul*VuPi~RLR<+$x{2!}bM>a!F&4e;D(S7Wv z1bRI+q21|y?nm72!|EE@Ghxr02^6l*hu7^_l55PwuKLgLOV>+1O_AhpYv)cdxfPH* zD%YJ}tndH)+LO#o*wP&!@s7oF@|g2teSUra?5nlvT|^|5nER#&L)n2p!v_p@DTSk_ z67x>7n>)f}K{4s=6??g;u%$1bZOo;HamLJQ6VKHL`3`qVq-72m$s2J+;fgPu+D&eg z(~Pt^Bpz#ZB$4`QPi-?k`DtObZ3L;$G>(!xx&^I^|A^Ptl*fr@IPqn@>BK=Zdd}W@;(c$8XXyn)R5QWnbA4Opbo|nyq+s!jk=T@^mx9DW0!-NW7kK zl>`A1X<0hGZH_f<$mwTuTE;TVFe-{s&amxV2x2*B50FetcDR=TKwJGiaSumvv4E`o z4e&QWW*z*;JBC0_fCr_D=}9@2)W!mv?RkzZtx8Xw?LR+;fXIf9Vr0yz{L5Q#BMvth ziHphI)l)&Uf|Zx|{POC;_g_!EesqGiAPrk%xN9!f`^_qYgUl&`p@?#zH;C9*J^lc8&n*J&tPhq|NS5D3Z7hn%&?ybl3ML`-BEESc% zrtSaynYSjwN7<4X?!V{r?_UTCfu9S>%H8|V5!fNWWBsJO_IvjK{xtYDWbkuj77nq0 zTbt|O{%-((ErsI$R^YF_^uI0i*J=LWA^!Uo|KBb2mtFaPe~qrtPQ>Lv*Rk$>B+y?K z&7@fisXoV9PuE5QKDK0H0gseae)lAC2?>*rw^Mzf>uC9vE|AE{Z*CS~d{spQfQbx1 z!=4TU6Ein5GLjwq8=u)bht?*7_DQKNqCo1)!jS8~Q=I?a8n6n~E>-~_#%hc2?N!iy zz6t#f*4Nj! za++L00&LBSb-9b0YA#==ta7+0KsJ zQ<3QA!^uHhPfIRx4kdgau-JN5$Ad9#g zi=Urc3OqBLE9F*_NeL*(-s%fX-{RI$4?KrT%OStgJX53C}8_w~*L){zS|3!a^s z`AlhF;iR{aQqGd;<2=FXyN^|OfZGEb zc0++j({ca)6$vu3aT;sVHlIE17NEFZPz$VX-&&hhxdA1X9RM!VntgljBZ$pwIgT{# z_nxMc`BX8B6O=Bd0o88idG`{i@xrPD!0F95b1rJlssj1J!`9X|6LBXm$D9$O2U=I4HO)+%pD+KQMI_ow^DXX*eJQY^gotxOZ6yC>@@V zlA@A(cbDncZ{N7miY{IOg-bK5(uB_MJ-}459GFVVH?&Om0~-EKT;SA}{}L}18JT4D zF5JC4mrvgA&YUJW%-|gu8H)<;b O5O})!xvX{3PLO_EFvk%$BI~3c(GVm=MK*j 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®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�i$j>CN7cN=2t7+$}_}Qs>0&kMJbp26dp^d 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 diff --git a/screenshots/5-azkar-detail.png b/screenshots/5-azkar-detail.png old mode 100755 new mode 100644 index d004ced103e67c90bb3eec74d2d85bed96676589..035d9b3e92c7cbc959a34b10a9ffe1f054910d95 GIT binary patch literal 523261 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

4IT)f6g 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

-x5)fU3?#HFO0kk48Rcxs9u0q zDRp+(*vQSdku0lms&Aj!;-kwDf`j-_O|Bs;MOC&BG#a1UBFgom>%cBZPh9TL1mND+ zhdb{m-w;2woO=UXl5t!9EhGw8BmDhKVDNz~MaS^{xMAa+<_%*JXQ3K-#v=UCOWiTd z{ahL{HKMUUKXE%4)e1WNl`UnRHUkV>Vin;Dj!q%)Rq_(b>eWo21Ye=Hnh)C*b`~#; zpQiGbdhztWl1UiX$VmfyYXrh#32Z{~2I?SiEV+x+X0sr9GH$OMYWQoq&Pt6g9Stzu zyVy6tBoL8Eo_J4bB+!m|v_i6>tLq&Zbp~nI8s+RLD_{tUmufOK#E)oHB$-Ws;Trgb`+j4r8aMcl7sTKlqt8EHb%NCjoc6{CsoA0rd zlI@Ry8Q2?wNkCZTxYd7$!F}XjVFFVEsB=O((3lw5(P)h$(F!eAUG}WmRKH$!rFcfN zelg9QfL)zcrYa%tiY|q!tOekrPiHJg2pYH|4^V~7L!?<@CZuT53e|CEF6#I|?uEL2 zJWXs1#m!;qggVl&uMX+ujC#)# zLX%+dwam-N85+p;<$FU@rHtXGmr{wyQdf^XM*rN-2R+5Z`zF@&%Nj;Vb0#}kQj?9Q zftO(D$a1MiB~Ou6M0@6sD+0Oap75Xzf8~v*Ti#W|`hi3uy~vAH0S5$DI!w81#Eysm7vL+ z9k~AdqSH|UOsvk{V#irzn22-U568Pj)hU`RTN_e))`s!=1QiE51{yh4e9waA(ez7E zR8VCYQ7F3Hlta{{SCC?bqUVhE$dA?Z3_8K;@5S&*a1gCbV8p7h^V^^50%nrMtDY6r zQMyYwim;YdI>^Knk+4>k>x$!mKr1QZVWO@*O7i&u5IR&cHqMOlB@S$ z4BXXAdMBalOPeluxi+Hu345u7y1h~{3c8k|v0v}nTQ@%8_-If&*0j7BO zMy>iDVUp%F8n90P9eNK!LM@%d60a6Lz+P`n`IwQeZ zibieN@yx&enZc3mG||iJ_S_z`s-%i^MYfJAkKYoy&eEL4llv<3XMNVoOtS+ywnvvO z?#Gh8CO`XwYQR9MLxM5_2KdZR5RNbwS$Cw-dP71L9Aa#J2p1zsJ*&mNXwVjmegTlC zB(yf>gDeRHVvGR>O?LJt0*NmVzhjXK@z8HOfD4!?J|W_Ol>_b~w#r%PY~}25N00s^ zpljoaL^LCxI)Si-bf{@WfSVpPyjiTV*=*&}P^9s9&?`?{FQ68y%&&1wKCP}t7!r`W z_5z0S9d*7LB?*v{2HbY?;xDD=5z$-%3)+JQf6uzB0oU{geo(ZCCpsh8m>6x#dLfAZ z>Md>Fn>9Ep-u%ZvV*~_?+-lxk>61g|=KD9{Etx!asmfd!bfEwBmby|ICIlOZVDi55 z4>yJs4|D*q^hlOB#P~y^yU{x{TlHEbksR`ZXmDa2OtI+ z^(~o^@S4H6x;rz#{;-{3PaU4xotX=SfS3aY%u7Sys?_(%O z^3iZ~6BNWd(0D)a@%s>+Q;d^t;1>6Z{aF(ObHrQ z;y?B~m39MW0~DZ^MVo?>odhn=twr(luXC;uHBcs}2xpd_;ex4^YW0JlHc6sptQ)X+=P`~Ll2l#Su+ zSs}6t<1mOiFq$b*ew#gxfS9K6?VJA%g}#_f=SRaWaokvbHmUMIlqn`<<&e8!jK(^^!6Q3Ya}+n4dZHKyZmlX5xAaheJ8rPj20WkDQ9Zv zE2`u-F&$@s$?IvD@<>yTFDM1cPsna-Gee2l)2Dcj&n4UBp@DQ{JLpi|T<+)7wO}$* ziymT0u_XdI{bI$^&h7vt`lW~|{q6eWmWtYOerC~J@B~mVqzySKVCO~&Jjt|WB?jiPJ0ewMDYT(*pM$h?)xjK}7v zjzKRN{3DI|A=4CtcwbY;idM07P~uk%MW*DJ$kuq&v;48lL4j$Qc6!4{@w@zYvfCFy zJ;Qw%SBn?Er2HddDOw~Ebo=#F#fD2&7x|{@EOWzfD0#LeJ@{c|f^^ec7Pcg@ z`AH3P0{hC-pgoeH;*n{3_I4!c`nC!G;gEfmIS=;-A3%&%aQa~wQpMdC;VWcxtcj(2H)+*|5k8?eB?b_;C!`lFFLEU zE38zgRB%)kKkU|0cy?(uV4pwy+*D%nGsUF|TLVJK-{6RTPhafn^$JY|L5WsYtokJg zU!U^Xw#yeQ0#06J9sCii_$veLH1N8wx?m*7T&QQ1SYsmjYPu0gZg0B|(P^C404e2J zZ`oNsqOK^vs17=PDvSDSLH)AIks~IWm2Bb?WEJzyr{j<6Y?o-Q%+R3V9DkIL+Q8`Y z_m()3Dg3WxU>IdF3+G{$EDYEo1ZGhZ7Kp!aXP_%qVxGyPP{8}3v1 z2&SwFn6ljl#57-={b>mG=1rda^ApStZycjeIKF@%dM{NY!hthEYwOXix(Vbkr_l_v zuM%jGX^5{ZH0v!IS6yY>Fp34-T$SI)*TU$Bi|!0v5FA!V3C_aUxvZDFhyh2isepHs zYTmw1M1kDcCRVa@KrB+z@t!-9C{ufs9kSJZ5y_1w`6&8rv<0wn0$GT3C0j>|O>WON zJJcdi>@YppNg0lSf9IbTMBNZ2ih-rjEA-eV&_FgUcGvQ8(RIs#M|dA!Z=hi;B+87g zz!cAgGf$h5OJjb;b?>4LDdGR^ZB>=!P>J10QQD^MQ&v5YZ{@LQ5?g2|_Yc`_FjAz* zaUpzHQ==8}!4w6X^}M$iIz=7C=;&2*ZPKlO=JPQ~D{5x4yosqJPf+N1{GtLPh+Rba zttDXeZNrDpcTI7r0I1~EAm!vlGTtyhvH$J>E{W$>_ym+d8*RVX-}5t+5XRyw*C zFmY7wb;zhUV|_h`V^>bvmTiq8aMI>brM{3!z)@TpV>{;}W_l9JxA>V)brc@auQ0cp zN^e$y6wAIVDyBFvw{1w79dPEoDVX|Rr^r#2?jrW(nF_i@EY}iQ zscz}cwgzo}2#}7j=V3_wXnAEVr)TvdiA#{i`gnJRJJ^+!#<-?mMqNAaNs8bGo!(AU ztrIIt1DmR{yvYOVsYjnekn?9zt1pOFd@4!jYZ?7mPUr;78t&E@P<%fmLH_6JPK88_CtMVil@3iMK}LrKYM z2B8k;Xkl>axwZN$a7f4 z7Qc=BC3(;y@!@@y$|RuSN-6kEnspV%C$9m|X1a5ndlzP|AyvGzMrwTcUK%5% zBmzYg6`vf=*o2MY8In}?yjhg|66;$s8rvE=v&9ffb@csLZbb0?>e(FgBaEZ;Z6i{1 zwOHHLbMY=@jBszcAlC-yVRTYFc+%=iCexR-PDoQ&ePHz2k904L73Q&c=EU31hyhMJ+IUmDsb;MgSp{K#g!a`a?Xlf zIHWy(ue74y7pjLyt0ZM28Z2gGSKzGJ4^)VMS;}8%sBsi%Y_Zm#26Y(yvC^H~3kLPg zw_m!P_NfF$rvGG~CUB2*{9>#(>VS4^zrORlURBJR zc*r!f@ix;v2R?9~{>cs#KoU>Qj8X74(6Et zz||a?P2_ndH}fuxiN77Ppn!k-V>1Btnz*m{`@uq$q2(5Ar&Sh%~|y*9Y|WZ_&r*hu^ro>F4lVKTg_P zay}Ych(d0=VTj@O+v-(yx+`r@;a1*PcOyI}M20a6U@B=)p7vmq=4%TvszPkF|B$4B z{%G8bF+mHT=H3jYe0*m|l&41yILCk7R$nVEx&YiZ#>H=0!t&y1&B?9TU#*&om)*CoPAr@7lFc{=G&& z{G)Cy*Vh3o=zIV3^BlPiob*xqw>tr;&7rXt9B8Y}d7GZ|Kqyz3D@0Y=X-9 zLVYVT4ZU;VgCRX*$vgb&YR)YE&&QXMG`e22(1aQh9{_g#kWBwi@TzYjLhy3NI7yQ` zz40ag{97GaskVfXIYISJ&D+zAKV(Eqsq7KtGcP62fUT#9#V26?pqt_L zGYmCV-WmE4Cd1(UDV4ScqN7XuX`Nr7lK=B=npnx^=i4QsnzNUk382GZ!KQ1%a|8sZ#d#nHbrvwfdI5>7ZcwQmw!v8##f367~0{{KlGXf*S z#bN8a_5bTT&?s>|Lrn{(8-M)w@&C_1vjb3+AhX?3Bc=b|Z|K+kfBuL}!N0O)Oy#?v z{_h3<_m!c4@x!1KF;+$5Whs;V&lve1pF#pBySl{k=Vewt%TM`(_ z(VSmw2*X2@VqJhst~TFSfpaNtU^k+@TY3OM{JF#j!)D;W#P8Dg;(ak_SC@drvIO{~ zmI4aG6RQZySGTN$>=#<_*u_|WrC04>fz1F#eCsUP=an4jDd!5%bBlo}zZhhj$=ZQ~ zgf$53uE2WwgjbL1rPmxC z=v}%I2;O;*F#2X{T}&ICq1-R&MIe60pK1N*e_2Yfml8Bot>G2R|ce*ec0iTkv{sxXC)r?bh%an}UrXV6zVrG$rO z)Tj*;B6$4*J;NY##{5XI3TpyI$Q4MSwose{EN=%6qkbZb%iztSe)ymF-s!$3Ogc7J{63*xutiC56CqUE9D~O^MSQZdQ6#@{S8zuPVFP|`W`@BqH059 z2bk(P`dFM>0P8IViO#7-E!W8t@1F`;m!I@H>)K>scc@@0=rosI00C7AdL)6S*Wm>! z1I=qG|KnNji2507La>)!5OIVAEp#0mE5xwZ)2JYY&%U~Xm_%y_-TjPUeJw2b1IMTp zcSH{@Q0L|7(D`Qcr!Ip~9;^;LM9lN5c2UscevARe|mdw5u1?K7vD9)tdpFe>a6WdXY5wxsT%W|Lo+9qA(-xS%IK+ zWf*mhJm|2kS9jq1dnYV&?gt0VO06f!XA3?4H9r?cn2?h;xui;@Vdk5WX%xJ$A zIqU%u3&!)I#QMtDn!7j~Pb+tJqr?rFFrTGt1piYz9aDChIUi?_3!u@S0l)ZSP;O~L z`wOV4SipU(3Tj$~n~3>m{ja*=+C4Z123=!98-5P%Dgemuht%lXVv48g|I4g_QsXaMH_5;CAO($ z5Pa7?*&VlO{yPVv$R?xP0qS!AI$)}3EKS)50AZ0`8~Qt<&d`<>L;pu9_|0y*DlMh%6C`vC zh{rTRf={!*E5(}l*wUm6XBnzubT^^4KQ4f+q_eAs>FU!8I2v-O0CqcCV?cv_vQPXM;I0I}o_TN+a*2nU^CSBM zRSq{dFo>Ci`NZi@pYH`CrAvVPT^$6A{8iaAl1J(u$`%cn1(+GGYdk|4Q?9=A>hEVx zpz9DM+Xn2GMZNg%gG8SIZd(TY^F{6IrX=N21i^F4Ma}2)75M~&bDGdxk~}ReY;Gpo zFF<=W2U^(#1z~WI$wlk3igKqb0jTE@pVqALnL+mhZOH>ThV*cxgE$iFBS;PR1R{I{ zQ$<}Y|7IYL8YlZ}kPdB~}-@m}}1Y_Mt)4;s|4{?FgRHQ>_fx+t(v^Ma+J~@-I3puZX%#^Ca zEblKjbv=Ygr;}eQ!|im{)~AZ2FWQB_zWJ4W_NI71;Dq?z@X~Ba6z1Zl^RK>#iO&en z*OD6naV<}vEGYrQPsBL({oBY|0v*eov*y1b&L-PD)r!t*=pNw$^weaGNqxhlW;Wki zRn*U`06Q9!(wfK=#IGa$Gt3lE`jSS_TAKGsdUtj11emx7srB5)t)}brYy$&?`g75a zb3Y;}`m|TVG5ttX$=|1;1PIuaXQ5H7oalZal-+UV{{9hkoUAC96l?ZV3ARm!WqiPL z#KDR*t*pD?b@wA94x>kAopxzkN1PQ1nCrY>QC)7|24!U zPI7`-5AS5RlqPw@ZAwXVdA_| zcpMS!#6d)EB#_ddkYJI@?<@|nk8RDaoHG=sQKZp-gEIKOZV7N`D|$p#QEDTkSHkEs zEf-BvK+d!HR*&%gRCL>vnFIc~uc!xOMJtF(6+cEBMU0=5F3Mw*MW|p{A2rfz25}Gt z4u#tQ?g>NtDHz?L1LRzD;7xbiPcj4ham+okrx4Yz?VYEmLWs>cL=^PAEY~Zldr;@m zwetqSLyH=o+2gMxV%IGqJHZ=8HFwcc`Sj;*S9falbCe6a1!iUe^dKmo%=S`wxcC$# zNZ^{E=0wewGl6HLqHtGTmn%wwy_94{R>!cakJt#NbKOuKjpyRYuDwxa!Ar;Wik5@Y z&DQ?8!HT3z&!b}C!YAa(DhxJT8Cn@1Z}l<)8)|+XLMI5#6nK*;b`~?>6O$f;5Ij+Kh2c=M9AA zA+Ge3C?CRL5-*c8g!p-1ueJj0;L!CC|1lD|8>Jq`)*)_9rJnh;xQnqTA9W|_F^YMC z(#-hsJ-Pe4W3UrWVZ&yaxBBQ#vDjxoBXnf>LR`DQlR%JqKcUoRS>DZ}^K@a2#vaXT zT()n_vzJlyP`07fL5VoHiJGQ0X|AA*)`E>hz}KQ|Tfgj5*qsVDL@sOu4B^AO>ANli z;x*peAQ8e-VgV9MPQK!?EkQ(4b8*PILB*fX=A9yHpY=elLulMD*RtgAmUnYIA zQcZoF4rZQtT45fYse5tng#4SG$AN5ZK#MNGgIqTCce+?{py5pSUyv$Br8gWV^foHM z0d3;hiO+HMsCi}cFBLFmKSPkR6&>{HuiFWIQcS2IMeg8hSCm$PoU&own7vvL&AA3< z@pWU-zf}WXK1O;spmJ3WlgwsyJ9=}I@w^*7lRK+yi4Sq2rkpX9?h89ca5avsk+BoX zO>J{NhD(1w6CErYxiF~2D+=;KI>u+TpWb{BBJ4TXNkGJ#ms{-9Y;TZ-+PX8 zcYE0{N}gos?M_J%q(Peh(iN}G@p7oijQPIh!2|4>3)?TrB1pM19CesfM`9=l zb-=zr)xN^dQJyxfa8SD7Z4Nu5ZCg7qbLPlK+ZLZ1CfUJyrb?-UzDC}P4JX%R!+kB@#HQ~JczlHPfbKMZs!d1&D722FINXO zTkZEfB&rE&rtD})-dmzS_bG!k9Phn_;TYoJ4|H0mFiP(?)^2MJtX$J-Iocw;ai4$U zO@sg_DTVtKPGCUmJdC}eqv)!t94oXxm?MX@Bj8=OW`Jg(!e*=Fz)UBh2k$4d-NoX^ zRoC`qQ`XXD#uYo>I^A_DBoFg7t)go8($b2l8e$r z-lBumFfYodP96ain6lfq64%HFDR^QAz9{T>mNrXKYd#6#H34q2Um z1BAOg-$frtO45s?KwQR(<@%J{Y~rPMC~)<01<57PS=X_B(be%3PXE29*5G)^^N81} zkqCZO5 z%%H0N@2B<~y-o~5BkNr8fOIDkIy*>5b;2N*ej7*x78}!5-SH>Bxrs(gR+@&^X=bmF zoIQo54R&wuF;=RjgXB*h;CRO0>9(H;el&Olx^h!NC#;5H8CXs!XT2atxs{98X@2jn z&d3G<0B$Q}S~GbH8>wzulEbRwtiU6LaxA#dcdw~|{?2$MfbqK087lI{r6zZz_M-9+P5LZ+wmuX4#tTb1w3)(Z$WK^qPX9G!mU41$`0iUFTSYA zx&E5+?I_ng0j-v^BSn#H;OW+;z8d9)0$ecAyw~E9 zAIF$}s~mYLiwifpmTWdZ;7BpcZy(b+<|&t#e&XfJf4x6L|NDLY>nilo#gAm2u@Xfrb5G44dyp+xe07qB z9)qx^Xa8`{gnRHTIcDXIjtNjq{`zF$#!iwxn9#HUAoYrd7(ewr8xlxEahRs*0aUn*BeB-w=C_Gc0F{& z$VrVNjc*~DzJ6WhK3W4SgWW8!M+ieFV#-PoCf_mqnIU`g#DDJl_SQ7IiqmV^J+TMb z>h8c!U|YeIqFsza@VRGILvz+x{DI$bGeY1msQQ?uwyVF#E6}^jsxxi)2vW(FY4cK8 zynY0`meTo@4Q+s(gV~vVM%iu*tsCkwBuc@&J-%3%zLeiqdC+$hHR6Hb@X@Ps&!by2 z*nFaU-0ujVh&I4No{NauCl8JYD?~RbZ8Mw${i}s!zl8bx0k~7j9Ixuf=PtSo&}@0R z4t3nKxOI8@2<&DjD-%-Y*Z*Ae&X9P#rdT}y0jCX>t%%hX5q6jH``#z`zoJq}T&GM4 z-Y^l~i@e~|-aT+Pdi!D`dEY32VeA(*;b9~ZXFu^p@_zHck%vB2{U0z9QtrR%l>U7a za5Dhb0V{o1J2q{C=a`wiby53gf}2k2WCKQRuG7-=ccp4h3a+b_Z$dr~1Dc(#)7ocP z9%cRA+TB1l^_~6s=s)97wAiBYV~I8WNJP9XvwZ@Je;n}oekBmH8ZwHBJyoroYnL$O zTb&>chdI2%pS7vLEBC^iFrF)8RE42N(t6X=M zA@;yfEH>9TIHse%r2cNVro*3zc%byNZ$3Y7?RlwvK*VI^bkVn=Ns>FjEzru5cYtUU zw!Xt!8)kjB(Oq)UoV>yge+m({~m~hVMnPRvGAMWM@e7QD16!?e(6z z2dp8j2jRbr^DI%fq>r%5R;eOhV-t7IdtWS=O&zdTqGv`;yzyG!D2h-zX1Je?`ESstMp|f#He337FO3($=grwMuuvAotu$!Dux%mZYn|Fc)SZ_tcO*kq9-+xuy7HdSM1eo)6Sx;js5iGjc=s zkA^$jHy{}fso4H8*tny3(0$@T*ktZf(J}EoaU=>UYAWl`Wzm#X+u^F8qw^G>gYc`y zCF?R3w8{}@;m>GJTdpNMHnXw|LPZvR~wUM|G0}4sRnZLIPR~M-Lm1Ca=7TX zS)iwovEKjOCN#yh=572Ph*+>p4#DuP@G;ZG4TbN( zN75gEGpekY6H88SDaLN8Z=N<$V^@+Vo0mz`$W7Y+V&-v)0tT1ZF?;&_X z`xlO#AE;SQRGd481@dIhvYC*b7xc>;rsb$F9~%GS!V6bM5kjgyS=_|N&lZ*J zuq=E+ke6C0a*v}C4vab0i9a)p>vT(Ms!Zv&NX1m~cqNf7cZ%#@ zb)*%r1GjG=WR5m0d}!89ejuJZp23pj!TgON?>x>+CT-?o!3VO{GkaFYDM!Ik+Qrkb<;@6(rRAZPhz>bw$;CKQNl-CQC$L<^!m^nAP zwT8B=mX0+Sr?pne92J=4+3)-r|R> zXX3zfqKP%SeE-nx$b&oV){x?cvCeMp9s^nH_jqtS9rXVLdmZGblTNNvTSF2Jcharz zua*=uC2%afwNYrYz6_%Zki9R7anA{Ti(ldKJJq^2JJU68}maqdqy zJIf0bMgQ#&Dp#AF1+l^W?v{D&<<*x?tGVFAg1O@bP{4(69J2`a*e5t%D^-`pHOo>Z zR(B&?D32G3nkCZPy#W|UERT#?Z!2tGQ-Sjdb_=k4;lY*CDERsBH}d$ny&7_N-wB2Y zsP(OU)^<+%I(R=yO4QroJzzk`dHm(`Xj*4rQ&n{x+)A@R()sx(A6=;@3C3XU^T`x5 zI@np;;lQYvb4nQFIE}fveJDt}IS);Ys1}+#BdFbBY^+>oUeG<(H9KE;+-F_Tj{TXB_o|>zd1$C$2b25DNt?7`=D#E#8b;Koh8 zmj&Cr)k^qhC(9{inCzNC*om>Q4Xa zq1|c&QpBFa#gFV;8IC^Tq?`Zs0_Z2=_NOba>c_B!3?X0RRWnV?agLcvMto&g)s{4l z`}oa&=aqI;;CsBUZ_XC8!ZiY|E%Xq*<^$I(OXIw|E_(|JHa49bPOk2+nO52T!!cQ7lx!`a|yc}(H>fe6p0>wmRgs1f%j?-I~qLo!l7 zYO?TJ1(E?7l?(CoAK;&&rw=USts|Hlke`qCqokIH(q7#1$C}qM5UWq{Zg>Gml~@7@ zew-IFA@FW5sgy3;vCLL}!XZb=wZ4MNz5IVg?CVt&0_Q7jd2q5e|CUIx^|VP$+yQKS zICl^2HPheZguk=BjNx!OP;=Re;+3rLe(MRs2E!lK-@N(dfDR;kX2F$xan$Sa*+YxT~VT??7k(Kt1pE4YcsIw}3ibNjxXzW8?Yi z(Y=B)(LS#r?AFu(G)>WMBZz=QnPEtBJr+x#R<(cr5`5)viX|jP{;RhDnWJaQX3+CD z?*{!4GW`JzMSwSZY_p!jEWIi0#rOj48M!k~{RXFtyfg1ZI;4QwU*iT)(SCgpIKN`J z3Y!B!eE22fzh68J{s!H(mU|UgS($uMC2MueVJB;h`%oH~(RJiOMoIoreHmZ9@4V%VB-7k}e)&_mArVUw?&#viJGxaIOohU{L0aO`5Ez!Jj>A9${(K za{LN1AO|%}-zg?Ggvfd9B|rrgPqd=}}nsm5fWADDIBfit?MZ@#bw zSU$ZTuGPyb8g%xx`|zs&DW`dtd!DL8emSjRgqjQ7+)llxsBqUF)e`4;y~hoqjD z$AC;gI}D2$n!{+r4=MN4kRV24W`~GQ`9Qf&1?;&qJ)@hz>ZquF^At3G$gLT*=?~r5 zVBY;N_TD-u>+W6qMjE6$B_yRgMM6+gk&tdKF1kUaM7kBEySqE3LAtw?knS#@b$S2x z-oN*G_MUlX-oM_NXU4hbc2v0d##-k(&*O6(UZ$=?)$$@cpcnbpgmTGxjmG4&x=+I* zQ4=SGuP^15F6V?hz=N3Y60t3f)vtD_}q zQsUGGOtq`3Kia?PfI1ZE2%NWQlB(BO7tOmG7*nG5S5L@qgIiGgRxa@J-sMEF=lzO$ znkC~%<;C|B$ne<&{?*ER&zt%%3HV?%9p@=Ebnp3}#*e9Na5xjNc<5#s7Mw;Y+5&?| zB%r^9_n`@8AHmGKtA{ctdz(|X9{kU<#2Wuc=k#C0{$_p0YlQRJ?z4^gN}sq zO5p|N<}HFT&zYqb3*mW(AYPLgqjQRAgls?ch~54#&CLgaH?0aRjPSrT0JCxX4RXEi z{xDbw#ce2e-&BXg16}$#qrARRLw^Lj536m}34xD{)dyTvMDF~m4wzJ<9UxuG_$b%? zO6=+ylZPOT1LGx$3jPzumn=+hfuNkKWk`iQ4X9|bw|@u0EB;`#D#%~lN-ZN_A_xXA z6!4_8JJc25E7irmU>7D{!3NL>n(D;lhhV0S-6f_#{rNddsZ}Ut5VD4q=n-)^7YkN@ z)3_W95;t6AI3v}p&tUee<55Ur-UA_K!0Z(?4n+89*^k!Bl5{i7uS)XlM{S7Ng+3*- zQTJ?@MFduFefqGyGx=AWXKx?1i1MC_l2A^7f2*yXeh_t)p>SnVN=yK1-cAp$H8YE7 z|7hROlqw)5)IN3+BEJuLO9vuzJnVo|=}cGT-zJhdGH4@r|{M5(2E~$S1q-vsQgbUe%u1J-1n*U+8I)AiHVGIV801BI_|o>w?|by3AXw^@N;A zDbf9|J85dk*8CQetUz&w;HTe7Ud%|~|4}!jnAkgIZJLn@J4%h#t-?Q*5T9FZ58;T` zsW=YZ)HL}+uDu*kSKVghs8HbwO%^{yL;vFM+G1sEO4Xq9Uf`=vq8H=tbuuhPGlZq zZjE5}cDOo>{3-BNsMz1MPw$PANQpFq0J@)8-n8kV9cysSoGeHS>h?;fao84?q>msU zrB}0o(`k0PPk^anc@fgneQdF-^p4u|`HX!4`Mx?&TDg-+15Tn~zN~#N<>x%DnU^!q z3f9C<^crf=Pmp|Eh?7L;lH-e>7xzSoYF)mfyd&1e`IS{Har- z+k=bBN>YqAs6ft3j8-0%i~(~-&T)u?qBtENhE1(2W2EumM3 zlAKC@b&TeQ9wupi)9#K+H#-h3|DnxKia4Fk)-+-vI06YHsx?Ux;C?P z&YvI?z!H%p2-k{*s%uEQN_O%J0ZPF4EN)h$upmv0Ccxhpya#25WcF_2S#alyJM0bX zc$Ua4?7EkC@8sDC#pTy>lWYo^Et4;h`{@?aX8htJPqVv+2uc%N%=3C=!4)Q}KM-Lk zfZ(5ep&YO{c(ka0UX43gNtiKbvUv%j+7Q7|QE}-v;=Dp7fnf5~w0%+L+~nYC#_rC8 z9>_pi2GMmDa8+Bf$*4Om=6xqMbYm+11>^S=?<+*(dvj7Yn+L}CMJjK&hL42ihWI}* z$V@u{A@8(!Y{qR=snAR@gI|I{-et=Wl;2!Q&01Ucf%XP#eX1COKi*b9c8T$WdlOEJ zPg6IcmupCDMB0Mi{6YGdweruD^KSJD=!lO(qMIeQwWQ#BJYgd$7W=_3LGvZf?88qH zRFHacb|8`F1PJ025t9>ynbSu6v_e;(19hZ1vLlqBA1(7``^!jS|-UoNm*4y-Aj}Df>%mchISP1Ysywy-{>N zCuSp5z6tC(r4(*ym;3wzcB^d)mmbTer#XR@;iNn=?F?b4?+KSRXU|sqo<^#kw3CRH zmAeHv#!r+i(tFOd%?dALmpZx@Ig}Caa}3-kqnu{WZG2q;x*>cq z-^z7SXNOrgy!qym>5mtL#pE}7`YjX5MHUM?!s-QwZ9LQrm`-C^`m+|F)fLre3fAI_ zMH9o{6O0s|eIGh8xw`}UuWwZHxh6QDz7A2E2qDAGZb#jHQ4^i?VJ`f9w;g>x}TPpr;)}~SZE`~41l27)dxOQ_h2|YP@)n@&^+DEbj!HPO`1*M5F z9q|b((q}^tl9}EB)r0^2SJ=KayU zRsv@&vYK7~;Nm8p7f7!79G?N5i8YaksM6_hY4F_&eu`j3aFHeM@6c7vn1?#l<-w<< zKIZBDF|1HCza60VHdFPh$(M&~$_zfXqVIVXLvn$!|G2%BU{9bMEpvxqHZ!!`6zNtO z2SXx0>qTl51ci-bHtCZ%>Sw`8%%<1v>==Gx;ePLBPbCCr%_Q~8$9V03b(Igs-*;14 zDe~@?^Q5!theZhi79objD&kK13GV{CbgbHMwe^Zc${U)trAM!j|xpLHy)ba zNuFZq*QWFPzPS@Xbf)(H!-28S4-C|TifF^J>Iqjd1$e1H%Eu`T{sV z>+()W<6nBCeO$D6Z4a?eRHVr!{6}kDeXQAvGKJ;lOL$X;QEUDrzyO>s^;LcqkHdjM za6nL}OE_H%NR6K;ALCS0riw{?K%3+xOi+jJVwY$S5)t3j)4Kx!T#{^VwLQ%KoDVjO zJIQ!3?v23QH|R$G<*y39A0az35&WKeXcOkFD?x9f&{y#Uu)&rG4{Y^&2vl0pjnX43 zsCltx>_*9yLHPh_aq+gw95hEQ0!SgRbwh!QSY{s>O#gIfR3hZ%`wSld$dJcKis9lL zA5sP#{pKWOD-PL8x#s@);&5o+0>P^MP)r|q#~du!H*&B3ogklTV-A6D9Ommq@X^!yRV2S%l268o*CCIQ#X zQ0P(mGej7^dk$2jg}@5_wI>*<>;SFVTbMSr!+~oS0wi|+h3{f?`q7AhLi_Q=XXKgx zKumPTA+%obCI`Pes=UBOyw?d48)(h?OIys#r!T~gDbG$W--b89FqHq}my@864L-j; zsczuPXz`Q(<}ZMMLLdtsZ(4I6j{o9K{+&bEvV*ZF9}ucO{v+`H-~aoT4#u8j4>kX9 z)W^Smo8AdyPkv$!?)(qz$yXSA62*T?`#-QJj9{7=D8O0t>VIHQU@O4u`N7ctfjvnE zj{@a#+yDLH|C^it|Mxq;rECHjEV@H%y*rV2o;S}cpz^w+VcnBsDai(#f6EE6s3}@+ z7-<%G*KxYFzz}&7WTnx*!2TuK`pSm$m<_eBT;~EW+RaJXF)+qX>=oqK>oL% z#ltongqgtnOm~0>N+jpm;fntA^GOv85SA4=d`wO5!|E|n?VVUYXOXUo>t@2HJ@;z~ zWb0XgsiF#)FqYOq{~rv>mkrIrG}^K#@pIHg;NE8e>#U*!HDy{6EHZam=;Qnw7~3|l z9|W*QQzxVjc6W8y07n>ToU@ET?)MMA&$*xnqA~=MJjSRX>qp!JJNy9eVPeaMsls6k zA(N%U&%JcbR-oP!_XOo-!i4cl*dnwg0}q5}4fIfWUsz)VV0WeD_Un3PCqtCx=J=xj zg{eHVZfAMNDJD;7&O{UqR$&&{S`#y*r@ak4t|cX!7*QXxwx&VLxCS)QrV({uO-$hN zOm;89c?Ob2X8hzGeu0C9I@nL-zY&e!1DVGZX#XeBH3|%Zb}=NU4h;R3{U_x^7-3{0 zb!r=+4A)vnT$jn?8I94p?88K;l5jY_CAM81uT70+NVS;m%~j?7MLHxOvt@%0xr{AI zs+9uuK|-*|ilB7BKPzirC|H%;z7~HF2Af^&4bWdxPQkkfd&tvI12HpGm{|Rvhud?* z!WCFVdb`ZGU24w$U!1#G1>GQlg9pp>g5l5Ai1aZ8@+5U@C5RN zzUjdbF=&GWTbB4KK_m|z^-9?4Ga^haMUXO6BiGVHW|{V0U0A%(@cQ3!82Fj z*gp9!S`SZ^puP~)j_0v#4S8QO`q_l`O*9R5Si7wV$hw0Q zGllp_t~U`Y*MI1MtO9kkj2}+06UG{o#j*yJ+x?2wRHioww%Lq2z%PcEZUhaawQHKC z5VGq}(ED5afHRM*yQLRRn;U2aW}U(kR={MTj6k(xLJ*_g;{cFas`1DAM#1zRamFJJ zWa?t=8dfHH|6KoaR0GCwrN!{cLKE`m>kBehNGA8-ALIka`k{Vv&|WPXBdLZTjShxO z%Tbsm3I5B}Dgpe6?Ul{}1~r{9K+TIKZEB{}V^_}WgB_bQ0hM)iP}er9_(~^wN@P;bpe{P z6a7XkSkjoW4kk?hy5d?6gcVazu7=M~^hHl8!ai9VuW!0}QskXymo%9wlAjlo1%wYNB ze#7jFmgGFPX3rPr1=0?+GQK=@$53 z5n5F+STgae((rdJSbnGaO@ZfB-JSgtD5ivnY!giKYbcariy}fP^G7o42Om6ElQJwn z>6^MpFS|3g=+P&+MuOp~;?KCJZogCBnWkAS`L1DS6^n$2XrfggQh}f96FyK) z7yP;XZZV`n&|UmwgtmgjSLVmC36^4S z5}r8>eiG)NSn&ky&Yv3SB2-z}*K;FYL>KzfRV-3o`}MEJB8|hs&2YYxm~|LGN!SBGGhV#9u9y=fxPLrD<)1b16?aKM%YGX4E9dza?CVun#y1gIX~Yplmz!VK z6Mph##aBpb77#rV1(sR}qwob8C>-jk)$)myxG44JeM(-C*5^E$)Lgfb7t~@p#&9>EkNN{5%nC^K=1Lc*vP< zBz-nt`L1d7MPC^$zNiOPJ3Ouiq+dPk9t9khUX_nZK6X157o&AT2itJnDnQ0clL8Ny zzgV~J_7u3~FN=x4B?EU@;*v_=A_a;rq%t9IKo4mj1IwuHmxnJ?Mu9(-c{j{C>O5yl zfNkaDJ{A4ViZ8F>QoZbb_{kMGkNJW{kpIh&*k{XuN>6Mgce?&IKS$OG1)4-8lO`JulBr47M2S&@H^ z?u(*fvG4$*5hi1TUv)=(s?11K*^8aniheK#r$`3W=}!&(!J+RkA;y;&q;^mZQGQZZ z(@8ZZtQtN~^~n@8+G7)GM=mODv>0;7w+^g8?CGa%76^UPXH%iRK+C$^?zHiARMCNW zQq5W0f53I1rtBp^e6r4s@H%6HAN$5-K!r4p-w1DKzdR1arn2eoMB!e9NfLMO0AYZa z!!I;@p*MMX+6#-OOwmjdHD@ z7#m70RMPTj9GF!ke8 zo;V4&{FCUn@iMWz^-6YlYG4hVG|`dJ*rn3EL4V>gtm8%hqmn@Z_g-8vmy59$5IjXg zp3dPSt{~B`JDUtqI-K<6;E?lCLmzD@ozdrqv;V+~9A4l4OkUUA>8a=k@3#sMDY+}Q zQ3v{A0UdsLg@9!!N3}(9W+>$)20^#|V!gc&^p4&OV&Xa=zIOom2ysfe))w^vEm>7d zHos3pS#6v>#M5+tmbKuzK^RK%1G?6Q+OcB?&$atumU!Vf@p|V~(wdhWXn{n@pmqLWt>}379(R>LjM108 z1`M~DCt3cIMzHxu*-OD+;m@e_r``6ng3YK)qOr00fQEx*9;_8+*EM;l5aBZJJEG%d zIhB#hqh9WmV$W}=g~g`78XpcS9X*%tyYUFeiYt{u4SG&oD_=2u`v&!#wwlL%Z^nwU z3}}xS=u!{TajLD^i&eI_kCkeT2MyGpT6zcCBMed-oW{~&-4{R`n8Q#E<%Eid|EexvAD2G8$ zi(;OYbD~Gf!f7;f-zc?IC}5uvHS{HZ_9ofM7tOlS2qZ+C@*KnrJTFC*KOA1ikLk5o zp2@lgPpdH%i_hr>p5Np@_2Qa+^}Hv7(h|+%hz6D$&rA{(iGOEcK+6*~28WB#4HG`e zRo5-D?%u%Cz_e#7SZM3(OM`?P+$>%QyG{~zyx6DyK!_PKYJ>OTr{0gwpKkE(@AHwg z897He620YO&HZYL0V}2E+)enNNpxnO=E=NFta$)`_L0UnHD1wT&XgS=@dI$g3@QwKz_@=x(pF2cOkBQn1_o7tgYscz!CrCA zl*oJ2{ZLy)6~scY9Jk368R@EdV2l*E5ib`jsr`G^XaD(34S1+xX~09}dIz+!hT-&1 zjayYtEB=ZGqh$u%Nc(7kX1~8kVaZyRspKWC*Cq8li?7E&#gXIfmgFUgGhU=7Gx(`N zzUCeFn9GHe@ft@XHZ5>X0QK>}FRkb5!9`}u6kOMl59r3PXAChIw0;>b7aea6BYeciAO164Z5c5PR^q%4r8j>l90zd?_J#Wc=;cpnFByDt^fZPc(-Kqz zC?Nt7V!`yT!o?5%I|8vL!4+>PS#M&L*z18~4ZJHe-mefG)-OI<1pEhZcTRdY#P-s+ zZI-s^mKTOquL7sObK{gY>7er$J89fymYP$<8a2po8QAvz4k^SxaZxMm{_;`v4QsT| z63>`LRY>rL2($^30wtGr^I?vC7xIOn+ICZ({1PXYk~VpcDASEV`^oGl?#^E%BLRcO z*OjOfK5XRI2Km9nGkOOtUtO3fV@HR;Sy0`}zScLyU=t~Nl`i(8v6#GtW631c%a&d< z(I~dU>h8GJB@HFna@}BN*qY_4Vv;dfS8CRbdo6T2LSUfUW9dS`8ncl!8*R5oamV%a z(>^h4u+&mJrOWha-WA0GjA7PJ#=*XC16s|4P@@!>vS;6}TEBReBCO6eq!UDB zSKQLr`^25Kx*)ek@cL5i+v5gCMk@FsFky_Q$elXite?9AZ{f-HV5cY#)_dUE8t!M?=vAp=XyuaWX0+iSStKgqwcTijNOat2$7}O%FIqia7jJ6PhnLnGJivI zI9(gR!_|q%fWf%WJ0YLCgzj3Z zkGcblKDRt@Q$S}-Ai>?|m4BVInZPWy;9^M%&V5Hq+l}WvF1w!KNTbCepeeV3EV~}~ zsoSH$a5_KLF+BICy5L4oWT4$ZFS#?&H{m;LQz1+8_;$UoOSX?kv=^e(sDVYp)|Ig5 zDY1xeLe*1LSSKf!oAn^+x{VsGD#(6#>Z*fX5J!jJ875!sCfbOY_|R^EH2(%Q>kp@f z(hhb0=O0N*h8``qTnp@B4%5-w%L0&=zg$T5_XfR~(e-uZ)2kseU-E z@n>}oDt$^ZYxFj55)%wPpFKsKZY335Y4N#y^X@m9MFjpwqIOpE1kayZ^i~#A?vI^c z-#iK|H{IYEST4RLNK87XU?5julRvZ1wZD-$K33wdDKL>W*$Z?bYh|ihu#EvT%apQl z!L(XV7tT;e=}QFr4XBe?QF(!`aRB62BrI*vo$5Z8HSJ7^qPwE=^f%eXjIpn%pJMAn z-^`1im@+wI!e$N+&&o0z&bMVkyZWx&v&3aVj?&?3Z;4lUM&%+%Ai~6XE&rgn4UU^31i29i!gi;R$njrb!p3>ZPJPMjm0{$Xs7{C#SroA zYo8&~#mF1%T5=smi|sLIKVQliaDtz~B-)Kjc)LrM>Ymo}Y>}Ls1?sP8R8N6xu%;Nh ztYyDuRZrMH`0TZ;Xvs(0oDx0F>w&<}YJ_zo-n6WB0XWRibQ3A9=^=9zt$UZk-|y;x;=pZa^A3vv|m!rD9V*vIYgsp43* zqNx=A1-AW*>VD?|4J7_V6EyX3%5K5Za=w5eF@@g|G((osPl)-{kEaTzD8^QT#QXZS zTq@PLC9MBpx#ZNtCm(lM(v7NvIY0X&JLXBEf?rAw3hpWP_4XtXVc|utZ zX;J+-lam!8tM;~i?j1I80R6oS$6t~9Sm$H4l7OP)k%$-vxp@|L#+GvYur5t z;j^YcoK3e-7P&X}ZF}R}-v{#EQzH5TaH2d$VS1^;gw(RWvmizzBGrbZh;FWAR(dDG zyh25nv7XnMu&%Xa6E&l8`v`N*!Yy%TEn-bQq|5)e8y-^>td~2^uB=!3maYhbU$}08 z-{5QQ*N&G2)6fQHbQ;jw^bo_dI?ln182}y4@}Hi&6>KpQg&1q-y+P{*aNTO z(U>bM)z+xRlkzXTb2(Es3KF{W_2fG0c&CmrSh3jau~`|b;v$abAEUvJ*iJi-?S1uy z-+N;CrLj9r@IfYANL7c7sHE0ny1`~ z$&-KIIw~P6ia&?azj{CF=b^jLUBwz6k>vJ=UoL4zHk}m42}qT7*jFG9IStKbw4NUJ{x1~T>=&SRy8>l@gjBr1cI0u<{);2NwJGIM`nsW zT+Fe>qL#wi9%*Y-L{?MB(hg7wdMM!p(^;mDhumypekQ@o15UC zMMR_!NXFm(ICyWdGg-hlCxzn#WHSEV^+7(*dAV?~y*0$XP12MAuV)t2KPD(S*<Yd`Hpbw*#;!cN7`7TMT8`qY@H0BL7IG7vE*j2bm^we#Q=Tr?^;O^cvYS zqweDqP!&(3YhnsGrom~?4r#Jl*pJo;FXVJU`Ez>y#=J1J^%y7*gEH%>jF(2SuXbj4 zxTFx9gAwXVzNqqCN@=-EnTHNn$Y~jEpz3#N9HZ>!s710v~AO_31O}{ zc5L`_P^elYS=R>FsAY%xwm(P{>t-9IJsueW_sH5@bIWd%W6uhMN=(#aI^xB{RV-Sf zQ|dtrZrwL5s#6$1LkEW}t5cK!C|-d;W)^RiBLoRXKk3}g2=P&c@!|cf(eLq1{Ry9$ zDSHX{C0Me<@TnV%ORk*#UCmGJ){^E&Ul)d84KJAvwCIgsvn{KO z)V=tnku%j*m8XBELGLab-8*=z>AI5kL%!n+-KZ9T(Ja_j#&aVypE@EBQBLNt3C5P| z+IJHw^Rn9e${IIs5nD++`{xIWL50RUE zYGy2tjtmI0a%;WKlU4~Tzfc@;6Z`r%fJ|*=vdGd@M-?eg3U~tTDabRnv~;Ya+4C?v zAR{zoLfJ2k){M=Jta#}#7|#WZSyO|78I54RCWX)ogy<1$=#W3r-Uyr)$RaY`aU5-$iQ61=3dwV~huKiVRhTsB_7y%-CRQ%RJ!l zOTZOTB1&x{qmI`5GUU3HmZQmN&j20(D#RVT7*4_^iSqt~0L*OZq_b6vrxqv6@0ruv z!<28?WHuhIXz~JQ2sYkWHmzPS&_?P36Bm_BOgv2Sbc<8Wn$fdltV~GEnt*@Td5Oxt zI4Z_~>v*0^ojDV7aEs{%Lg<*0fkA_+nqMf(h!HL4hC1`ndG1To{uN& z_>u2rtp>zroxqU$)ma8*j=v)026c6lO4{Po#};nWf;NXa({{i{0DC6#?3gBI>h*`j z6B<@TZIUis(APIqo%QTE5H7Vhb0r#UvDsWW5Kb^PpW*VW{{H9wu=54#M}r`ec~YD` zqq)pCYZ!^fqeQ-KBTJ8t!+3`Cae03>bfE~kc>1=%$wv<6yo4;-Q{@rzOV}Z0`~p2q zG6urBZ|p-YhOs}M4<{ugiQS*0eG7gO+uhC(%>Qxsf+jZ?uhvQ**j`yYLwWRVnRyR1 z`&7W7EB3RYli*(0#)Tsvn$s1U{-1BT{WdFG^LN_;UTyDR#mST9w(=iud}UD7*H|%u z8)S|r^KboN|2q}f($&j1r2N*P7x>1em``aO6RW=UJ-F#mAo=2Xne4#0!eX`?Ck2`b z4H(#K<~xfgH~TA+*d_5N8q{MqnYDw43E7b&US<>?H%GEZR&Qu8Ai%QH)``xA2*aU4Wr?>%|0uxt$rjHuG?Nb&HdEB zAKf@4D5xQk#a$$&U0-!`Aecjb^GKgk`#Gd<9s&^+)i0$v1+)HTjHn%w3xrU+@SCR* zY9UbnE75r&^q z6f&XF7BmfphNI^og6MIaS$jmd3&|Iwfer3PQnO^`29bM-36>(qHA(#LrJ=`F&Ij|> zgB`@%FqN|9sv8KC(nu80ST?nIWYx4^>+JfGMJgp^J&vD)^|(EdlQ+KnY5Z<=Y=T(i zg&oot@9P15$w#qR6I;Y1#zZJje{PnBz!<#quRH7+z7V3+tY%#;h}-X#{p}jx?**nl z!H=!8%mL+Y@vAFXIl5kc>kMhJZkAA4q{^1ZU-82qq8!=6fp-Bbz>0}>v4UG(bFmfE zJpK^vswsmC+8h7K>eOyji;t4mR^NS}?^HF@cy_I;Mb&RjBL}sA?i30hF86}yZofHH zSLT#uae7U37pAa3Td&i@U@|V_B7(OJu07>*rcO+iELI(>3zS{Pp%;QpqOBH9zFtt- z=Rp4&n+|`W6U91knxo$(REKpX-hPt7I-KnJ>P}5vGbgvI!_5`BHD6P59W(HvZMtI~ z?7#De7Qzixp~A`6e_v7NQ<%}Bc9qkk0aAraF!fJdE^mplpx6oeP+KKPq7-1KECQIi z+a>o-zF&o%8`nvGnyJ@ZY)RtEce>V3*{Hc!ibhAZqPRtFJ~lfV}|mRL>8S5ap^}>FJK%s1yblrsBPwN zGMkFXV_(%+$h)WH-R`2JRpUI;a@u6&=Y<u&7p!0$aF5R+^yOziSq220vt0kW{zW$Zp>M6v0LLTo)lg0Rbpg8VboQ{L6ytWMX z@K_lXWk_VthU~Y3#HZ<6f0tBqoyGf4LGnfTBb}{s^FIjoxXo-h;n@wgECX%8nZ>Im z2=uQme*v|VRf39m;_T$F>Io(JZ=#5bz~Hrn^fz6|;>+~nkD0yShwk&V@HciBUM|H#k!Iu>l*!T1iITSTpHoqX>ra=I-d4RKOPvooZT^68Uge zcaWk>3Kd0aQ7mwS7K%Nw4-5mo4zZkiw5;JP3DU5N^hbX8C)U%DkY^6|wKvBQtLY3A zIN)(bOA#5J__?&gJ^6!8h2>6z7JY4TGmWL%`Wr{}ABEp!A}-+#MsHJk)ZxTR%bHK* zctTZsao9^?m>)&UH!L!Sk7m?5elE$(RuQy09c|P$xcxXtN|C7vS+yPz zsp6TJ*PC+2U5c}jSEbJz=8}m#iJ3D*p>ukY>kf!$NeN{Ijw!zTA4k-Yaj3FO0k^lN`x^3$*U z^<$AVdVA9Xm8eR7eB?`BKOC4{`va%O8;3G#{VwO3gC_nVYF?+MeC4b~6}=bpI01c% zN!rVwFqIN71N7v6TihkcbM4Zj8o&S>I4yZ}B1DLMkp z$;h|d!3Zt$1MnsmOni;}$bvbEYkDqpqz4AQ79F9RZ>S~d^uHY~f@2Jh72xLhj=PvX zP-{t69NS6oe)$Z1lYyg~JKdvs=HXyY4xA)3pFvhFd((v*abAO8nQkMY)8f@Rm*uj(?+PFSa6jtD>Lq1N&t<1#!2qK9FuOpcbE`0xwQ=H-$HZS6R)KXKWWw zh{8px<0_NG&qz>WH| zsI3DxIaN??Y24Fg<8xS_zNK=qi9vqGawkyid9Y<~JWbgH*8Kn|)%8?dPlbX-h%iUR z8MNTJ;@;xxSL+#%<#@&}`U$F|!Ozu98$~=cq;|%)wU}|1zMfB;lGoN}`B?mGnsFeW zgY6YA0a9kWX+`g81(;k<-HYM)Sbq|ee<2^r-UxLn9+`57@ESi5y-816XV169ZlKw2 z`~nviXN26(8ZD?1XHxy;DEiKf%D&JeBaZ=-VObRH&IFn?S5b z(5gJ!_q!8Aw{l%B)oEbSNslBoK8v@Qy#1;%-rQdX&+0bYUPHM0X8^g(yuv{x&9%5< zv<~ymx5743gfy5ErMRqNjr<@61g|lXb_F7@a><8nh=N5j_!&37jQhU6BC(zv39pqk9>sn3CVM;+v>+-(Xx z8~)HDG_gosaOCj!IGDv*j)JI2G69>aTXY5C7JC1Aps{6r+I8R)e_R|@1n+%>_`cb3 zDJQpn8j42Q(H8uLUgz0*YtnfQ=Ud_j-)WNSCv{+xFCS?aL6+Y>PG0l;ym6~#c?#IW zsvG+7$A?djN`Ci`)=jbKKbZmT=Dw`O*9iBIV>PoPg@GRH5BVMr3=>) zwXZ_%V-RPIVFcS(_(3f?&6`x-I_@yFs8~Kr!Px=70ID7rNZRKqjIE+_W%yR#a$&^z zdd|d%6x9k3U6J_7S)euUbS)9<)yHGP1cHrHLXPjOwh@dePEqtoao96D5IU1`Xby{j zJGICiVkHI>4~C|aN_4K1WJOhOIJbkDiFV0c_5hE~Vm;jabAzZ2Y->7r$rPPT{R&6I zLEw0ua3V#@)dcgiVCWwpMz!~JP63u5Qu{3W$ueMis`8{tCwvFbRTmlm5yZ`NFDez5 z04BvIqyHpch*-j4=WOFCQ!`c97gNPW-b6*FXb-#TY@f!Tb3F= z;mLh62`+Yecc$)GqGDg&LhmzkK8JLlty=o=z6C-d^&e}buLqP*8-apsM~so(az8F- z;Sq1V4G^RyUZg{!bG1wVMJkGxEbRb2u65B4=Q0LcFeGKf;1USEx0f^-%=N@X$VO+| z`KQzzM(;XG9nNc~BZ@{~%m(L#;XFm~W6RXuFw_%XOzxzaT}oglzq11n5H-!3@h|-S zEQM2ib8YI;mLwGnZwG^2W|(s|8d7`i@7oZtO)LbUEfN!mRbBBkmqN+CSZ_grS#nr; zNm2bZoo#0D-hcr^5f4{5F|WfIDrt}_RAR|jRlQ-~X`D+{TcLn3VH5xCc3@b)>bylN zqa=`0Em~MV4RMHXHe=Vt_2dU*k#U3&Lp5c*9}=%6OwVo?IKb;E`A-!=XI_S&% z-vdPR26^wq0%BOZ)q#_1y6{Qg(-;q(Kx6#b{B|K|MfC(Yut$jTrYeGF?aI{(M)XEK zhH(t*h7vjOZZ`z<=j^LNt9;PJXn;tiSG)0uqE*AX&?VX0C)E{U=sW$no$^JRzjv)X z5Keio4H}Yf$8=)ooot><4=@p|ire|+NS-5WkoXysl7*Rz0Zn-VM)6Z`k9FD?32Yc@ z&bydfrjS<>IA}EZF6P{>-yCVb^nruStrqYnh>AX98tQJ z-c^hyHsMtrMOGQiV7fDBF0+I{qyTPNV>5JPfs=Y^%X4FG2J>EAqz6N6dMLTG)QAM7 zgQOD5<=AwIt-cyfxuDt z88QT2n(z6^DM%qQpxWlE81utI_ST5T6p_2~#q?E&N*I_4r7%t}8GrGo{6y{XvRAD; za!IK;+WpdShIm%p9avp`V>N!fPv4eGiu|Gc+84VFLSa?1eU`C}O8yAA?`S}6>6LJ% z6ug2$No_R8$>|Xk^XisAvRokWp~oMkPYvP`W!Z3Qa_1XhKbCxs!CA4Uo>%|u=#XF< zgwWmaLKQ>pt&rG=n)8lqB+?MVD@Aqxc{;gb;~Sb_hD9PEwuT` z^DVg}7h_bI8C}nW`0i(!hlP>L2Oi2?-A=RFOp)PEqMQIoof}+{-R6NX7Dh>mi+J%zN+KL3%cf%Es=XZKVad>1YG(6_#X_u+LWyj@u5wP8ok-0xk`?aOT-KkSzP|EO5iFTp(dmBBuP?L86DoOFf)6Xu$ZS zu+i|1TTmq(-Dm?$LhiW0uQmjN^tSB+Q-M%kEDW|A7r-(p3&sr$U{~-6x2+P@!wFz1 z0vQ$Z9;$7vzT4&g94_h^{{$H2vp?GF4@#-j5g1^t@`I4yobM7_i2oGc3;1;ijLF~5 z7I!&ogj@o;J0AcoD=ja*$?ZagHV#4X{T0IxgGNdmaaLyI#ky8IvJr zo?W->$? zYYwEQ37GTHG`n*Go+%yd=g*gd)7Dx6h-QZ2oN)Vxzj(syba=!gr9j98pirhj_QRLP zuK2x0pt6d89TNkHG%Pe1=5jdG_@NoLQ&9P&9oL*zWmnIFt`n1NnE% zcRW_Z`d@~i@r4@<#+8nYjX|&^FfJb(ZJAewDr@eaY5t4C_#031uisMh{Oh7`YWw5< z6G8TW{zV-yXli)5#rWT1iU4_001ckOEfN5O{`;5y&;M@&bVszjpBL=@{WrgS2Epy< z4~zJ}-~PY7eE;|2|9^V)MmwKNc$?wFl$4X8h{<43O#Ex~A`?MT02ar%`tkpF=~;@& z>N;&)#y$CH_zW-O;=pu^&!q25-v|O;{xhHIOP8tMT76n<5a;E(bH_8*8ZdCAX=U0On~nJD`L;M-~G7$rK2LX`UHR z{!dDh>E9{I^g_h(#f2fUGBwjK2UmXZDd1jbW9k#MRK~KD-4N@(Xgxf!5XzN;-=O(& z(V%p@EK4rNmY|-ORx66JLW-EHa9zmrEUKJHMT!~qHT{ii_eayv_$$|FYN!G6$;CE|7W0Yu`w-LLTisqY0u zx=zY9V8tr{kFNfjd<`$M?H;68{bl{_`0$(`NRBVg(pfkKbz;BJCc6@6BZE z!=l5D`VH0#O(gqYCP1L+iXV0)H53ryJzT4WbYyb^rKKd1sO zX~)Y~WyO8l1oLu%VBYYgPQD75pub3^=LtBs`6r+2wR!NF+^F&*$zXVwD9XFwXQUe5 zbl=h7gV&oPSZ3(LuW^5Pt(yHA&p{lM4C|Q6$R|K!>j(SWlGFFIA)vn42azES5hvhO z{G{6YPyTb3Yj74FhUq!Pebn@7ppI~NT!m$4%|Q(B=COY~RP&o;v7k1lffwpKZNEnM zJrve6eodC%j@V6d43arIXKn2^{+;Ni@oqtWm-LYV`Ak#A8F03&05yTK`3~p*qSqb( zg%~p-CTG|a$Uyrsh!Cj@iu-pd36H}Iqe6wJKY|%ISu}j}1^|BSe*!=MTLBN6zck>EX$C_yB?qli9`>^Pe+ar*<4pTm(*OAXx2VV@uKOlZX zKi&WZp&3wW2BW=4tw5{Qk};1gOVm zL9#6FDjHC=X#&PU7OW_d7I|H}P(&W3-5-rPvo`j-d2@}e{?jW3ne?hq+t8tvYvy*h z-k@W^sX+PL;|K)VxWnn{=&^iFY1wu&qmBnsie?cmVX$Q6tM(K>Z%J^N)=Obt-8SJa}d^I+2+l~Hb^2C*m(W&3!pJH zO2?F~o^JHdfxbjM zq#z6TlrmKx6AxOXXAYRvbhlfw^s1^wdK8{RLoL zGOhT}J^nlfyvU_f)9T#KQ)Fl1+iLqHkeK5E%SYRVw9YtR5FeJ#PTB1RMnKi52(^6jN+>H#eN@aNyJ8g3|J_OwxyZaCYmE$tJcI|v$Wh$~`aKMQ6FG>guq=Qeyfn#BXM2ul zn@~hxJ@EQ;^(1sbgwv5v%pdrv@cznR>;qb65=Dl1zs0aAG}cP&5ji6(U&VzX9pzrS zArG+?rC=I09^fD39p^;A27YF}Bk^FpJ;P$*A0@cgCa-0`3ky z)y|2^xeWD6R=8}MN;xYB`5}jrd}b@KrrV5Y9H5+jO6FV}?hkbJyv2f!({yl3Z$P<4 ztM}=E)uad%I)3D9|wDcWwdd*9F#Klf3%#1Xc}-*B_}+W1A~Ohy$dA9g8#c zabfMySM#8Ihec1~qck$B_!m7a=R0Uu=vch3R%G!EUT~}w2N`JjA8KErk8bh%esvM- zQyQv8Gi!4)3TY?}C}-=b(ElQwP{*@F*qNPD!{M?qsMZV&{?Opl5Jgr{QvK#FR%! z9#g~u7m1fI`VW?zYS_0pS~if8ou4+v_xSq*u`t=_&B1~O%;GhlocL{cYX7{LGJ-ccsp9VT#JFY{rMHs2S046as*370w!)4c@4}#@(4@t z9_7BBoG`?$VL|{8#yjcz6IClfP08k7hf!xuWy2;Cg-B#9Le2g;)N*f7 zzp3@3WAv{-9{ah}r7Vol4XbrL*lDN4WtOC#yWKRf%+;t{S3=sJUOa-`ie>3vnJQ#~ zdoCi2u85{IwId1%!^k`n%|S#Zt#D0D^c|FX>~WOcM&QydxFfJic_Y{T0Q&mPkvZzA zWEd2cH~4ov*|pI=IYJ2uFEeKqX`QuqqnfsXM_*x(&z4xG2XG5k1&HKcSc1zer8T+} znRA$Q$lPa;ImvJHN4X03A!WwYZrz9QZLTcvZdhd)o8uvA{lJhe_mMy^7^v@QXbQBI zKUX!i4C)s@W=JlPp?!tB;%1)P95)Z8Lk5ys+oDcS6GTsKpP?x+`bZ{R1D;0swjk0t zmIF%<&Mb=XMiT5;+AP;t7HMDMZr4#+uJcs%VM&hf@NEv>4AhumNWk+$Kg_*H^07!( z=}8kwc6pvWql?8;&k_!{3L82^&5QI@M_;Y}>txD~aQ40gVdZ`Zoa|xR2%!%ri+P6| zE5TH2y&ZWCM}~kSis&s!a>SP8pJKQ~_<_Q&GAA*sx1?7eDY$YTRj=qjtHu*WW_d}r z#S82J-j)-dr~1lX=1o4p^4wBC*+hu+4+Rju=w24n-`vj}reyJ)eis#9vl5#`_vR*+ zkI6YIZM;OWl`pB%n#$?6;Qq5|b-_*&2{Fd)Oq2v#G$-KxW(jJXtT}*+oZ{)$39E_XECLE@KU1`noW29?FJ%}12A(_r$%Fk=zcfg*; z{IvZyp*zkz({yxYIL=SY1QFL2A%pa{<|!e9sV~Hqq9t3-%w${iT3y6S7*Op4_6n8t zECk9>vC$a<`t(?)EqY3Y_5*kGV;F|gfFp-c?cEmdhVtfDOuNi64bmm`an1u7Xr#7d zMFrpZZU%<;uHJK>3=xi$R@hO_dy%A`>u7P_0*@Vh4qZJ_A2HBTxw1$J3X&@Q*(72f zw2|7JJjP?zJFa!5X)y3!+dt)gnL?X|Em=DxCl{FyVREc7cp zn=9Owwzcn?ymH6le0Vp$mVN>?%hXX_G*JF&yB4h7{; zFuXWdnp4OFrL=UYyMVfaGD{sF2U}iX@eDA0E)b!;ft8pW$ov!oXD`I0N%aU}F%USE z%_(M}Io)4Ff;>CqT<<~&{gz=IN)=7htqG?q(N4)~;}}h^dm1e!O^52d z3ux+zrGUxOil+D4sj5eMhMRI-C&kyNYW^&rD2RQ1-Qy_lJxMqG%`6ftiO^EEOrFY<9R>&*^i&OU0}!f2&zM zgL*BV=W9g3(&5$|l*>Z)t9-V`752!t?Ij+J9MXmt2Bfq$kzch3W^LJj^e8ZTDbb?0 zTO=D~Gf^_lbiP`1-dJO_+?#l^`A!vw*6;%h`D}yt@+VK3dCl0Nc9z&JDVk_U^wOG= z9G>iSv(;QFenO|ee0|WEN7YNM9QQF=RdG5kf_qo(yITm#EsdmI8mBgf0So+X<{)x4 zmL(3@(LE4LS#rvkhZBd6!407&vduXHR2!c1pxYZX4P&kgFHfuZ2>*apY7=kdnCc(+WG!bVVwHJdq{Q`1>C0fq@#lOd^Y1oBaCo3GJcQ+S(c$vhpZ3xaT-t;#XqALu<-QGADtNV0vq5Wyg-d`Gnh*j6^vRxn+j?=pGKk$(u90yT& z*R{OUv2=3?yarC7q~#WmNO__jHY#nqom~v^usnJre7^~Eh9(l7e+`Bv{<+Zl&!5<~rCe$71x!rt5=@lga@N+&SY`jDr=iIl?3{BM$Xi&jgcDzv__tD+b zOluUj@-qCez!j0tY2800r?=Zt?Kzc%vLzKZ{#mq?TRk5o%!BUg2k-V?>TVCS3rBsH zwBhqDYGYMGMy39Rz=aWwNLuhLp!Ewq;~hrw50A8Zyc3NSYcz@h<w@i@>N>}f4B6+1jN`gOqn|Hgs{)aGDMFZ<5?(ZJZH$(_ig%>yR&^szTsYw^l0 zhtJb1H#Z$3UaA7SRE;2l)o;#Mg2vJd99TQvijliEDvD+Hww(`pYxhkfzO}zXvZ;&4 zo@U$MFDY_M)lMN3aLWnHDBo?MjRrb@W|1a0JutuOOsfW-d0%Y=Bx@c(G`F|CKPQ%Z z?5$q$i9DJ-7ELl9+>Ni~PH;}FebAu4^!cI_vV4oX4oFZrIYlbfZv%06w6_RYE9b7&I^zRI5{5(vjogK`H zHm4?wDua(aw>&!T4SBCdb&v+a^BuTcsY9_CDn!Ydep_0`1^MI%`@C9X;~8dk3SO|R zT*9Cs4m7t;;P2!@(m_M!W`e;mgD`(FR?ED;3?KFaw`Q+g7IZkk0MfVGA`n3GLvjaz++$ zS$5$S*vwRGAHXe|@-|jWUedz7fKj-6?A~?dMpFlvJ}ylza2PPQWs`h6Z`}M&Sh*Hs zN=l@+*O4>pTB*{8lDw$P@n^it2GN9af9%$SHEu^)!mVAX*A^I@TLJjMYG*tv#pX2p zH6VdSNr*pVSc6YPat00J=9`IYiEuv^Qy0 z()KFyW$vx*YqoNo4_7?+Ay|8Ur3^p6Kf~VHg1G@&b*Q{I>_aLJC4QEvCNx2W_!$Kw z+zl2QZ~VBZ%4S@k{N`Yw!b#PxjFDI!;D~m#aZaLs*6S`$`mz&c!(MrlFIHBjbHZ1f zK3#7W-=Lb9QjQoAIxNHhV3=OqlQby7G?dp_Q%dwc0-b})xA3J=wSMs&L`r92QY7)$ z6;W`0SIi_jNPZdbQ?hIILhC0yr-2m3Yv>a8ky>NhW#>zS%_tt&!8$C zZL*T&eZP?Rl(L;4G_EfSR($rd!CLFLmHX>ExOpsXLdibhf>R(&Gwwv#Hu_v$-@kgwK}7 z{gEhqgBR|rj2~PXuZiaO$Pk$p2XeoIi6x3W+db8Qf_6?3Sp*lPwp-9D9a=Sh$kR#E zDVh|$Q1t*{YaB4GWaUGA5psVCt*liE0B8yN^QO4fUf*<9feQ?*)cxdl7`kXK=eF(X z88xPBqOR}Z+)AsO;%mcJ!S-H;xuZz5)?%;^O;yroP)yv8D%=1uL#(?(Sbw>fxUXZR zDc($0q(XFmR!}c1z~xzZc_O!7h42KsErilJ`smBwKR>|=icTG`Q;ZO4@9ubnY;zszWKP;Dia?H#_ z^$s9kWPeWKup$$ngMFxUFn3~?E$ExqfLcEY5DiueP}l2@GKsk2xEe3fsN`0+YSLd) z8<>3ZN7;-!$gXjtP}(p-KlVL_gNpd2V^9^0XckCcP226Lc zx{CaI$1{W_Ko7<`nFl}^-)M$yya5ASPuTbk$0S#4UjxfYs9tVCwPt)|0)1zaR69QI zN_!FR;U#;+IM1m73I@}lbDv`&aK=mw(+b6YRu~TFB-c)taelD%&j-UfFCpAEENtmXzr_4jT2D9iXqRBRSkrs`Ya zrb5KHa(^pG^*n-GoGS0FUa$Hr@Qcgpe$3E+sWd>ct!HUsu=<@XSH`NG%}!_a{xiD9 zeG^i6{cxsPeET@NZ6YOCB7OrZG`y~eH`}66+dkQPauF!2y)$WV^nz~`&=!%foX;f* zj(d?QF?2o&c~~*26&BfE`ZWu`ndFE*!a|w@Aa%cmz(sjBBoZOaZiu(&gEMOI`;ZCO zqYht*q7E zEj;Ru4-c(cYn??9Nckmcwq>kOnS` z%oL_T$X@b-tt+$F?;ge0&{u40wD$^KRno|Nhc9+AWnx}Z;nA zZ=(_FIP;m`vrcb!7NPN}`n^t34WqXm-u$G`cX-V!hruh*Yr)i5m`EcO*mj6ok~R;{D}w0=@u9X43g)MBG(w_O z@ayAK*R@YAczK^M3U$>|%{hX=c}3IY@>B2_&fTudmu)0p-uB#qa+QZM{yK8C4tRtL z;^({u;cL>&FEWx>n>9ZzTg9`_TGy}=cFJkz47HpXPQ+6Z_twT1%uI@$REqGf_OGFd zZ~4?`8QnMdt}WELHREA@K9bK{wH}{r;_y<*+C-NB><5IlNZ!gB>H$y|?`ACzg30dr zJus_wk+iV86cNj|>*CSn<#`e*2-BiL6uGJ_iXK64$Wb=j(tUx!mR1sZO>&9Se~UUO z0qyfN@T~i&z0Vmba8jeP27GJA7=XgdpMuqc!8$jwDk@i;QaNcPrVBox?<4yb=A$`>@6J z_D;xx6+s}+;uG8}J+Abm87KTjh4VfxhZ?gk@JJ3axve|YYjBG(p8%lzyd?bXV3QP>H4vzTg^}QRvV}i08>MujNbVzxU>QXfP>A+_Ep~`z{X#XT>@KmMAvS${s96nd}coVKQ{D zUZV`wL+|pq1wiE>%;0Y;Z5Yl@hme8D7o=w$)+*{7Wvab3(eF-)_;uRzthnmo^%!$W zl(usBsO1@KPfFG+xazI5Swyl-dAm3?-a`t^FIIF#B3;<{V69Iqqt->O>JHBDoNU`*m$JYHK{`<85dvgIxWS3Ij z?>PbtqsJn?#>hvrg$vEI_6@YXAC-*z6n-lnDQUZ@^QEgRejWK(KE~vu&il=T_93(= zk~e<=4~_44U3_HP+NJ4p+OX{&*zTW_j z0?Og-9rn*9Us^!k_ys9Hv7>&HDc(H}M@+krG~i?RV*_<_M|0v_YeVKi@^|QTk&^rv zkYEu&;U@lTmq|VL%&tUzH`1{7_G2!*{J=lZbdc?Jtb|405+Cq{S^m1$y_qP|N1Jg$ zoa4u>;MQ>@U@zWm51@^ax>pOl6A5WdF8yZ$g-q<23m3qs3jHHfaT>c+v4qn?2*B-4 zuVPh*qCXy)n?ThsYtD(|`#YX_sSpe$ajZtYKuv9iiIw5N+TX3a)v?~9D)(lFL@Lt@ z777CwYcF^GQsb_I)!EF7R~lzYI!6;(0_v^JI9tZG>J1Bg?Cn%37diaAbd6c}c@gZD ztqOg-))St-!Fm<{BulNyMVPQN0|nN+v;qtg?$l0T_loE}UB`;AaGQ**gEo$%c+J!| zOvG@bk4>x(nzvmkvlrhaC_`II76sw)oMB5yI4GuXi2s`McwvR|Gx=AG;u7(~+e4>W56r60^k} zrRASmPD6yN+|~kH>+e6CMfvsto9UP(U&-W(tCBQ2RW7fgd!;$^7`<_xq=dmu^W z6WFCkah*65nk2#qDK8cGHm5%`OM;FtB1Cx`k9eB-EqO@!>nvx z6H1To=&co!VB z!I2;*U?&ScmHJ-E44Zd228mb;J9emm(CV8ICK@_|qWwnX%4g6XRjCAK9?gEc(dqE} zbt3h!uZ;thuzL8;wC&x1h!T*K9aaq z3gv8@g#=2PXeO;@F|mlRvkkmLDgfo8ZNzSCh2Jr))2OH7?m63DHolT zMc*1|xzl`;CJ&`x=Kd1XerUZT`Vd4aR92z{q|I3nCC**v< z)1qtn+hQULv#3?(rT1uwP^ZgZ0Id72*|u{d!-xre0{LM)#bw{iJY{%DPYAQMB7XVL zCqy-U1sd-DHp~;N%9zlL?DeQeLMO^hUd<0EP`0M^g&vFpI?CVeO((wAU-oZ>0gsh; z_w%PL?EZ?^!e4(IC7Dz*(9aw~;KbWQ(Js>n8p3Z4W`)#8?#$H{!`!In|(|7cv zlG?Abl3X-G6Zc+46TO?piWMJBKvk=r4L(Oq9$rA2_EkHs&p$jbMRh=8d;o!xjH@=HC*HJ30^6qWK@g*p|B3WpP79NJ zZ4s)7_%1?^w&Hygs<~IZ1cjyD*=3p-EBNrM1AbDbW%7*cNOUxL*oMG^cL22ZU5Lwd z!8RR6stPkruT=Nx@LLTbB!gaAS;#?1Q`pCbFaagRCqx zRtMLm47HI-609R~gBof>;vRU~$jQ$8^5sj!Dz75J{y>jdBDp;afB-b^(mzLiG-c^5 zAPQP1e=-kM&U}@yt*c;yw7~bnO^H4CPxdQURe{U(2S5bClXeWEd`_hn`dtbc_2UqF zY%$wxLWm%`IEHZu0CdYk$?Bq>(uO6y46c-bHKpTTP7hG|)ggLs_Syu3^akk%#UnNj zNMV7qrdDqOhOa>?if^eq+E6;Pj&xKk&pII%1SWxc?382YF_dW@GNtUTw zMe`AYaK*|cZc##Ay&@!r#aJrUMHj#Ez18y_pfm)W-&<>if@ul8G(dT@2fFE#B2N4i z8$IR&9dVUrzY6W82p30jk(`4pzGExO<|a(Gi#gF!5Mp7B_9`9L!j#F;`9?&!eoL>V zwb@Zx_d(Y{6eiY?&d?Eio~WlDShEK#{9UX!YdMQ5=I=hwID^%}u3`H+){QsY{d=T~ z%mibOI;u_v_fDj}>CU_QVXQTk<|@e_PL%o^k!|FkOZ~p&xEZ;QZ(pPKb15ai(c02( z^Wv@>E4Mbfi{K8LR$_d^z+cp;eHe^ZY1wXdzBQU(7T((A{8FsF>g4lA@2@Lq3&OX8 za}^^K8O;VYxfAp~P}7(vhe@!2(EJ24F8))?gfu!Tsd~^}`5d~^jK>AlAr*A}=nwP> zeLBN=l!=2+#U(8cQ1Emc5QD@m7&g3xf?EszXsfaQ4#&y3_V|=8;T!CeZ&IOI<}rTQ5{A@(C8W#z;naUloH zm%orQ6jYb_Ayt5%&(XM!Km7I;0g})(2`-<7GxKJS(KN@aVBnM4Fxz3=_ij>{HH>PMe4b<#PBtYZeU*(qu5I!kCVZ8Ex{xl55n-adci{ZIqio%=Lhh*!7gQy;mDV*?A z+Q%E14G8|;1!oQeS9(tcc2prtarE^6{0uvLJ2qVQBA>(eJPz4#y<;21Nuf>1Dc#Gi zL=X~Cbi5@7yS6ZtSq!)v9BKXv#CVneJ}Gv%x?GQ)z?p2Ry35{i=>l*oW^;ER1bHDO zx%$Fjqcl>M1*itkfI0XxSwj`rol4q+j+c&oGpm!_e;>vh1zxzJ4D=Y`OT<#&N}A#b z0WfqBrsIfDn$hM2iWTUu;Qu_OD@lMYUO6znOGUwkT|9VnyV{6gd#$(I-iYU|)btv( z)Z+k7X24cAfNQF4t)B+_#qVt>n)N`<@{XStK11Qjux4dnj#})Zz4VB1-3JAG#ILUsz5( zTpzLO19C1mU}4PFv9R&N9yJvnJg;4F3Ulx(0%$DV5Zc_u{xdvam-p{+!7ssHr84bz zmvM$A=W=g9n~i^m(Et8Ba5S2nu$j~#sIKvUT-d({_|MTw`2Yf?*B)Rf^goaOKTkD_ z4tAUSb7pMpuCIF0+i{N?}sL*6tDpWoZD{QubFV3pX8|1U3q|MNxt|N7DV zzx6mWtIP&%9sl`qwy946bPx-OwnI!k06k@eu>@~3Hd-IAmj^-AAuZTdvU7us9*-$G zqFDO(Ces~Ez;f#KATW9v1QvQsYautLXCRZ_cpSLjTLEza0U#>lfryrKbykiaAh(_U zvuf6~eo`Od*egOn?uQg?b1Af@=vBq!@Vj4ag`Vj+}}TR?ihRf>26`H?_m)?y$5%YZA3G zRIVpDOeApE8>wVri+JIw*ba8btYstP?_l@$T@OVwp}OKjb_Q66^6+pnZQmJvoQu0K z2sZ~N@*X49F-#>MM}W?5=v+4_%`gv)$}L3;BT;mpf&-SrbQy?o3RJF%@fV!kQR6B9 z9C8&l!*?uyYGMS3M8JlEEMS=j zPUtPb22E+zPvWMcz-dE%9FRW7-G^VCPlkBxO?~=z7JUf=P^t#g%KkZ}veb_fiN~^@ zZ|`9dYoJVXBkl$6G8Q}^Fl2X2dEgKG^<2r{C7|F(O3t^{WNLF0{X3sOf!8gxmiTAl z_NIpa3&N3Tn#=&6MjLtw?p6+5O*wnN=f8LL??N-qaQ*K+8qk~q@u0$f7tpuJ{oa*A zERTEg;I3yJz5VY3`0vb{rFMw$@2YSrf#@HB)gir#V?kLRgkJyqzZVP15-Q1TwVdfx z_R?XnI5UE%(${ZcRCpQ`__`i=^tV9!Y0d^#`kx}}j$K3a=V7D+01F~FgGp!M5C%cZ zDhU16g$r)&LAa=<#9I)W`l^`LidW_55T^6syh@6uB65Y{2{%M+3{vrd;SHh?zl|z>^)?go#ZFtVj63& zd2n? zq>7)li~gjR;bM^TF|`855Kjj39bMDWKrCJ)0E@&V?|omVLJ&GKqdRhJ1$a`QHHM3J zu_u=_KLxsyx9NI30ukhXE8NNGp|mhj8aXPfL?499_63-~c?)YsXg3lHo`Zeikk_a; zWL7S8me^AF(`$h9LK@G7i>M9$!9)a8Qz;F5!8}WjLCn>IQh1+YQ;GFNXA}%^C>ItqM38cM9+o(%-Y^;iU zZYj2zeM9y^5WD69K*^Je_JGdB_j5E&JKhKGyL0TbK8ACpIb^hv?KNDG+x(PxcKMR5$e7Nh+j=buE zWfqfIGyQOB3+{FRy~#27^G^+%f*ix;Q){{^G=YWNfW!OJ&D0|CuKtL=J8e9t;d;&Hi z??>>KB4DfrRT|EQJy?@+5)A1d0Iy51b>6of_j2Qfz>?xa*^fu9E;u1o@D6b(QaH zR-prP++TwVO+$zwM8VjMU0*KG!h*P-)EZG2d-)LKofwCQk5O?{0Rk%DZ7)`6@{)Ov z_x;7Ezm=)zHJ@Jp320TaEOA*dZHvJm!L>NN*Jk}?w=Npe*Ayfc#WT?LaC#WWT8)yG ziMCM0x^xW^3&jcow6wc@;TEU=CKa? zC$7{5lhxt!X4%M9t-jvLGR=@oR%Ut~(k0R-xDN1IH@lJ-X9-r9D!0I_OQz^?yOJhW zWLt}#E?XUos4cA>CE?Yb%ym`_=4Y`PV@_geD(C@`Z=}Kkn=} zmWFa{@qwZ^6FUej!Sl!8KPP`9D#sZPb6r3hpnND`Zm1XNhO;=$J1s?Ym{RT=jqTl^ z!pRK2zbm=NtuC$6jlY`g-tFEoE=^Gp$Di7dmiDQMZH8V{`YGxW&j?n}_em`0$Pv?L zw3Q$82EhNQ6#vt7^`Y6L;^F}ud^$0=*(S47nZ7M&4B~MMlBVA7S7HqkVU}^-a zN_A~=^$}BhYPn*claa2KDI$=-mJ`;6kYjQ3Bp^Su)&NmNYvdOwh%t|Z%4**-&fP?< zoM9fJGrw*#MDJ%2+&_{5)0M6R?bx#*;8_+Ai#%-h8+ZiX3M8RS3t-!9eajq^evX|w zg>O~*dzL`Jv}nZB!3$BK!Xg{RcE;nKHYT;NfvHbM@;)9*`2s;JxyJxbehw#r6i;qc zItsdrHMI+Lt*&gB=P$6##&J+dA7+5k7`Zgf_5DG4VCzxjXpj1hf)%OE&*SkU92u=G z%}qhg8{r#}z4W5c5?xC3JRgK*e%-b#hu3w10VGf#j!AguvE;rfUv7r|hT39=n46oSlGtm*Oi!makT1qe|<#qBa%6Uj5wY_mskAH-g9u zr^-5csDkAexpHCD(XF?gpNhSep&Hx6T~N>&&}m>p&lUx1`;FzeEi6OLq2fCd+M^rb zh+rOV_b|)@6qlOLnxS*wa^nlwQ=l@FkToa$VLKAXLh^7Nqwh%8u9D^%?5FZCu~ZN1 z;)R;@8OE^lx1vRKL`W4yg53z-+Do$`S4{k|i^l*8?V49jUvYYFFvzmPsvV6LfDd7KBrciaTF< z4SrDl6kkh`QQjzjcUJASsP3Gh_Kjya6z9MaK~+N`Ycn53b<7YUQ2LvNY+eHxrN=M* z&NaVO@jDZbQn>uCy`Y!4?#3)y9Yv*ToCsSr7NKya8BFPNqQ*=R{E0;-z}6`BGwuOM zk)s6A4?FXA7>IVNnJ^_3A-iW(j$WXcN7TgfNHKAUDOYQjodm8;j-|&+{cmx~$Zv~r zoEi4EwQiF0&g(j!JgBlftA@$rtQ(?2FvZx8w~>R~K|@T)FK0XEl|#kXMA|I0tm1j^ z4l2zDGO<8!Dv4K+dTDZ;5Tz2DuNY-?rRYmna$lkqMeZZiuxmi<&IKmFGIXeJMzMa; zrUI|DH5ti)zgS6N@lL8hDnr4PQSE~bvQyden(g1Iq)_}Gb+YrAeO6yR)2K6~40=8F zM;4NjYNlu)OPCme&RBlo1fA0UC(Rz38j3%q?t3Y86iGMHaATX>*?&sG^Ow1m7ZAKj zFdgnZ!PIj#$v*1W9G-o^J?2i#Tly8q_=6k?m3%ZaaiIT!@Fa`w6+M#g%dun3od&Qv z3u+UllkeC14=?)+Jt!u~D2n9&;Sh;V-NT<`^$qS+NGmn<^3u)~{}%TWE1&JU1B<0b z`JBWBB-A}Tt@#?TD3@%Q2H8~X*dXWrM@bR=DW}Gju?A=NwV)jAcEwM75K`LnC%e;q zj%C{A5<`M23F|1X2i36*w)~k$)9UBLgu6Q#;n85zzh;7ZQ!tUqcD39lf;>B+W$~-Q6;!I2sn0$`*5`l2*UH1x3YwNkmxNYv>6Xb}UyiBf46JkUr+(JI6`Q=~xz2 z!w^miHcxXp0S}+?^R-&m@2ZsDpg~RJA0E3^k81r3UB2PMLwoEbBNGA`{b zwAgB$lhPR7a6#X|j1ouj;9=clda%*hy%lJ7`JY$7QMso8;JW?OnZ5S5cx&Y6B_w6$ zVE?FHZ0Oyo4$39#{76&&g=5a2tqizqfj|2W?tV~+)Ls|t?-nLCNAj=0z)zZuqqG6i z@G3GzRi&vbB#s{Bc$}P~rR)@O^-~p^U?J8~#90K&0qv{e6#19IWlL6yI+iU)6h6n} zxJRYdZ*-haxwlk=vJ{h&9)y$xi}qeEe|kK$hl6~**G{pOZ?kYVtD*Hx4-se43$ZYV zbIB{oKTgY3<7#wVe%m)Jw-S>z#`&$OdYs`oF_j)^XE}!TK)Wo)(v!2a(vj|Wx`{>h z)!a`VkrhdAaWlWhv(>+yQlOU08W>>3{dZw@W;^G}rfMowAiG{hKb{b>9I_5u=WY(<2?`=Pca6%18uC_&m>a*F_M;5uLfQntZy_6GE9jRms+ix zHfwBKsi&$|*h_c5A`NAbx)aihBNHt9Jq;G;sm**v)iDzUmf!$-cwwM-alTLdc&ca` z5r&_Fc@)%xgcn--l*&)2%Zal%0aEK(GT|6MjB+Uv^Sg&o+jMk!2=DT4J259EoiEX) z)n^!#LscSA53>gr1$p3=kq-fCN;Jyi2peL*eL;G?A`#DlNf=<;Iz~j&Zy>| z%hOs^Iue9-gUxPd=lX8o#pTwEIYj4tvln$kHB`#k>x*$;t=?nY5>zDNwc3J<07(Fm zqb=3WG@(EZuQh;m1vp`*G=Dg-pe+rk*JdWO$8C!lB}wL4VCm`x?HqMQN44$C_P%Dq zC1plO2Xnu3aky|6$fIvf3|=|qL+Rn!cXim?8G@fgmd%TYLBH{&9gF44dhZo+Ir_h) zNKPY+7qU^_C?d#5_(b5G2}PW_&hR!BO$6W>GTFAttmxa23He`<%G zJROLA_|D#5bC8j##}-{wu8eEIlv$O%|w=6d4k!cKC!m$znLJ9D^%2HXGIEU z^_;7RV=gD5#CK^(=IfL)hPy+IXzb)z@6mt=s@j zCIU&~I^FEVipBy!n=`pmPh$OL^}y0^V)J3pipuKD8}uOO}XDE=<@RZ{`p*p zngyM})Q)Yy2fkr=jb#4Q@T!XSy!6swY>?{T=RkY16<9+@Z~KJ^d;Xoa))^RvEbDeP zhOLnvA2W*fO}7w*5BH^i4t=h#8@*qv{kjfW{&U-dS`|P%$^=l5M_J7P|qo{a=ZEAxw=<>Y*~>v zVma6Kau6)R@sR3T1 zTJRF<$tZQ{Po=^SKiytGWdC7W=wdgu;f>NQ5K1(8->8W$6D+z@c$$#BoIDsQmi4!tA3kelw17gcicN$Ku& z5Zs?#0|A27g~Q+39)dI94*w)@=Y2`itY)!DD>=&U)g62)BT3q(KY6+YY0OU$Bn~?A z_alAkD^y=PAX1=^sZq_7?cvE;cPI>KIkr^`;NS+0P~%eivHwsT$E!(Rb6 zix+0ofvuiBLHMPnneLdoaN?2J;R3YDri?`sPp!@eX{j`}(6R{6p{wpG0G6Rd|J`%> zy+$cj&apTev$%4r0yl3uV|X?mK;Fd7iA7p2)R^hf63{o{RcHZ~tvwtZzIJsTyDHbn z7S9`$fSABF$+ZGiBujZ|A0##77;-_cejk|seFY7wztG!$iYM1{fcO`f8JIvt{8)mg z=bAuhYu?b{Fh?6F7)IGsQJ(E|*1=ynlWwmu$J{AUB;Qc8E^g9ug#J^)2mH?7vj?^j zY?nzH;4y7?r6BjW3RT~bI#+DdlN)3poqrc3O#c$%LXTv$!;{{hD{@$0+}1GQ2G(o+ zdA4t`9i8X|#3Ml2*5N%4<#gQ7B9S>SGhjMu3wZ>)xvE!yAR*JiwLw~|Cl1@++b>uu?`QpoSL?s52wf)hb+?j zC}*cC%VlqlioyISz*m`g+oMMDf?^S8p8j3W%5;KHqeeYaBtAJyM39JjR@LB?E0It4`r`uBes8tS#0xTarhDh>tzbP^1 z%yL5*-dwtN95FDcW>SF^oe!@f5#k#Fo+{lliKDv$EC=Cb3KWaW%zcKie0_V_rcq0B zrFfK5T+-mQ_3q0&g{_qbr?S+bcg=HrxN0+ zlz;km^f<%oDB}>zw0pP^$IK-FsR#q{X8;~q$jo7~_`#fEMo~*26DTFRH=-w)i9h?M zgnYp6`(e{28vO=`s3R08MyOn6;`$}UzIm~?k8?~pTYP+$Z1s%`QW}^TP;~G4c((dZP8fOg+i7JTBA=(yW)OA=Z4$523QCjo8V_R_0wKu3#Gi0Vtx z!?p;_45Z2MH1THUy1o5tjg67*(pY#C?biU4yq}WTma838iH<85L<^HG6=_?}U4aB5 z0^pJB;;-9v;7wCH*lP#jnJiVIrp7e=zu0^0x2(Q44^-)X2{1C8WE%yUyBv=bdZbnK{?_1J3-aJbUl8_Py6y_kDjtF$X}>;5r{o zBOt~8%7etZLO{RjWz#1nl)yemqfWq(NRAjFQXFjB>9L^G&ip-K@%x<Z7=oA*l3hz38aR{A@Jzas5?s$MlU6!-GW^IkNqGZ#~}dY$E#G3$m)9=vfLSRgH2 za^Qop4gLa2qb>NgPpo2o`V+Gh0QFJ@Vm9%D)BCBN$?IA0|xcEyN?!vU;;XNd`t#q@_+^2z40kI8;)(zR~<<J&i_ zC+4Job)Xrb1N@7^j_8xyDwaZ+NoqfZJWS7Pwffaf|NZ@7ic~_4gx-OuA;#;U5L1?& z)mkCS&BGCPt;jFNas=RVL-kC~dJgfR0&S@OAo*Ibq7#BhgASV>k=gIJR)1Gvad=8g z(44VeTRFgT1KM6;E>8Dquk zjHRf0XLb@@RQ^a5$HX`;!!yX}y6=`tsg$TnYuXU`;*qh&(I(p$R(cvGrKp6vgfaAMNUVRBuI6OmjfV<1q*1%_LiAe zrx5Cxu%AKbg4k1#kPnnmb$on86ulMjH|{rlCSzA6V4rb;Vwidc%9*$pVm2ptE|zN% zKoX$Me{j12%4mvxNqkD@vUSKY4;a2}^}$IaK>ao8uyHw9@3%zHgMuEnjc$h2zPdxZ z8M{tmCz`kORUCVM0Tf8MlV^-&pbT7n?zRMCivWDQ*(n+0^;TF9q9K4oQI!U~-Ofv# zydIZNU-G$xwc#s}Uj7tEID+t4x+~@cus--isc@2a?tHU=BJt8xS|BoA`u#_iGye=6 z0{UXSG_RLrcK+u<@JmzNijYvHx-6JCZ7jeNI0TF)uBDC7uP_yMk(`u^H{Jq4GafGa zY(Gj%{v5n5WukHXEshK6VN^v$-hh430FB%ucZW%h0|8(n60(5bZ*QEYt#}?z6Yr*d z?+yF$37AiN|6qE9IRRKc^+fW#1xUN`=UrMvKgzwO3^q(j;Uv$?RaFuCbhG)dvrF{z z_d$2k5TaJ#fa3?#7j;9_Rt3JTu<%@oIcE7sh^-n~0RO;g{OFQB>ELZW=(VG;qdR~a zczxa6v|EyV1DlccS#zoEb~+BN6cMS4%xaKlH=yB;qI?YJAUhal`Zdm~?{aPZJOwmO z;h35ExED=I zm01~~uuqrD-i(Q}lduU3{*Ix0|F&i`S8IJ6Zh8{89W5MKw#l3A9_02pG4Cz5$7#IR@wO&=R$Ow@J& zS?@h4C3kG=D3k!MDTknn9*9F;VLLpBTD)Efbp?g53?2z$+R&D=+QxG5TsLV3oMLmw zG#vno28Gss4EE1Uql0Pu&Y)E6FQW4q%ds9nTFtxxd$&S`OBe>Li+rUA0Kaeqc!-z#c%t=o`3 z+;y=Bp*T-f5A4$MUZj+KngB))5@U?7FN)v$L?(g4{o8D#0*2MJ_GrmE75s)qwQ}qs_^3FgE#$&&briYUp>^Ir7R>S`zq5jIZ1a(uQZ(2R|c8#YIb)8T; zp%2vIF@vqx6Hlvk#?ZDao?0N{vu*Ob94y%Or%|fHb!*4M64ik&Hf&z<&3q8u<3EZM zVGl{dHX2Iev1mavQF6MH_gjC(^)@9)+E%akiD%d{+xN)c=xw zS_sP61x2VJiRXIpFZ=^diG_?TJEHwLW7O>P5e50aX3$f_mzMb^E$G@;fv3ROZr~q> zj_|&UZV-rl_DDkEH8l=8)y#i+U80pq=(_dHpLgN`MZKC@_SGI(e+5`-J>p8XCIMFd50*ggCEci z7r-UFv!i?bm}c>J(X`m-wYZ)YIDv=!;M>*2L&(Xxv?h2Y)o0XFK%eh8w-Jd1OzQcN9 ztD@E~j5{>S{brg_GW;#=#qQ6`;)tFnewp!L-+C&tRlk)6C$r{*;|-dsN|7|<-`Cfq zACggk!gZAAOs#_KBoS|}SDaH^?gwAxa>voWlaStVjCVBv>Htskq52EZ|FcbrC3TY0 zHhb38*R=TAJl}U_^!ZXXd(`k&^n}K`aGdB{qsGaSkRuZvSRVhCZYTxpoq^&B$q=D; z;5I8lP4NE58pUw=0h3wriGJT2LQD4xTsrOIYjl;oT)c>+4w)wt;RCW0(H&U%Nkf>Y zRT&Q2in>t`rh)cE%y;5J2NnL)2Lc{%M7m_7`kFVTUAGzmC@K{6)XNT>SZn$qj9xL~ z;xlQIARZ?-;E9{^iTbSSpr+CD84+Cq0P!+W_&5uT?k5VZ`#Vu&*v-IQI*r+q@6d>q@->AJ4a+os93Wf~J zlyi<5c`{;P{2NrhBfiw}6Ihx+bg$*qCvsLgPGsk`_|>d%@e8nci644*qJibD`(B7Hd_@+)>o}BuA#UZq5@dz@q{B@=Vt<2q`hc)o2iXo3zJju- z7gx0jKZ+@4OU;5UGM%4vEAd6KqyLBwKqBH!nYD-ye9cf+Tv;K=t~NG!RIR+1aB188 z5%bg=xM+#Tm1ML(nIfvW(tox{CzKr?D+X#&VM;{sfgB?l?a#y7B;ruF;)^>!2U(in z4VPJEt;&40JEDH$px3L`V`J1jKs2h^{G#(B%w1#=fpH?kr$=Y*+;O%Tlp5CdGhUcp zP_)&409ARpGG9M#AI}7ck6#BE*l^re(wiuc_;|9ut|eltsKXX%?=xcL(Z;4T%M_o& zqi&;RU$mMKy{2rdNB7uHA;8MbD86+0Px=P$=xr0-#~!|K%Kg~NXz3IleH@+7l}}Gj ziZw>e@f{*=ZEy-(TrMh}@76NgV@@<^vcIEwLy2JG>!RctGVLMbe!4a3K|>x3CqMNs zCPN!Tst4{Ayaq7f62F$S3(MwLp{zhszSYMjb%Grj1j4)~M4ORS8Sv!4_!Z!=s~u2> zaJP4}u{&TQ$>tGS7c~9qdiLt~AvWcNX#yy&nYNJ*qg{w~Hfns7!^$zAl14&z&YAmT zd;C)y0YJuNxB?!0;9B#0FV95xd6B^Z!b zpSTHb&oN+b`){MM}iU#yZ8v5vku=f8Aj}A_^ zl^lsTj)7Za5&rv0*q?wTXZc&6+##;Cg>ZOZNG_lc zVjVD)_IKn|KSZ+mw?UW(KTsB0MPzi+5=!&%o9>IVHnD_=PH3Ns!k#8?wn>bidKBpjadzn2{`;SR@%{&WVCAKLM;P1D%R+tuD7!v#KR^X&#mTI4W@pJgmsclLu6 zjWvRAjpz`7v4VjK<0nWI{Au;d=iROlGq4Q2!G_c5aQt&F|L4FpSNjEpYfn2bxSlel zFQg>`AhBFhVvzvn3Y_O*t!za`z|d<6;AL^du>EE7ftsY@P@0%)jFI5qr3tJe02F?l zSSe>%Jm5M33>XG-Ff7ConEac7w;?OAxNMLL4uny%vI0xbz}hh$0M?3C2V&*zV6_>O zt^r6%LtwgM2n2&|E)E0#GQOf5wcmU08)K#-SJNDIDY14?gQe^W1ynPH057S69Sxj6 zQ$s-2cjUmLgTt^5g~NO_n>`qun6&CnhF=**OA?sT%X9#!eiNQAF=xX8#w2lbw$wQB zZkHyuZ=r-fFg-{5f%@R}KSY3r?PC3aV1W2;vYTaO>2`yHN(BMfTQCx6nx+@Kq_T9l$$kW9x6Cups2K3x;O_^_ zC8}Roy@m@;c@94^qGUm0+)HXb_xGFD41nPB;-5F68$N*pGD~^ithh&ZW5e3K*DFa#!>y*W12V42x+Rde>5$K8-e%hSiNT4lY1Z#z(N3ke^MIy_eVg8 zz@`c;zu?xUh+s`Dhm-s%1~!mI6rUUiz~@9GqDcj*{a=_KB)$HH`1jK~@xCZ9swj;< zyZ#7K@Kfw>!k#rQpu!n854agpwwgYogDFDopkeYydNcL@ChG!V#OG~~!OH^72sE%7 znIne0_5;^Y#J<>6@Ftlug)%!9a7ZC20d&kSidZIK=Mvqx-?|8sTR@^1pb+^4GAcI{HpC3feKjltp?SWZD`Xh4rZ zAl3nh6#urC{v`ow)og+v=4)W8YlDEz4TDzszq|u*KWMbj75@He2noRn)RAb%KwcXH z>dU_m0D%MiQ550B<0n~lIqbSGY1oZAFgSocgzq-cGhhS>@nP4dUP0~!_;YHAjDK(r zbk{?G*1*er!114h8Z_=p00kZ7gJO$~VCaiTfDK+zqdM>=Xm@T$mrIm{g-`N_I*SVv z!SS(b&v$DIyy@F2L;S5q@Z|+As}wQ@e2p8)9rCK zbr2aOjiBw)-z34>@DT#YM}=jIIQDYW2Z9tc!UvR5kY)>UXB7tGs`!)WgWaBnXs4>TaYet z4qs0WdVP5$*ajJKqI(^N>LCCvuB=jFu-K_VW?D%0IM_E}C~~ih!h(jgi{9=5l>wd* zYLV=ZV6ym$*!6vIq{{KG{wy^6`9bXyrTHn~+JTYeIgN2!DeJ-zj^i^CVHfNWbF?~v zAU+>uY>eDV>Fq%k|IpW%N%D$)P7kV@0+vV00;qPX{;n(BHTSFPTSfZFVRFzQaetHv ztZ|4AIT(y{jsfS(qD^GM2cAabJ@L2+>SR{o| z*q#5~V;<*^K;lN+y0f_9^mNoQHG zs2c5%oCo2k3I(&Qi4xDLOJWYKV`=NwU=kna#c7c@xyQcyJSRO_`Ge9TNR-+a7C#c+VjJ0V5{D0G>3pULu#>3Linuc0Lb_`^O=u z=_!P(N!BfQNDFj6_6h0zYIK}vP3K(icY8iBasgN`+q2%FQti6$Y$PzXkodXt-tRX* z;MtIzKBS%adO%S=F9QTZ55g%`5%sU?$t*WRbQ&k%%MY(!;0kPuC{FrCA^ z4*WzZBvWElc1mfktS#3lU{hR?wZ8`Z5U2FP?u+6WJy-K#&>EjnyU&a`Awr}n6j;@7u+@9 z(qT&vWy^anGY+;WR7M$U>#D`T4E;=zm{5TdpsNs4V$|vOb@lFgpAcY@zxdSXT4tzMA^uD)Aa?jT!U(x<8p(;Dm1i{MaPQA1 zn1@nGm7l3g0w(mx)eF!CC2zDTAj+8dnB{G}ao@&3M1u%0mhq1zBiL`aE>sgrm%8oM zyHk|T;V(L1dK2%d7Dv4~HQ+ikKt#oLG&# zLJ);l#iG?0J!`;H>pm^i!hZph9zsPpUD4TJ7@9y2lx7k#Bft@Xju4^XD?XfE?1$9*km@61>BgI1-l4blvn;vUL_b&LWtls4$l#tk@+w{Mq(=>O10@Y0kO zWWcq|1(6)65ckQTIwM4LgUxjk4kK3ri?0pk>spj~pi~s7rRs??%+WIv(*yogElMlq zSxH7syl8TUbYs(!^|u1)GkLvS`dBT^(!&o8A_4@b zv>7J2cmY-yaR;d^1Z+pYmvMPNSbB|2XBg{rAxPbqp;l}UMcN^9KJYvRGA+1@@4n+a zx+ONc2JVHpKvv4?;(BJq3O=<=g^1ndK=|!Sucf%q+xLl0RCi-VUhmvr&YX3k&*>;; zGU68E2{lCttbH>gQHjZIrB)&*YNDrHqqkfV1cIC4>|1M~S%=yAGj>K z8S-vQXL-K3K*U7SuknW{@O?m}aQ<5&N2g)kw1L4(*<8mE2)(`Nk)LHV|HE2xRn1AD z(!#6d3b{{AQhmQ!zg%8DwPuIBeX{H+F7pXqo!%}NW>4g4PHY-%{Ezy3!@VY{AF(Ou zdFMch&wraDKQEM?ahE;=75Q(6>6eradt~(ABZeIHkkxnX0>Z#NwUCObuvmVx3D&3> z=LcMLjBjys9x1cYEkFJaM=hXd+DRvqIy0d3tdwM_=1opiZBVpebgC6H!dX~U>YZQB zM`M#0J?OBuAWxj`VvZ#$;hobe6equv6X4|V5LpYKV;~|*JC?+?SvAPm645?-iAj^n zx$YyV^)nlCO37MC7TePgnJAP6M9fBdo&3-Ta#NVMY4lGBRR(ao+C5A|Wh3+URyzwg zBaZsMTPwY*+vQMft3n8LY9LFTKY7|s_3Y}|)sN>JB+}iyS#liRQLx?49Iw2>;VSQ3 zCh@!}(QwpM=8hyQcQh|Egj$tc>nnV7D&eyL{ZyGqhD@gUR)OS#0^u2470D*LJeIFEFJ*t~&1DclDj5g}HR0#t ziE^mP>3Ecrp-5aMO@S}TI7K@j@~;9#f0r#t)McwV?7B*DT+60jbWfAmV3}-)yb{w* zHiu$8C^b1SHYu3hXNe$!-K%iRpII2=7tvrn@R|s}$gYh=C=Puzj9HO%YAbyJj8;!}EC8uhMX$6-l09*Ui^x(Q`ch1VKnCDg)qL>B zIo>UEL-RQ(CjaPe@Q*B%B+zL4rd(1=-ucFMHF#vQIPLiH4)>D3;AyK2v3k|jFlaMd z#uA1xkF(-sgiwX2DV%^-f1wSxuazLro&=sio*P9~r2<`WuX64r!tl?x@aX#X0Q1|9 z$ksQ1w;_@2)~jUX5$~ukxb>Nf$x9K@Lqs+&qS7L)%v~E!O|4;8nETNBcPG6(QtMtR z8@bbjfs{uEK7;3EF82XTB87ZzJ@IN=cZ!VvdF{XfGOfA@3N=fE@;i=`_5o;Jl4?bLLze7c*6*5>nxM9OI<{>j zOK=+K&$Grx?rpaHl;q9Tqh!6`yE_RCA>UFTIFT3c6|smHCsz zkpp9B*jqEM!tF`ai0=QOG874cthh#PcfUlvbCXF!Iwa}k$JPz=QstL*p%h=6s;0p< zSI1tH5L=9@;Q3roiH!YMO+WWEQF_MnkVSd>M`K8eDvJ8cqB!zZvBR%=h^t#rs%VG~ z+k>Ko8!|D!qx_H$=o~XKne1Z~vSgT}1kB=S3C7{AU`!N7atnl3LE6V=7$Us6L(a4T z<|RSdP^xWJiY^2)OJWdWoi&MPju2Vll zq3g`t1qnbR(94*sShE|ITxQ%`Zo>Roo;5O+eb6|LF(-s##TPXnPoBLj6Zdr8?p*&u zx;EP`a(WA>WJPH(|IxEzd5#CkJsd$r-b;FOn}^GEHXinIXXs)2QCo-6;?0LeDhyh; z{d3i2y^%H3p_p3YvXQh_x~S5~8wjW5W)D=QTZ{j}a%X=zcb%I2@F9} z(l|eQQTz!ld3I1sqk`r*PgdY7m&iM_N}7_EtHHU~#p9hCJ#!ch8b>9qHAFea+>=j! z%YjOODnd{6Sf8eBpbaV9k@TM#v)YU|?29!-NN)7QUHN;KTe>MnI9^oZ0q~R`j#erU zf+9(0^0r5FlsH#8EhpHiBQLEdh~DNp*qsIG=gFw0$7Hdhx=tw>rW{pi0oDH~DGHRQ zm}_We85}p%Md932(p^S@0fL{om9?6&Ty>;LI{UPhC;H3@$58j5bv(A+Un>cA{t93Y zE@WO8i!G{=KHenN87v+|htidCR#B?**FWeZCNo|=6{~qsIff8S{y6#)MZ9I-;8W28+)mkt(zS5 z)mp!{K)!a3R;Ol5)IKe1ZL3af=3$ki^p@qmOlxBYABV9d=rQDfa#X(n$PPB=aBVxC z80$R@Lz<5{4nS)G?UQsPfSPcmCmeras0*M}2CXvNZ&8YwrI>-a+LrkIT36x$BSny1 z7VzOFIC{ju@nP-t?OT^fH(gNbScFj&KST_MYios>v(tGaZ25yYx%@MVU-`){_-M@4 zvPPIB4#!JxC#I!(SOHD1jZ<1p{2dW8tIvV(EkKCTaGyE^KW1+N)Hr?aZajh33;j<` z>d%y=9e%~D@5Vm=eO%B}4>a}}N&ls>FO;I=nYZOxsk4v9UTE24m@yfVxW@XdF}Lgk z=j|l^_}-w|w`)N*T;{~f(4*?DO{G1P<*T(tv>An`7ijXS-KzEsIf-o5*VIQ{)kxTN8#=6TK5W~dV91vExv`j`PzaUxHn zX8a(iwTKPbeNM&(z6lZm96Gl>67kjEpH3`W2RLP*j2QG;)G4Kglv3zhHplNg=Dm`p zfY>(#a7xHo!P!3|mX$X_20tf7lo6?O`_xHI|9Ay-R|z06Xcg$MwnG>ak}WxN(jBzr zPugUDm^n;49x*rA+3<5RR;jAJG@Xxoh8d0UvXCeJmGY0s(tI3>OB)tGqH}-F-y%XR zMGdo%)W_IF8laxdp}YajN__-Eq;GLG)XIC15ASU=5;#cb6jewdzp272GFC5_z+bvQelsCx1(*eFuY*kJ0 zh}3vnZa`Lvmfj>zoHaa|>rjEF^V#5l?lqyVi$Mv<{sTqWJN4fXDkAYxn*)RB^jk)O zyC0FlOck?ET8Drb)t=(`&>1XSLX#)ca}9R@a_kCSIJU7oQL71jOfBCWWaYjeurSIr?##(pfVuu}oZng}WQ z>RPb`{5z_aiR3hnM_Q-DXcJ2iv|dHMQ1rJ4)OFRK_-izkI>@|l_!XqJl2E8Q_cHH49?FX{6B5ep1Jij+SK#S~h`n;nrl@$>Lcp zxp})qoY|IZDwV{@$Wr}b@1^-B6mbEMhWyIK z7`GqrM<}#4=B|E|P6e?}I+(I0<(iCu9LLQ4_bdY3 zyJejqJ5(0|GfVMz0~K)(8I!H4bf!=g<9eh!&>#OvZtQ7Ua zsV3uFi)bStK$b3UX4j~+-KizQ z=sF~$)ymfI8~IZZ!Keb9Az#tvDrPECRAj_hDQgET8m~ zy<30=_le)iatfE9_wW~K*B5TZVd;NUvPWbuuyttx9MzFeaIFhbG&|fMNvPSoCC&sx zBR4>!@Wtm`w|SN$o%Crk_%|0W_ki+1^DWa=zaeP19FpQ!#`J{x5RhDAuqxQoOxJ7r z6eJDbHA*xu08c1cm-o5nHh-%611m9;B@`P0YP+Al_X4bJ4t!8n=Zf59oE=dx0Eb9F ztfuSQ{^=Po>S>*23i9-43F|dvVEhLOZcCfrFRF+^uN7b&{P+v|=-aRtnmg(cHvCbZ z+i=|5E)s!|j#{i`-2O>3BfQVS{9-ESfAQb^M_%ptYR~C-$2uceao`vSGhndfNdy^1 z_IN7PTvEbHkuHARzHhS4x^MqPDol_-u07$8eADyDbLX5xJ=83L3Jj77@5*uuI@|Lb z53=IlD2cC&MJhlGD=-Lg!9gl9q^}5VSNrT{#p0k|I)CSsZHM(;IbMjDBM@R+H4K~b zd=_~PR$1NLs!RgoZ%>k`U4yqHR#jY%OeTH~`gE^(T&FC`2DPAzA!1zOaOUWbyH) zc5fkBe3-VBd-wyLoowbg70Rz0ipkvE)Ep??IR7BPWncaa0bXlALEK>j&Jj+sFETQf zRz3hgbU9nL@&=Q3MXZkwH@oqvQv89J@@r;%)j^3%$6oxbc$3=;L11}|ajntBWSvs* zH$Wbu3SLWG#wy7Nvv`ePSw;(le1>@UN&MO`R zoDlNA@*AHJO=4hTArC?`A!y5?z|tpL1OhZ+|Edak??$g%!yhf|dAFgMGrlkoQ7YJ~ zp4#72z}y+w>_W2o3E1FEdaU?$hyzX?i(Nxr@UYFcIZ{%@i`VplQ&aA1ep;0MUf>@o zDoXPr8YpVroG@FS0hfU6#Q^6F{&cLA;>`^CYzu^~Ux^S*8>22`tCf2maPQ0!F1^nN z;1_Cs^m`aofmII;Lx5he|q|gqqg`X zx<3_m)7TTq$B!7_#uhdO(m(wC$?Ra((`&Gg(|NCcea3z7dhYIS{d&%Qtxxbc_Wp$L z!`i_cUzlN8wH#Y*o+Y!3$_I~Oc_HJ&bfC(%v7CC6!N9frz9QV4o$kmW?uh$ws@j-H zxsbH`w$?n!kV1VSZeE`DDpNmR>O~ulCy|oK3N>uAe4&ky!OZBAs!4YyPxmx;jbyw^ z>H|>jxtR2Osyw(o(XCYrB%2Bw;`C5Z9#R+cAOKgcmS(Z5Qn5B)r;6K@uU);VkY0w`uYMBFud( zjS~~c$*Z%8-jddA7bDMCDB4^O8Eg5%@0}V&<+DvBibfp1hI20>! zyL6zh`sGN^#rz zwEO#y{cXG6O}nlj)s|LKdUEA#{8tL%;~G2SvPtekN6W7L`Pibyxg=3Azl>I+=ZJJjFq+K3b(>B^=t}kL8YgC!Gv`Sh_5cu zbd1sU++BN=Qih8kS34(Yf_pQKf}MmxE-b61skfHL z-3ngAgQBk2)APd3ke;8%2N30MG)WJR9B%ZLu{KwuPW@I?1J1v*&jz{$7u2frxZ<}U zZT2VcIb=oGv@#o1*6&&+PS5T+-D&P(THE>s!caW6lv0o2uYi7KWaJJ48mOO}ig3>! z8qd*7_Fpj9YzS@R*A({?Xw+Gi_!=X`G20=J{XU-%f66cD@DrIF)ON~q2UVqViCP%W6S=%w-H4Py{V_$7BKgT)`U*MHI6y%QK#3(Bb}p1 zAHN*D6uJ6sCve)6H&XsXzHh2ubEKCI!QTga?ZiF}vySBgBZ>(^y`NhnKiLEl=ME#BF)X)lUQD?Sh!O^== zjUfGo7nnEJUX4HJ?jo9SMJN!QwlqV(&Plz>c{t&~m*O9p&6tlvo5JqiS@^3WRZ*J=JF!X-QX)u-PD@BNmQ9>&R!N8m`V2r zsm=OS*_4Hz;&!j0e#|v01-Ay}L|$FJ>(11`PgC?=$4ykrnjQu6J3Ns?yatIMY(9BR zwVtP_HQ;yypw|p$uU-5`WEkF9`6tSK|+@C zX>Wb7vEf3+z`WLP^wC>H!)li6of02$E$i)l3q-FCa0zL{n^NH&c(ITtm_#@>UXtiT zj+XSY9Hn#Q&0H|0^Nx$TK%0G%^-W4LUd65J%E6&sLZLerxk+UN3z^()?8OBkyz8^x zfuDXGVDf0}plGiL(OweDFhqGZ6m+I6vhQ_X%d_t~=uYtGENzfUdwNe{>Z*3`w6MOt zQV8??`<9=n8e`K^G;HEd?X(7Tb|AFkTt2r|DdS;yj3;+GIXZ_)9+;&k_$&=4n zy5&1rNcScEDlt!S6P-(}4GCk&w!p4?F6_-^IOU(}w61$z^Ofz{AwH08v-(hH|AJIc zKsP7leR}q8Ty2G9zGjEmVd=zC(z;-$UVYiDY%;p^LjU&f`vchhLQ%+|`TF$1KhyV7 zrg4|R%w=rMDV}R|jJ31sqZ)=OVSKJ!$If2s&Og0~d^w0;YS`wt0C{cbGXHJkJ$|eVmoC zTE{$m_Z+Dv3BPTe!`k5o>E$Gn_IkX_>ydYjb{_S9SsYHht{;H>@TL2K(?!Z#ScG2v@Zkv_7Xd$y>qW_)U;uk!Oj~W|g z!s4A5J*A%WYOhM!e$u*lyy449n%SRUpoR4e?c2D~7Q45H+2;?X8}H+921{u(6(|Z6 z=bjz8DqS-OG&Bva86QTm>3m-ov?f+B@6JjYv9XnkAs5{bO@@Fyt(5D6EIoGC_%I^k zticcRRJFwy=DNI7R1R@?aN_!WD8P?Ive%$4UAuguESJ8} zJh`$<*wEW|J9Oe7loAm{NX$*X%LSn73ks#aijz`+Wm zTK!O4#fOGK8U_R>Okb zw=6Ysq8!A}P926!!R{7df5b>vDMgBcB|>>t@w>v|WP2=y;HFi1Dk*GIV-zzTE1Bh zl{>E<^aM`bjC2TRp-tR>`fsQ5PoT$p2!0Lzh4OBZl7JwIuL~JtiB&<%~H z(iPY5#l9HL5+1WnTL&`OOF?wtNR@;6o_s8V&C&8|ssF+-rU6A|J?&=tQ&Zt+zg3$q zKRR?-|E4{v10bMQ=6YT`uY+-QNO^x4$VSnN3jHTRun$2ZLGVwPT?9Bb*X~yd&;pWN zaWIzfwc#W)`7japEgLsbYqi7F+ls-1n-2SX=>hmnR)oLLHyzmojvG6M2zo_7yrEzK z?~vqSy;P;?i*}nVoQ0UKeYf%21k$;KKvJ9c^%G^AwZ+^NuNkWjQ7n~aXI$7b)4+6s zU+p}F+cC|BA+0~$f_Adxau|8_)Vb3y`} z3wg3}>Qtl$N- z>$?5(0-%V2h6wWoHCR(`jEbk_1c?<-TQds(`H#PE|L=7E6AHyTC}d^r^vRQDI;%=k z;Gw`v{Eut=mp|420mYis`^eb8)Ba!n=Re}fzsZRj>>Im1Y-Y^=+XbMnB3w!|RE{)R zNKyWu82q32nGOIEQo-DqQSiS%EENJb$wL-yD~B^_zW@C}MNupX!G|_gc=Ng9p8@{Q z@l2Q^lueZVo}^vMd^Z0VA^-J5|Gx?OZ%gO@ zP00UE$p7aqqwQ2X8ds4R)`SlB^|kBy`-Z%W*etcf_r zyxhOPZRFW^=@du^65287AH3Tc9FQ&{|4pdl@b>kI z!Tz|7LD-IBMA8B!o5IS8qY7{k66f!4=WXV0_ndj48d3sOxL|&(zH0cGol>1TDB1fi zz|YV476?DtMfL4kF~=-`(qkSI_nC-pgc566_D|&uj)hYD%kVd=3`N^e~bdDXjA~#WT)X_o5 znNK^GJg>!5X(eA^p1`-YW(w_!;;N#)igf;><8M`}o=(R+!HN-nbggE*-ugq4`)uB23FURkS_nAR3NjH+!8{h=`^ooR zUN(wcuEZn)WrZJY;qG5DJ6{SPMXy0;|Aa{Io8^8m9q$OCP8&Bvvcub`d#SRa5v!0s!=qjQ`4GaGbR&+f0a=aQdXbpbk? zC(>hu_SKNa`{c2kjmSIGYP~P-347ar6>B2QL&rfJ%Zk7tCvGb_RTj113;?X(59QW` zM?ZP$b1tXG8~#A&(tR0( z&2HHG*lGe!a8}2LBj7~pIDQY6135ymk{|ZQ6*^?%R+tZRkDZ!L?1YeySSo7^z-^l| zZ#87;llDW-SwCKHhbQuF_)4(*hSQE)7%Z}QnQQY6?*rl zdNy7+o!)iCdZr|LZ}@?%H7UiTV!ykgbO{M6_lqUpCmGJQ)3fx7PhY_(tbe^~_!4=* zti6cVV3DV~B0+ie=EK+8naoR&+mG<8-{I3VeP8pM2?F$}=zyQM2MIj8%M|BTYXJ6e zWISHC#&rwaz+6A+qF9o^O-+`W@%=*b1O=G!OM!#(jr-HaJGIs{0R_J}F^%WK+VR4YWsE2qj@9h*$=iy-eRo?R~#5s=t& z39`4?=_bw0;Y_q2wm;j#sugu9e@gbA^@s@@{W(unGv-Y?deP(Cf&CkKJOQ4$iw+*{ zg=>q(GmB`;t+>*khA#yK{A@lXPQM;vlZXVLah_M;N@c?-%h%3rjr&89yUsOVn1_Dr z9@7B*?Z!)yshj!xYwyIbbt{iC1rmrY?CBo7=lWPVV~(>RMpI>~jdEQ>Wt&T`89)ZMS&z zkQC$Vv-j}Zzq`0*S#k@1-0}A=((I}$spiY=@E==QNwG;E)OikmY#V6r7-(hOjoAJ5 zE#3(%{JAGdJdr#G9vqx8U#0cm_rxA`5FMR+?Vs~!dV;*2e1b+Uy|G87(C|3&SYUG- zMJt18b7v=uzvs4hc$pgJDjnTBaRDUzFa38=ij)1}1yXZ|rnePv%0FAA{;JJ&E5r3G zjheDP`qa2CxX$OU*i3+rT;ZdB#C|bp;o!bh$r9{TqHX!?4B2cJQR|c>xttDp^7d5k z-mx|24OtM+ktAG_%5dN;eC+~nF{Bj6^7CLN_`GPOX5oGa zxdk%{?o&{BXu;;)SVnJ1!jB-AyT25FU82UbG752_;*9d$>Zoh&5% zg!&DV_49YT^JhA8kM;XnUf>2R-fxZ?oJV3H`bhp1Jy>K zVu9R~1*^AUehmuj3(ngQH0MEO$sws<90qkCThvxAm?)-K_?~+w&K8cI zzMF0y?@$jjA-(e=LqDtg*z9!CcwO7bthY4-80R=!>J&aJS=_BVI$gLrr5~u}=8TCxh@|FsI7uX#?1-=K>TaZl1wY z?gL=;UGY&hM~Ydde&D${LODBhwHm;wY9-%WaP7XHKV7N&GPd^e9$LT#(8(`;p($)1 z97|##Y2Dup-p_m~^M7kCe$QLvGe}wbt^4bQAv?D)d;6JmXV&NOMIy^O(3-P>P9;|( z-C8qC1b1_S{CeyB<7T|htL#d*sv;x)3B%#NNKPPTI$z;>}M`*)abfy52e}sxRyxwMhX5L8K%Elu{8Gauh`bgdtQU zhwd)P8ENV67!eVW4rv&=yStkiVt^s0?(n_qu6uuXz3+d(I*Y^E>@)j$KJ}dT2oLTV z1oQ5sd^$3`(R+6*e4YsUTjPnYtESQwsW@H+%KhA0x$yx@?A$6ndqt77!8J^{xm4Rx zR^-t{4;!|H?L)q6TjRz|8dt`yvirTn$fep z7ygS$S`I(p(TYu(9FG0$P*)-w$P4tHp*kkI-1qZfa= zYCADrAB-t8I)I`d#Q24Y3_rncLH4&4&-sV`E?yKZ4edLd(R$9&rum92b`%#2=PaK5 z5qpqY<$Qhid8yow*iN^-%9s<0rA}_uo06&(hvkuW2DHIskTrn+n|0$US9%rE=MS;_ z2Y9=^`rS1taiOj|hP0k?&ABqC`M;>QjD2xYxap{b(&cYg++^%|f>a2=M)zMuuIx>( zyFa&S>MHfbzqMwvM&()Plz8O?E*%q3rI^aTCM_2|`K2SL8XKl%xP>I|Svt}H{4q7< zn;Wl~Vj@tj}?nMplz-8_5%@3sa39Y`d6WUm5gX9IjQP3t_AAxtQ5A`W)j5@7kqbZIIHA-6cIRDi9|I$ zL6%gs+}f8#G;Q6TqbH88Y1(g1iAU4|79#0ZHuqzQ;&_80Gw*0TT66qr>MV-Us425G zE>;3&jhV4LuFRD#x>Z*3BR3dfQ~sv#z^P(z3O0OH8MQ$2Upc-vu9PZDZFx0o45I;B z^+>qaB-)dCZsMSG`8iOJIJ&IKKSY?mwM+v+L}1Yif(_aoQycE6K;yGGfy4_BO2o6~ znOhzvY0{^BGB*eI@=xsq+!TvOk&1fYN*3U;FmP=8R)fiH^T<-#5EgkvaaQ>8DVP4i z>eHw7iFJeJ#?=vbJ>~Vmrc;pum6w7%gNJ@>8{1Do9*PGgbOHr-^w~O6eX*7|*Ehw8 zY-CzeBf@mCYNY8xHM8dza-&l{n5PLg+J)*N%QkNXoBzXWyS*O>x!NP>M}?<8xw= z3jz$<@9sSm8Xu(EJxX#XQuI_dh%r=4T(3Fdbu9~QE(W`$D zJ)qGyoUm7sd0OZz@SH|u)y6^8Z(@jeI7GEiiLEOguJeiPIrZi3O{*upMcK{Rjku|@ zazfp2^v3mzo?RVR!-f@i73aF|pl6V>BuiJailPl1HSyfWS;MYC`R^=JS#Nb%^j#L- z9TA5>Tcp?`eFXp@1m!z1R6D&r1$ULZ%3*+xrp^n{l5p0^*XCc2ROpc@wc=*y#Dcz? zmgqTHVK#M!>6+Bh@%mB2TA19Xhfd?{I)uJ(R}>{r>|*YO`&5TuDQM&Rj6Jr~9^e7XP!1~`BSltJ zSdP4m(MbxEJGprnzxV!%Hn%X3oA~R$ZFA#uCPd~Wi#lWa&9MgXRAWGL=|UwqXyKL= z`@%c(lI(b%x-7POnrXS_>u?0u5C3wHE!NBFkozZl4NlQKTQ@ssf6Ghnstpj!4#L>C zo|BQVg_ok|R#!cyN;GY!28&KN3gE`YULwPr@dHRW27de49GLq>59ACO3abGmv1i^; zCS|2q?&oo-yj@h5JW#V?^TbUjpu*So7-0^Sw39DJY_D1iU$xW+O^-_u2>{@pL4bq5 zom)<^&}`&%&igNAX(7UCv&{9^XB@9GIXqvP{Nb86nbkR%WqDqDwn;z8H%&_-TZOI5ykyMkF z9sJ#oyOWCBZApI7lzA2?jo8A$CR&CTIcx$+c3S<`>JLpj*X)WEH zmzz^NFf$fgfiQ1T$Vpe-{9>Mod?&s2vF1bDKU?!LDT&kkv_l<}rqdYlMb>_+uo<;bWXj9g$Btq`Vm-RIrZH%29KiSnqt@( zwxah$|0FG8Ywgr3?ovzgkHK$S3WUv(kpao0q1*DdTj%0Y6%Ub`)NXGk>YKzVEM~tZ zJG<;I=onT@mnP>B=ThvI&;8qj+YxpO%ra8sz@{YA_OsZUiM^k)A%yFtlGe1-3{t<#X#qVtXGUL9>qTHJmavQ-&wer9Pm+|^q& zoHNxs#3lB|VHIF^Ail6-&`AXGTn<{^I-_(97?euc*ez-FKFMawkdqO~ETMNoYt+bq z5N6W1DfIX1GKm^6xf5ar4I!u;*jLsTR`UI@OH)^L;_4s_Vo9%ku&;OEsVN@C*ScBj z6r>60r8zZ8&CZGr5+-q9;R&6$Exsgxn5VwQhUX05-_0l_`}u50S1IJ960yfjq* zZKjqXz204!0+t~5Th9dgQaQ;sRHyUYXi;kE1d@oYO(D=E+_(=Gbv5VSx<9k(l0590Q}VY9;0m5f zZN6dtkF&sH4Jk6Ndq1;%RkaVMw)olmE#hpA}=K*CG%=A3kNa@SR%UN z(6*Ad7TKnr^7~Lh^A0Imga-OKVrnA!E9y~K-JNUvZX+IJ*H;lZ2;tLZ&0U{;t=DNA zyHj_Dh)Jkg>$FGSRY`JB^jpIAZmG#%BPp9gNp?>@VusbpUFAp`7S-`Wi$gT_LUqJ zFBdLatzaufATmwgKVq@+u!yIeg|^8Hq=U3QHAb z3L+FS#(J7XoEQ=e>*>1!_0jhS#6|S%7y-lx`v*(?mwxgu=`9M5_slEW25dZ&mpQ&)g_N|jj^6@C21=MY}J{Dv?{KIqD+H#jThTAcXl%_ zwufr}pflsr%3*rSVZ~#%(~-dfN}Hl*H`gBSK!j`?@u31fZ3dk;AfgrPvL|pum>Mi%Z2JIF>9%hQy{H4e8^8)rBeL=pwuCDVD zNm-s=7XVwIA=+i4LZfcu<{ejEBv^hyH@JUx)AmrfZ2sU^vcqCfdS=m@)LNK-`WEv% z76T_>n)cG&GFV=E|H+gih;|9)oi|e$S9`dnRUL(udYmr1N=VL?8E)|fcOE}uq<+(S zv@6YKMC@2Ei#nTHH(L;S)YbW6%3`%W%Ca5#Q`Y*&srY+zZr9efd8!QyT>|-ZTfnxJ zLT#5vjLeE)A>OjR?JLB8o*U&b%f6~IepC@D(MXlTvdQ1Glm5#rFAF2_+rW^=;0G;7RtpmJY0Wq8xK8vx!^SE8JVI%)4x|k#zq{tYYBvJhUGC-}PxnkXOU*1C=lxOS%pwG?-fZFOuSe$A#eT1}XHXGz&Nz&AvM z>C+r4{~?A;Z-(;xjM7tn$L~4+2EL>jr5Zl9d2T!sn4v6H(>M}gw+?lMU6b~CU*q1* zc$VgrQ?h$3AyyAJ&LUgDAiQVjn2^STP1zwN9}w@07}DI=R*3O+uAj9m9xa`YcLlkQ z@3?j&`~xilUSA18c4f^-+Qdt?qKF87m?<-r%pR69bMam9Q2X}Pn}+?~)oMaT4U#|C z$u;KDY@B{4KfZC=#k` zk;TfR3?7@w^VP@e9&8P}9SroTfT4V3%MyeL;QeM@Yar4sd?M)wZQwLX;&8&=haoJ& z$5JM?Yt@C%FaOGfDGyKVYfsgE@u?qyuxc+|AyULXoARKGKqNlOYmYMy5E2#VbjA7s zp`|iY|KlQN|FG=?NO&zK9IWB{pcg{;aW-u?#(5&}h>RoZ|5rsAYARD~QZx7S!ijA!1G##KE(B?X~;Kt`ooFfVDkCi87fv zi6+0OGRCOq&-R>rlwSVcUZua>2O0IlE8g==lXF!ml9^juNHm5`tZ_%#Cy4`p2GYltHdPut-V{A{jY55)%ij#LDs6*UHcdQApLJbqo$*;HN&(4_9(a+{&ucI#9VvZ48iYS?_mmG;FY;i)1Dy94eW0U)p0 zvD7OyzMPfxoAB3EhzL#GSC?hVB*CtLqbs@1?9G>=~`=HrkfY98WS1iml(F@hl3k0CrUD(Ms`G8@o9mPLjC_( zuzGN!g}UL7>CSbqe$1vf_u?)0LFY`3lYJC+RS0iHdm717@*nCXSBG|Rx7S9fbC_1p3Bku>lBCSDUZONn+eU0vz7lHCuy1RQTyX7rQYV&i0mtq;MdFs zN?Q?!~y6!3{n7%(CbTA*t>@ue|jbs z8wftXO)&22fiPH1k954rS|MgiRBjSQsCM~6_XZQ*0*!}TrC~DmOuV#HQyGxUou=$? z=i9_=GXQjVQp}d=Ki*@u#qP=A=4#j*?9sE9D>bty04Ei5#k)NrzCA|tMY}>X&v#Y} zlx!mxvWRpZe3D+|epO^$EmaEVd!ci)5!;Sm<2u}fhg4mBGZk)vw~!nqd)sdr@}Xe; z<8YzGlr5iAy;m$gY(9}9!i8w5=R?7 zr}o7pwyv}+*O0Tpj;Ldxw)yqErG&afBIfR$Fop?WdQErj9qS_li9Q=}jFQ=4na%O{RBLh@Ghq9_5-;Bcnf!>Afh`l)Ho0R*g>BD@3W1R+xW* z-k7Po9Cp+@a{_O@I2Um8F6)+BQfj;r)#REh14;$5E|Oi|6(-Rh_X zPFPf+7(>CS>oAT6WQ^HIEJQn+p0v6P8YpbHpNXs?K$jEejvz9T7B~giCfU^k{yPTzJ=LtWGd1vVVhs~sAmK!~ zVnPheTO!uYnLzY{`ASs_9? zG$HG@tH>B#XOLE~&OOYP(K9Ak&{lNDL+hqwLFoV`^_-GcA%oK_E3XT=bx0mEvufI; zOCx-p{nRzJz!jlw!+|4GG7Xpfq5|67*v`J&hGV)*5Q9fi{>0>zAL2_Nqnc7dme^=3<7Y1-YSmK~pP(#2m^X&99_s8>J8CcQx;G+=Vs% z%VmTV-+xKJGySJu6zL#J^R-7@!R8D?6u@u6w*UDW{5a!t_q`4NYdm*amvPr7lss&H zbU-uSJ?F0E+E|TTv`6S8XCn-?l5`Wj$&`1Q_UdRAK!t?kykwhM(yzLm?w+Mi29u6jP(5SL6I zq&^XS?LPK6(Z3_$!)fl}wEW5kb^egUWEA2Q6eB?T(I+8Uv%hsfqU7mzji7eava-G~ zeFe!Iyhs%(8yuBj-bph&@YgzRRP^W(Bl0#_j&&-fWY95)_oBmkYi=Ll-^Y5NK^X1% z+}$u*dM|H`SZdi-?+3mH-=aE3D*NPr`@X-O%}@_0y&2sdz(_i67Z@ZocBCQ`r!ZIh z{KeCZ7Nde+;%ok7fP>1VRr+cRgll`qo9;SFS+P6u=|UZ+L^R>cR^kYjlbD~B~~xM7n_d0#|478FCFa$U(N92yBHSSNzF=t%A5z`b0w^L z;l#O-%+S2%sUNoAf`IWRg(f9ar;qq-t>#V^4j@xQIh70c5XkRFzd2@)^%%Y9ybZT~ zag&yvtm6-uZAFO&I;7?%KRy&Jb%R0IVPrMM?zucs^Y5_vL4>IJe}8XT30z$_Q6x27 zl_h3Q96rkHyC2X@&;ITBCB#8ME(gI+&v@?HEulsea z@2t|kkfIYqRykiuZ4*^TYkfgFW$Ti2CnRTGG6t=@6UvdnAeDvq|?-`hCg>- z8vc1^m1ZXE@{_cQsQ2(1MY%@#ENuQJ`7 z-utCrIVFDHz5efkZ65DOQXA15MByhU)bFaG356y}S*5u>6+5%fqmD5lIKW_HOi_eL{~u$_e`XqkfvYP97>P~9|MBzx_nYY_SEdxD+NV1I^V1ObpV`$F zo0QS+#2xiNUWB+$+#$0$^YH@z+g-j26R*&AzVo5se>2#)kr9Daq`F-%{r`5CLdGlT zRs1HG{{LpIK()>gf0Yf~^If7*%XwXlO@R=_E;9=`?X! zgUeqC7R16|oNGRh7K*foVqdf=SHM2u|Du4Az7$3u7G{!(x@T^QKSO8Qbuq&*4zN&eq9Mf)b>cVx6|64l;B~wppEQeXP)j z^IoikKL`}-kEV{zr4fb>tR%|*7oqH<$}wBq!EvG$7HN}|OmGS8u3ox+TGBsKVDzB| zrzFi&$K@lHm&!z=LOCeVZN{}PO5kg_XO&fk_g&iH!IC)IXURnMql6P2OE&5OywdX< zTNY7A4auW~?9g1+YBrr^%fXGc9WDIhj?d_C#n6W{D>M@4#f?d?+qP7VUb}o10n96# z|6G0Zy8;MSMO_Q{6Cx^wgy*>WnHeCY?lC5=&9_Mlf`eaIbyo*`aQjjm|Kg>q9+gzX z2?v|~>K?Y+9rW(u+cKL$H|9i}^ER1ViZYL}5@oV~Gou_v+etz1SK^+!12DF=T-b zC)6E7k*Mo{HR>vpTOO-P-O#A*erRaeA?Tq*>fAWKuo0`~`3tMIeO~c1236gT)TSrl-B?omJQzDR$ z%L+P?z+U!%I8p$*lz2w}m~RCJo1UKB6k!$CSBtGr7x?zeH( z#HlH+&9PhURwouFLb{&&__&pS0W;A^Kluz+seq9_BiOL{>X!Vk-YrMXrokBYLXgto83bV&W#2k0s-s2jfg0lXMEx zr|Smgvf|%$0_OUy4N`;!mm*fX$l|D|WEhbv?KGK|exeZzN)8{~sLX`@o7Q>qFR;+W zgTPK>X=$fW+;(J1{tApdkX^j^AFkz-murk*ms!k%`PQO!bi6~?tVNyc>E7Ih8S{O z#1D(LpLa2_bXk|k#|^AI3=Vgc)7Dhptup47rFp)vFZrz$4Sxw{4R9UUu~eddD5xE7?}A9TR%+Q667K z2%=3sU0`-5pHb|b$^JKdu*bCRVA)gj*2PLPPG!52OaUY@g}v#KC_2QrGFnZ5RRT>T z4pb{XoJ-)h(`{2j;4$cyrH`-34xb$Nv(VS4K5q|va@tL!`|>59(VO4qPhx36vHABw z=7?TQyOf&8OxO(ozds!-p2;RqYqaIX-3uz&L*?5!CNAnD4;)`kbwI+Oyvppg$fL1j zDhTv^1bGPxxScg3e#ecB@l(*dWnWeqL+DD3dyu!%_CxliFLmLTu?J_|{oUzjXKL3>)=sVS}wj2S%_(rx_MJg>rXncu_Io*M%WTna5T=8_*(j zT23rbi}2+OJ^FX1*)G42OPN!RU-Vew&q`0%3k_=Hewo`!oJcvpCm&FQif z*t3-cl|JMl2-Oj7;qe_S*_2%EQgoYiub?61z?vH-9MACgKS>Rm_{F;@tbAHgok&Th z6iYgp5ij6pyZiKKZT}3*$)=+BsPOGO!N2wM5bNF4pd1$O6>~&6W#x;fDTI}He%Vpe zaY$6pj_wX~w9r5A0LifBq{^da6VRq{`TO;^nltu=aeXN4{W`gHJ+hLGTymo6Pn^iNCpdCZYKc8Z(tCpQ-$WPicKTb%v7+ez5h3K()1Gs?Hquu=*9QG7%~vUh*oz zTSy>aRiS5y}V}l=9cAM z8Uwvg1Qg(3BIKz$7a9oP9#OESqG2_1gBAL{YABJZ6g|Ac}TUG#Bvd z1x!yd-HViTh5mqi<8kXijzvxKhpm_${u|EoGl92@%9C#?getfh;(lP;MR44VA?Y;E zT!V}6{IAVzcQBHOORds+JadW>41Htx041#RN#XUw3N8b8wpU!DQ`}2!=TGfEL2SQ= zkzXYKS!U~{XMLN^Y5l`04jgL&iZv8V=}>)7r5%Lr#gC7FMk(KGb>KwLHO{U1qTiZ% zUb}Z8V}S@&8ll(RfCnFGh{Ii*KL7NP&MRNKDJ5meqM)v&@{#Xz5UL0}=CCP|M%VYN z!J=NB-e4+W8D{FNAR1&owILrFxM2vt4jk>I0SXjvYVb-cTjMo1hC=?r`~#t;?&w}f zf%9KNZ8=gK(`M0{sqKjqqqSsK%uRUq{fvwAVri1l($-0q$V_#+a64Lx|AiXn<{(vf zDd96lQUb4hcwRCKF44|Wyu0_6>Tf5sttPMQ`ud^%Dd^PRc@AbMuAJkg%?JxuS{QH$ zVxF)00~vrI&06s<2|Y23GP$2D@y6Hr9zlr_-k9LLM!AeKhgT-Ht*#VCVlAGw!uKWP z8fS{bWy|^5SDoMPK}YSLZEdHIroVWR(TE?JBm~Pk%6XhvwZL}?>7lSy&tl-i##~q0 z@@TG?uN@-qwJW2Tih6(uS5%iC>ugXDIOvCjIV!hut{oRyW|H4BnRx}eM{~X$0f-NMM|HCe$lv~N+Wt-Y zx2>N0YM07ZpV;63P~Ut;<|dyUm>j{X(*s%;Uf0=eh6dQ1G5x8bG*3Qm8Lg%G8Es!q zyPF6QK33wxi`VMOLdbjI87PW9wN@Jf>WHlZz6^8rxdCmJHvb47emDVq4tl|w0dSk4 z?tD^`H59;V=9u7Z#1KVD#__a{nJzXxH)*;vMH_Esu1RlZM&@tUPH>ci^g=^P9DP+R{A{3Zh&B7peQp- zaQ_&pa@y?sLa`S<1TFWzA6&r;BGy|^M=z>-L1ZB?d%Ume|0iru4U*)MWq?^Bwj1kIFfwiE)N-fnxhka2AXFVjc3#0cOCJ^xCq}z z+@fDaGvNYo#1DP`9q&E1?f!jUO>S#*@gGA62rr+He$F5DJrznHFmv2@DZOJpHKIuj zQBP(Uh3N9Ggp`(#(Uk+D++wr5TX}VLS*)Z|lDwSVKQR*uIln)A%k_p9HDE2ahN3kO zph>U@Mk)At)45ECH>`trmyd?0p;Q<@&=Xkeo1bxMG*jWNfzR%cdow0Q_5}+FhUBkr zHPh{L3DPe8#+sW!%RFnfI>iuy5tLPz^z=@zCULYK+}--kE60J~z~I~%ZaL%ZTjkWS_tGQO@^ z5&;$O`!2(Sqj<@b9R3ejYx@j^Y^uP?BP@XN=VqC1!tt=}&6&3v^E2bpw_EyvI=vCMzM~vtk9%iHkh&hAKr;Se#-25d0#bp2 zeK4PLID9#kNcd9uL*bVVenYq^ncxYvDvO8z4jTD$!ImE+@fj!RBJLL!wiyh!!rOmK zB!aY+**Kx=HBtmISOpRRjnUbO8LKnUZ1qm?_FJx=IwhH!8k-x+oB}%SgWX4Rs(zaB zuPCy!YnBJm-3n4NQ6~NO^(@y$`1@Bt$cZ>hrTz~;fbftO5}R>HKao|NWLTPuo8u^N zgNH?3aqD)*-E>`uLgMdsKTY+955i4}q&^iiN%r3q4C>B{Z~)9KzED%q7XHV+40zv^ zJ`OFv>UQxs-GOvq)#@cbRm#fybxm|sJ15l^nMNobjc>@~75k&;{xrfgFv)wpat;o_ zb{(@xw&88ed!S)iSgi()hxuZU8S~V-_tLojQHo!{2`SR>Bu*2iRnK=lh!GS6I zT#hHZ6)@`)_6Y%s!EaJY6S0FL^=rBzk3?td6vp?8i4x z4qPW>*}V5fBC0vvfp^F+LxzKUqkcY*xik4Fh2h$?mlK3qtLl-%JCiS3WJzh{cO0LN z7CmMh^q|eW5sJ$cZ+~l2Mvts-LdcLjfCRW(aVVOQKDX@b3$qWyTDS`b_di}UXz&v< zeR=f!-mUim9=Uy>XBXBw#c2wyRm;9&Hvg>4*xsfu&hTIa)FPnDs^cNA6y7LFRYDKW z(>Ayb?n7<5)TD=}e(1^oE#ixBk+=nj3yi2fR47|oJtv6(hd6Us98w}dXCV?tCnoL{ zeK(w*qv8tIX+QOW$?*y~ryB%`jX1{4Iej+{`!729DNATPptt0Ks8Cu#F`;}(iP)!U zTx8=lHnXuB3>GepmJS(;m;R{Bi|R}z)iSVpf<59VHo4*7#Djk|JdPTI|M2}uY`y}_BYq5W zt)WH$>s~jED@w3p;%aWOozGncP4U5h6u{ox(n&q)uk@Azfbp5>W!J>eY5NO%>>+;V z4S2O(ct`X2h3O^7El>4B>jLhOT0Ld2Y-*+kqLhyJ*5Kd{CvRZ#wKX%W#w;Bf;YZ|Y zFexwUZEpY2##~f2bVe5L2u;HASJ(2_0N(xi_;oO0;sdiHHyCS{AkaI?F)?=Y)}P-x z@yd(qZO>O3fBPmEY%I15ly$E_gr69!4*o91lBUq~~KF*(P}}e*1{J-_}k-$n$Qx9-FS#EX3nX)U{^O ze-|agkQ44<{Ns*(A&lU*6P&eu)!=y=hJE=B$?GjYTtY13*Xvt4g>e-I*?Z+s=z0BN z7S<0q8|Y1Iw=&~RAp-Q=`s7QX0k7?Bu&dRe9;(h9pdYs&$?J$ECX`DY2f*itXv#q@+IU3y1o&>fh&Qv8ApR$zuo`Norvc&MOo<4$#zg(`EM={`ruxsG*DRnLSxsom5 zteHGIEnA$2aG`u$LiYymNieiD#se#9t+u6(Vv+Kp0_Qb=laCv78`%xwG){U5?akmn zQVONM(L%TDkI3tb%$cJ(^<4SI&=v*{Jdo?b#jWP0 zr#$OA9M0`QxSlVvYJQ(G+isa8ZJ1+djl-NS>_T$Z?kxTWjm~Z8AmrR$yGPgEs(&MB zMC*UjxA4P%@P;a&D3N_k78Mr7P9v&NWRiOP;`(ce`Bu|#-XBlPbs+b*t+>7}$Bud` zEO#aw(9}a^f7zd+B*Xeb1HEH;^v`3JjM7s`=*luhX|-I)4@#i{qJZ^x;-+6ZH_VG! z{oz$Y>a;r^X(1Z!50Z~arc9t5;YD_tiSIVmXV=-ZtuCP-|b+h5P}f?2q3z*#F7qoY~)6hd5|mY7@qae%T%?W`1$ls+H`NT51_v;tI@yfYvW}~DYhgV;FzVWLrxJzWez~nQpl>Z>Z=tby-pwEw!YP*gy_Lj(_%Gbfc(2Ub zQM5nRA1}&H7UHO8$dA}AB^uNAGR2mB-w)@s`iLQrp03IuK@b}g{jP=sB6;tQeK#Ul zoxDWXL__<2;eF`T?gk9DBK91!&zFa&MYknt4M3Q{g2v^4j9TDR$(Xyq@% zEh`vi63}ZGur{e!whclleqa}R?LH3?C3yzTxAPj<)gWAsL;sqLLo=P<6ZQ;v=9Mn` zZ2NwAhn=|FllDt4;%PEg8zP?D??AQtph^TWc6fOo6VrI%MjE9(^jV!rNSw#nuHx1g zhZVF^(;+Aa;zqERb1K>xdc}{D>?GviQ;Nd{-tWRc^PduGaW8leXF$&g>k#q^C8tM( zehWf2LE#ukVq1(7TO|Azm09L_`<}Ry@X~8eJ;ht#b#Q2fbxJ=?vh$=+<{s;(OZdkZ z>4cb0-C%4^INVkxxYrVI`%7;ipd{Pq7})jeFG1f(dU%ze`FP%x*4dAA;Q2c))z5ou zDkAMm9s`wd5aB@kkBzUTCPo7x^2p|e)F_tWpTOv`aEEdSn`C*2rQL+U(l^mJQExx^ zK7aV`Ytva6?%n%ZX*d6$?3bOCvftjXh%DLgQ(6+5gGXc=y5J;GgGai|&W}{cUQj?u>#Y|K5;Vx}>ktMej3%JD+5+Z5dkZGTh}0F>Ckf|MFVv@S$i16N>5+n=y8 z=Ed>y`+S@%d=w!s8P(p?``?b0|C>jvFUn8jv|73ZS3w%S#e{uLuJM;JkN2nzyDb>S znnZ1^OHYSdYf1!);k(7|WOl8g)4DmVx7N+07a)c0)69u>q%($?0+czLwE>%ii?<_` zV24hZ3Zx>+rm%)MP}4Z{H)J}El!vJ*nlgUxC^!n*KWH&W*P8m0vLi7Ia8c4q8U zF8+yA9^)TNY=XnKG+wNqYV+KAVJ&L>Z!R8QL`c!YOD}~N7DFxZw8t88hBz<=n;Q#? z*mU#8B2C-e)yf=Hj7`{IEN%5I?!w9fz53x+BKJjm5~F<|8J1a_0^5()%su8NE=E*L z+mvQk9m&t=}O_umB9GcU5kZogt4q4AnrlTUCdI|%{( z`mVJ~hEYpG@(d?9M0t6vjb!w(d%nj<^^_dJp0YLGC+)yb4@^))<6r5N&y*e~I2JQf zh)F}{|D<=SI?p+!uUP>HDehz1U?_=&x8!=VL!;&r&nWewH;_m3Os<_k^9;2BrZ%8U zX~CFTlj_@@5phcR-a7egL?DSr61M%C-Ad=WS80OmddW*dO#L8Ab6v7kpOsiF{Z7)x zhk2hd8(>X=|1Os&;mX~FaXRHm!u(=nC45_{tq*La)CjDiMC=pPnbvk1ZVw^rNaQib zWzPTL>_BG`(FN29V=(&&J`MV=NlR^=+SN}&f>Bn3(h!U6g7h%p<9m3m_XMF|(veEq z`qQ<^8ibOg+@wKWeszpy!oA~7Nj|=@S;D8xQTs}`ezQ}%1cp$28LWc5IKX8vWxAcI z>=C?GG}G))7k0>uhudIY0(AD9O7+)ry3C@FXus^{c^ofb&n1OTngv&eX8WTJV>_gx zimA4oWjGBo8L2XAB?HVh9qFe(VN=Sv6wqFIb1LM{o#}Xn^2(zuCTQ+6oV|*1L#X%p z1y-1^#m7-W=9kYv^DDP{RYn%o?~n}l(RDBEaE!#gdpo}s%#EZnpC@me4BnFEsfO_{ zdG}{zSl>5kMbfv_yn_joes*$KR8i;i)-C^(`wi*;ro-0(!x^Ny6tjNTUFpEDM2JJB zP%(z2;V#YT1zH<2JEcnHU^ezE*M;B;>+ea99WUOsem|r;2z*M`4^SmtHU;XkSF=Ul z;PiViSa?gVhuW}?o$E=OMpKwm%v;P@%i!~V)Ckv}FkMPCV~qW)02GCo=503C^f`OY z`ftwyocG{wFUnpk>eu2r+mONK$shkZ#fdl1wj!w~RexiH<12j*t5Z{Gd9VsoLGZAT zvgQ95O=sc`)&KtgN>a&Qyiul-twLnqrm_}NNs<_Ac4HUeWJ?hf${Ld`q)_&CvhVx8 zj-4Ho#GFd=wei>FmUa6J zBivHwd+p#v(VL}@iQ(_EzR|G1_tE+Rh0tff<;D}+ZQm>FwCA91uyYZVdrMclTgt7* z=y)MLOFgX$G+Pvu06t*tsELseJH>*YQL7C8S6xEBAouvTUC%r6eCAM~unF-<6`pwv z?b_QGQ6YLP@Xv3U)UhcY*?jE2dL;hvo(-H)IxQSrajBJ{qq!0@w#Yi zW+ut(zvbX%)QkHC-kL>OLEHCn+|g|`SgH)9KXQDe<-}v2z97)yc*7dh-VwxV z-os^nlOfwhl<28CiNGCe01{!M8kdaEk*!-% zHMyW{0$wLz`oM}V#kW^^qB5;5pOTIIB8seVy}%+;+~iInZIy`3>Bg{GKAQuP5%lo~ zx^;+c)U?}#V~jpM|1yWg_3^^R0{WwmvsA-u7imamVMxLxo|A4GkFc3FHl7H{)rFSR zUawfLrWag=>1Za~NzH^LijfO%1{QLIp?~MQ(Rc4R#}hkFJfIt`PT3obLZ7}C-v@Is z4WLLZkpeuLVH7%FtigoIz#u-KW=_t%!=YZ-ccs1@Bf)!J><}x5Frpjk8kjtu?qPJv zy9_VyHxKyo6JSNV&-QA((Xv_8T8$Mu%b9TR^uQ$=M$F#&GOcHg_UTPr5r4I^n3t8ei0 z($P&Ni7y)`91DU31%$-(-dH^1773I5d+`r^xJISX|J*koJKDQbnc~>;9*1wI@19cO zvbS#P%Bxcwed~~5B=GD+yjx@Lrw)hJ1gv9q{?!_dTrWmqz)bD>H7b{48>ro7M5%Tz z=C_d%smXO2zQyugu;3j@&@zfTAE4Xpc3DGt{ki)LzG~xgm6ix}`G;yG~g zAHLpd`+^_Pqq;bKy>*yI7VU9(v|+#q{U1uNjCAnlKO}c4RM|@WZ%d4DAeZ4SB%skV zn*}V79v3=JrNXgN-@zt7<96&a$#mJMN~7Y!ANYmHxdEUXxQ^~x+D1x1j3>ib+H6UH z)BVeNwRX%=K&n%rZXV637r0IqNe$TJG4Yu(f|6aY(@UH-30NmW$+_^D0iwYHq&1Bt z(Rjv!-ID`ydmQQTn*$h`gkpt9;p1%nqGj7g(`+3G2}#(kCi3ZPgwXW^a*2~wKw51u zch;!vIQ*j|B1hPktCLmJy}s+>J72^6NHe7-4 z(Y=w@S)SUP_iQHgEqOb;^1G^@K6`zE`_nNWUpl1wn3;mA_flVotxB7W_cS$|S-8@?_=M2rMmkxVs_B=u zT!U4sQa+l&I`vcgtJ0Cc7HutzwI3-}zt_B$pfBat$QaCg10vRBqZI!KhD;Ymsb$v; ze<>cN{WU3`Wypn0-HM(6-)L&zg}Calbx4k;o|wP5TPu24ua@$I@nO?w`A#CnQmmsJ zEs|ab{!)b$AAtXnMsIZleZXOLrqDeWzGi{+WO|F=k7o7yW{flR^X>r=8NbXi?(OCO z>6Y}Rc-_w+_Wc8B;C5&{QSk_#)LbV7gH|f9O}5D&%}T|T#_uDl;1A^b;IMG$%pe9MJH zSt}0EkhyfvLER9)Jczn!+BhBr5)h7!l!_8XzOO*zzzr$?njU#wSnyNtUoIA9HAAt; z$(InNBM|e1sq_WaI6Zx30*CY`=fk^{(FCk>-)FM_lHvW|aOoSOEW&fCX!cQLB49^r z_(R_LkP8;V zJ9FXL(ZbW`+MbDRhhmNt8wfxpT|1p^+sO;gOP zSV-i*Drx_UBE&CcV&H^RoH{Ykuffurv?{e+s$v}d(JATO_ILB^O1xjx?|gC+hl^Ni z&B%Wdi!r|jR?vJ`Af3*t;d{r+I^+sL)CHzLEq}#ssM$tfnik}5u3PF;bpvq5km6Oy zJ6N@J6+wLSMl}H{tknG?P3MS^n-`{InDdgFLcAfkDH%m%sl2fRSP%kMOJ+j45J>Wj z32h82$)``vf$LicstzHPcN9V8<5MfNbu!9-LA;5EFU;Y3f#V z;!VpTLNb&qo|bC4lYl*pbYssO*v^FP$O`T6+HoHvQY%mx_1+L(C*WU?;p0U4$6y)l zoW@B7qm)?q4_U;rfO`@he0*XTiu(65=+uJa! zy5J+JK8wY(rjG7`Bk6LAm^Q;S7sS?!`_hT;epDwwybG(?1I?rJNQ`AlwI&q7^{@V; zxkop0`Oja-xg}UqM;qHWZeU)&0!oyyzoTDT-Tk|Q*+#knekzbT1y%wPHNzd@ zR>O0UAlJz}=>9M9yDfNK41VBM6-Hs-=@Rs_`+uKHZp*vcN$^96rG#G60mR@S_%W^;O3=Sgm`$?Le=TFbQh9*(6S=*wTWN`RnmyY>2)jtSZ9QFoHUp?+a{Cl-^C

w<62M>Hl37@ie4r4n2TA8s9s4QmQpsiTX>zkJRFIg$Lk ztMGHz_c6xcy*+rZ<%ha&3Xa_zW{H=2Nmv>nKZ~n0(krC4pUVH+!8u-wI~9vcP)S4VfD&| z_fO=a#qON_Sy@iE(5LrYo{o&Fa=`&QoA9$HdocBJJu8+ z9sZh{xOQz58Uy=AK+KW)E|LL6glk(*Co&v^f^uS5NaNYII8dn8FAQjHygWpG?kvN` zgVM}=jV2JE^-YD?0Zh2*u(~2A<7BQGz|p`uadcPmwGU``taa*wQ1Rwz>Sc+Enr)6t z@mN`?`?|Cji0M2;aech__G|L1b3G5(v(rzf*pl8Xm7iWEBl*)Tm%~RLi>}3#W2sU5 z0v7#~pH^#MnRI=c99xT&bkSnIi^~nnE!V146mMHlTtD~ofmx^?`tHdvJ=~b9qvHcB zyk?yXS&K7D^Qyn+ZWYK=?|qsg$W@!zDesG+zZNO=IOmhG(24z|`wZKs_eE0XV&=b3 zufKn8HG3gDM5@+b(Qb?~>@*rJPUkY{R6N`-et=>|(Y)-oo_ zuJ^ei-#qayOP{Y^Ipv`Y7M%L4#8O#_rM-G|9ign!nH2iJlA7^XZXM4nLr}2lkeQ@Gt65J(9oUuSxY?pC%Ls_ zz#XKN44l<@)0pYe{3}g$j?Av_4sC%P>7JoNrrws|RUa?fmdk&Yx6&z?&)4#Dk79lP zbxU8o_v9ZC&wn_u9<1|t4Okl(>fP0O{esj?h4bAK#U3h{{e3(W5yblKk_WZnZmH~g zpw0Soa+&{(&N}p=37mkRGc`Wxq!f~PuyS+<;;*zISC+$tJ3k@^{4X_<@_6JHS6yXwy!=8XB%^R zAU&l9)GqBSUx2&Cg>gO<*HNK1p<9;XlsGE&m5jcuzDbO@d9nPTSl3Z`>T#Q1^ABB$ z0dLdD@g{S`7P#ti6kU_tJ{zl>sXSm-oUvx}Qr!?#a4{*CB z)$RC}jLfbU`@0tVjTMQuoxlbel98mSUtB0p{Wk2VnG0B=uW@YIi%i%@&v4%21KDGl zvi22opfcH&OLpbJ8I|ZqPC^pSc?O=wHNg|`E;I+QclEZ%TjXI#E@hpej466vXHY9vOq}TNu0z4aa2AolmAeLUgAp*GVn|$OXweIE*#tA@)i% zZ&rDEi^2uY8!V&LG~g#6MCgZ?kaHC41FSi!U_sqXXKMjahUe8tg*f#GERz-B4$3q&8FR?Oiu`bbNnJ?TdM}rc+UR>;L@8Vm$+tFyHrv zXY>+D--(=ojPUTh+P&={a%x8iQs#aJn}4GR@$&7f-a4O{n`V}23Cr6j`2D|1wg{LE zR!hzD{8O}dYSH7qBec5DV{zVU_+!se@2%r@H{z(r1T^sSH5<2eR#iQ}D0KPj^s@@b zvx|8@%w%Jyez+&+S!^&IZUvPc+`Mdmn9w!Lnfjk-$y}D=Y$7YIV>R&>-WvvYhZjB( z7`;3Rode|3+~H1a!NS>LTFyJxvTOj~68|}t_riv2vhq;u{0bYPxDqY?I(7yd2WQ!D zz{lpxJ7gR##=dksu~-tcTGW?5|2mLxcLYCp)W?4P3~`3};0c(2>x5|(AOc8|8Jm_Q z7EACGx?3=&sw)&j-bRvFVIPzsP4SBCQIT$~Vf%WzCT8^Sy|6!T3W0>()BpKJ5kCSu z4WfJbbVa_^=&K#-$8~ut2erBw;0lfEFwh}>8T-`pKaF_QC>xa1KX_XwxUd7>C@--FSB7MS zo>@+CCw_^;M5UpYP?qk3&r-vzjT#S?V5-?cl^I*3co=C^2i5rtc9lg=Ar&b7q9>;w2%czWE}o_SxTM2xrr{^isZ%U&@w>E6PF$+~ zt8T6L``(@;<+pK0U3H$R95fHN{UK%#QM*r<>s}sMh^;f0$lFe%F3I+(Z(6y%cbhuS zAN0x$+hA^A99|YKu#w?j^1SeNj?v&TmGDk4hp%eOT8aC=%sWFhYA8CH z?zx-6tD@oWuIy~t12!q!1K?T6DCl5&E!^)i_NrxS-O>e=Yq8Jhwwl&+ zG32#(S02`-(f^-F>{!eijnI$iBpdyYZ;?iwU(f7&tc$2Q|1BbFYF&tmAAfcFRWei5LyWzv-T+0K7R5XsWcgY3-jj=%^e3PrWQcwg zh#zJiU%e5$*e_OCp%hTnbnFn(8ye`vdef~Hquun?HnSA(Vb z5&DoJWejs181U|rZptNHIn$bHle8_1quRc)I2qOKUiRB^5>A-JyDgtqmi>)4(M>{; zL6M{$Fgz0~ys$@ESRDv@sZSRZeR1aK2R&m7%!}Sm5$zNWiSoQFh})IL!yXuFgdCZI zm^UCsj$xP(6y2Ud{?!zsd|PA48lG7vK6+49MuoH#%M~WiX}%*4pn$Y*f-EW5NL~)N zS1xetmPqagXC_WCtJMsVzQ8Uzt^EQr?fjtiUq z)mUl1;TJ#yi1RITNjWNn9YLQ&ucSx!xP(I^9~}$rn0y->#Xr+BDKxVjkhx2pX-xHO zPm!zSXXSh^9(FA26-@9Mkbhy~t&);|K#g;|kkD@n6 z^X7V|Sk2nZHAx3|+YAey?ausApCl)sx3QvPzWyF4&MJj*5F>4Rf$ju1@YuOYi=ixeANqEeyr? zNPhlnb9{z=N6<*Ef+WFtW#92oo^m#)Gt&w4zLr&FW>+i8pzHEm9LuO3>V40;YP`|E zl?I$*1HJ_u=eP@dcot{lB2MKD%5?Ioqsv)iw3McveD;^f?cCf|R0Z3>J!#T1(RM-( zT-4M}GjF7gtz|_C?Y#Ky5xmw6*ZDZ41ZZ?pbk4KDk zgK^&`;t5nU(ReIpYg}!17uAUuA&esxs*A@=R zUY#|>HYpNU?ZC5L{VgEB@j1~eSZtx#f+8Zkj{SO=+^AGmMOldIEqD&&kFZdYm5$r|bvnpGR$XVXe8jx@34^h}uF`Yfe zNKu#b7^kAM$F+=_iidy3!92scu`2P-OM>3%O@fZW;T@=f3-_}(2X$qy{_MQ7!>Q4K zofLZE-+u*(lG^SkrPQx;j@lSwN0PAjQQ61<_zPJQYNqc+l2Dmlz4VJI2mnfh>0y1prNn-^U< z_?Gx&gM(@g)s^^uWsg}CF?~mevgg~tB|gxIVd@#+#k1m!26^;pDzhfLwGR|i`@KJ^ zhU%jt%N*LU=TiX|gz|>8FlKk2>a+YWHS$1Q%ZirNcy3R9x8Vi5tGeEb8aR6J4#Onr zD{C7xTiOSG8uyak1n^y_W{_OJBJw&gB=a3bo{;O71bKo{`{(o_^JK^cf?>#v`NwlS z?@mwM{WpNI?{{`+__l?5p8}bA`K-aqcnc-fjhnVItY<#cLH@|^O8pF56ihl|7 zb;TjmT39&bv2}EozTl&|{QRW22-);<_5W#iwho!tO)c6C#X|g4c%v7gMS>9)e3ZNE zruOBbzPhqXwpfWfhEDBk__N%(Xj+!(827%S25{09AYT2==R!L+8 zVb0LJ4*cBQ4|z2TbOXO!g50>vgw4mfNmAo5Nu+rT*J*ci8~Smi8RS!^?eOtiRGB5@ zzIw=^!fpxp6=PmmK;O?K+ML=2tP+DKrm@9~(R2T#XZ7>Dm+%N{I{z_#(W{?H&S+n{ z`2>8>Oa~jwIs=e8xz-aD-+T4H9(nMr&V4@8>&K*l-j%YPKkkN;4K|$1sb@*S07Yks--wG}byLxzcv?uLH_HZ0nUZ_JnS^y=w=N9QG?IJH_0okFuX)up^~Mvy66 z+0sSRhQM}Q9?#HYf105h7x4Jos|?lVNk?B@ZqiI2Q(gr;Q;A1=+9-B-34SzN*0&Bn zLiRD9fafh(UCFO!D<&GNYIGERA5I20e};-0o6VHK6)1v^3EZFPJHi0EgoSVp$!{k5 zUM+_c@{0354Zl`IdGh$61l^sPYmomEf-X&N=W9*sfU290HhdfRU(1RqpTHA;V{SwB zlFOI^y1-{4Kq%7_?CFy22fF`z_x-G$3`F^qQ())LeB98^Oc7F$1r?ZpXQ2L^WECI) zg(B2OX9KrP)5BRfqByD?-y~>g(6czOKgBYnL|&(BfUwsKi)-U0^MMB2q|)sL!!Pgo z?)J1L@EAwUcN|Y86EmR+V##tzj8%L6JFTw}KV;^3K)KOjs8F?qt#9Y-YhQ={kq4rG z;#;;1%*^~YC{6l|8icS;3mE0JwT2l03G4LWpV}pT(`c{mu08}Eg?XPBzKn|16T4lp z^j|f&F@yXw+xrJo2c~=hG)df8JjNvFzWoN}cE9RoYg{d86qI(bj!!;3=Mjgw5_HmS z?a-kZBZ_yMJlWX%w-eTCT4sCKfB5x)XM_=z_*cHF<4|mIP5IXAs|Q_n0aKRCa3mP& zbQ#Rp+KonOTaILZ_jv2Y|JUEYGw!gYGjYCW)-Kf^lj#~bW^?uczd`e4c`WZfR#bo9)-C5&$I=%rkV?ZT)WcTTGAVhUl+^6! zK*<`hf@a{A}o93pP z(vlWdWBuj5syNRf>cgFEND_?FGEE(Z3pU@W*duaiQd+?COMyi6r;5sxgPOKup zgyRA(ck6VZ^DawGKr!pU#?aD{L;J5xXqcuV2umjzsX~q9JzvR!09PW}Xf9n13SJw5 zX7`x1(=Ae{5E?ovkp&6;(DFKLOI{K3?D?~W$k6qn$71+d%Zf4TUmfBwtzscRzt{|# z9jbs4zwIaB0XnUQEfZKKkni8YA?BK%b)iZylw%7F+_@za&_<&3%N6aqN#$i|!))s$^|b}#H|hA8Vnz?K+=HRI^k>k3IT zxye_%bf5RNIm*l~4qu;kvk$v&>29??yrubIc&n2laAWKHd$3eQDC^v9HaGQP_=7)9 zQE^LO{Vi0y?_8N`lF^YHldRvY3R!s3bidi_;+x7ldoqPyJh|OD7QlD~w~hBg_yxaQ z_i|0-kYEKyPp7iUc3seyF~9h^98>T#HtU{kJKX+RSzuq+Pm2#`c&JCZVU{)m4-Q!r zODnG4-(O>J3az}CKCrx6@`iIl$u!My?IonCX8Q0@_04TbO&pv$MX&vLfLpr|JnA0r zMd(vh*d1}G@Jz;>^f0HvWJ<_UOLCXWNHCY6#j!6J<72pG&RKlr?2osNhdQQ1re?|j zM!|@~2_^mc%yu9iwe5i(5m|fr-AlT5L85-gA@PsbKzv6)22^&1%GU!g5NAfbQFJ>A zzcx-jN|`}%U>zBTXLDMEPF5ccM=hrItug$B$T9%>aCK*fVKI|d29?H3|pi6lm=3stFSQB-TgSTqg7DlzemcF3T zwt7Fa^a$j%q3ghr`*QmOmRqjxb$7LpiKmUtfU$Q4Kk*Zwsi>AzU{y28g~#I=c&23? z?l}D?g8+N+6Q2sC+&<4Y08GnZ9vxjlu(ekK6JT0o+{`+_w{L{W4|`r|Ai`SlxYEB?1jGE!<~T5^6^rQmXD5|9;RjGjNHYPXjBU{qDt) z$AO>$GkI8t!(03k;@Qz$$17TI^Jly7L^ zuGY7_s~6)3uf-5Ud76$-R9@4lU!Zy?w1vn-WO%XJl)_XtlYaehbj1h;TV1TmQWP~#zP@}-Eh4`+sIvZr_EhE8&mbjc*1tNWR$Jse|`ujsoITu#=SE^Tjo`Y zN3*~D_eHvi!dl$Rd}1>s!Tag&%ezeX;IGbnlfSⅇ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 a!ZcNe>tkcb^!}%)pF4W@bt|;(U;ZB@bW=J2 literal 414027 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

sfZg`$uL)nC^LKfi% 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

HDpy}6=Y>(C1gcp1!Q?-Ib>O6 z8Dwc>DP&1x2_*MnuHv{ThAfIKf-H5yrWX^^RrsgNm=DUivL$&g8rNsx(=iI54A36Sxz4|B~7 zyW#n_`!IJL``g{Ik+G05kui|bkkj?~(72Z;@}1uaU2iFOd;Q?896y;OEF^$fwAEkWY}0k&loMkq>NoT=#Kt4|x}P z2l+ShHu4toCh{-j4div?HRM&~735{)CFDiq1>~Q|^T=~Z?!#PXad8HD8hHwN5_tl7 z9C-|R6nO-B7`!LroTdKyF8FLvBTGL2gEFLT*H2 zALiNsuSc#!u0^gvu15ZXT!s7@$$gk>B`#JVmm`-Umm-%S7b6!T7a|uRLyFg09rzCs_Nx6n)IDfAG!3*CgSLKmSk;cIgpxwS`(jO`(S1sV-F$stQ$v%0eZfqEJC7FO(C? z3T1@SLMfqS>c4Bp8bzrq;wPUqqwPCep zwPLkowO}=8HDfhpHDNVoH8N#3V{;qwvH`0;s~)Q^s}AcYR&7=-R!vq7R&`c2R#jFN zR%KQtRz+JL$J`3MEYB*(D$6RvD$OdzD#Rf$Wa#hU|*$g6xd!gzRY3hs)1 zvm&z~xdC%$#ziJ%Mq~zLdSp6eT4WkzYGf*8N@NOTa%3`OQe+ZjVq_v@LSzDDd@eH0 z7s5ux`o0#KI(7}$v1_=FUBh+k8m?p4a2&g0k*Q>93P*Ki%X zhU?fhT*t2AI(7}$v1_=FUBh+k8qQ-^yU2_@c0H#L|A%l^I3t`EP6;Q46T)%fm~d1$ zA{-{nBJ+@jeisf32Za5?K4Gu0N7ya=ChQV+3Oj`Det5#SX=tmkMc6EC5;h9I3LAv= z!a8BCutr!d{33W(Nk0o=!b)La6Ri}sl{@vC8wKrG)SAM8UgjW0!TJc9{#UG&+e?)0K24Lx?VDOBE4SBT;n!MFeUnKyV8#!6`WW2>&L0 z6}||cg-^mq;e+r#^8S0Lp|`>t;kEEecqv2(;lc~yx$sPQD*Pin(GOJ#f9xNMs1Wwk zsDeSiP6`O<;JD)O#>iRan8*Fze&d3}5!LN<7jt-H`#YAuWBNOWzoYv*n!ls^JBq&p z{T<+M^L>2LqX3-Wy9K+sozfARNce}D4#M}L3t_j`Z8^Y>eSzw!5Lf4}ng zOMgfBJDlwadf^{BCPIrU;XTNy0>7f-qhfCyW)w2&08j zg8#L}yu^>x&dl=(@0Qi@+kj?~(72Z;@}1uaU2iFOd;Qe8JQG z0)CEshJ1?r2l)i~82JeK5c$BS$9*3c_mFpycaVQ0ZzFFZZzBIf-auYQUPE3*UO`?) zUP4|(UO@hdJdZqwn4stfmq5|TE{W0o$ z`nPq=k16FuX26NefD@SkCo%(0WCobX><{>z&za1CGnoNrGK2bJxTD3hZ>~1KyXC+6#-)H6cG?J-j+};^ikyO+ zjGTm=h@5~Nj~s^_iyVU-jU0vaAV(rcAcrG|ne?~ufaxiibav*X5vOlsPvM;g^ z5?`+g=mqyg_CR(=c0+bWc0qPVc0zWv=?Un7i}uKN$hOEf$kxbK$d1mAS z!`yfE8fms=UvTpqd=@?lAB7LXdkbtP-)ZQr@J4toyb@jt5kk1|LU=Ab6P^nH2u}dJ znS89FN5VtlfpA~AC)^e82!9K=gRR1qo*mGtuPvZ9762<3%xLRq1VP+BM@loUz` zKMKW#VnR`UIq_u?4HXs&2?d1$LVh8ikXOhf|}V z8j2;v6k-U`1>VHwzly4nC_k{iC>jLXf)_K-B)*r01tTU|B ztW&I$tP`x`tYfC^`-PA4@(AlN>k#XA)sQtW)_T@D)>_sY)@s%-tW~U^Sz)Y|tQ9EF+~vGn##+i+!dlE) z#9GK&zzSvgSRt%nmX{U8n$McYn#-EQ^2}z>V$EdDU`=ODV@+jEVNGUDVohXCV2x*u zV~u5vVU1>uVtF#MN3uq+hO>sTo`fYE9WChn%zybcn!q@AOCA^-84DQ`83P#|84Vc~ z83h@L3_!Y(E~FFbuo>_T`4#yE`5F1iq&a{3h>H)%_sDn1x5zih*T`4Mm&gbtzD5)9 z0)CEshJ1?r2l)i~82JeK5c$BSC*VFV?ji3Y?;!t1-bUU+-bDU|yn(!qyoS7ryn?)p zyo9`nyny@@c^-KV$*<7_oW;c%7cSB6lFSBex;9BDWwnBR3&8BJnkvfDQ0^c&Oy$``BPxruuP-B zr}qnQat3h`V8BIy0T%%VTm%?!5nzBtfZcKiaTQ>|Re%9k0R~tF*x$oNfB_c)23!Of za1mg@MSy`;@sIZ0#2?d1$LVh8ikXOhfi%t9t1 zqmV&JFQgOF3TcGYLMkC8H~8k6l0riR{twRs9{p>q|JhGv|6louVdk%;NjXT9a*!tF zApfLn?mx}SL7J6=PU_Lnq#UG4IY^UokS66IP0B%c;_n+6{9}4;=d={AEDy5;4LJ8qVp}0^?C@K^Y3JZmVfFD5$^tg?qk~`Rxwj% z0-slumql2GS%p{ySp``6S@~FbS$SBwS-Ds_SvgqQS=m@wSy^m(9P@tQWoA|;7QZ+$ zF9WaAv(mBBveK|pvr@5AvQn^;vy!orvXZb8qdfBx@iHMR0V_T$9xE;@4l6b*7Aqzz z1}i!%8Y?O*3M-Hmz;d%ZF1C}!XW-m#xSIQw^@a7B^@;V7^?~)C^^WzH^@jDD^@{b9 z6~PMkuwSsAv!1b@qUJUGZ?2_1|HF^r{@?pkxXlZZ7BpTiXzXi~Ry1C_qQUEy7BpTh zXuMj`c(tJMYC+@Gg2t-_jaLgAuNE|3Eoi)2(0Kg|8uQwu6^$1w8vC-T1&vn=8gJx+ z=1=_*&kN^-KZLWw8R4{WN;v6<$9qCU$Ax3UQQ?SiSU4p7E*umN2>XS7!d_vI;Mpzx zChQV+3Oj`D!Zu;6utnG`Y!WsKzX}_K^^vbl>ol}hSRnWx(f?0iRC>d_EcQ`DDQ7 zlL4Pk27Epl@cCrG=aT`SPv#BZFZqNr;1kM#Pbh;W`tW={nGrsp4ETI9;Pc6V&nE*u zpA7hXGT`&cfX^obKA)a=oG{SQsP>6b1U`p^wm8=q28Pax!ufaw2j9ay)Vzax8KTax`)j(t{j{9Dy8;9A?tv z3LJ`yA;`hVLCAr~0m%Nye#pMaK1h6HRA4W-C$a~!JF*+HE3yl+GqMx1qfJj>2VAsA zwnMf>wn4T=wnDZ#VHbXW=HbFK?vJ$c)vI4R^vK+E3vJA2`vJ|o;vILUf7!_C?7sZf8kwuV&k%f>2kp+5#Ff%SPAu}Q~Ak!n$A=4t$AX6h#AyXn# zAd@4LA(JALAQK}KArm4KAmj6mDKohg^$XgItaL1-T0OGm>xG z3S5bc70BhtWyqz-CCJ6dMaYH71;|jO4;g|CMtYG!$oa^5$hpWl$l16zqQniG_FcVc z>xuJKBL7R`tAs)VA-)h#h-+cjkgwusD7Fwwh$+Mnq6>QceHB$BQG`GtKyV8#!3mf( zEpI2O5vJgT81!eQZ%@VjtOI3Vm7_6d81J;H9`H(^)gb2xF>g3QDPWFq?WH-!wPlWRZJA?STjm(omN~|?WsY%enNwU_<`mbKImNYQPH}CS zQ(Rl-6xWtH#kFNlac!AXTwCT8*OocOwdFC#xVFtPt}SznYs(zt+A_zuw#+fEEpv=( z%beocGN-t<%qgy^{NGsS6xUvvQ(Rl-6xWtH#kFNlac!AXTwCT8*Va2eZ28SGuDvwJ zxVFqOt}SznYpOuouvP!VB6Eg)-HkFGISn}#IR!ZxISDxtIRQByISx4%IR-fzIST1P zjzo??4o40%Y0k5U;$jGLFme!bAaVe*Ke8XPFR~938?Y$7;GW1H$nMB)$gapP$j-=4 z$c{EWQ99tFJ+d9LEwT-=HL?}5C9(ywIkFkDDY6N&F|rY|A+iCoKC&LNF0u}i8?Y#~ zaZw9d6IlaU9a#-o6nHZS}nGl%(8J~;HnPIy}#|t`C{d@Um=QlZnE8^ADpn_0d zC?}K^$_Sp)QYoRNP(t`oC@vHeiV8)9!a^aTpin@_FXZDw!~Ci9YABD8TgWBk6mkgJ zg=|7rA&c;XkXgtiWYpn$a0U&f7t#r7g)~BHA(fC)NFgK_k_kzLBtl}nJ13Ys1oJR( zhhV@Rf&q632HYVSV25D72o%f>f&n)O2HYSRaD!mL4T1qT2nJkS8Q2X1-klT79fBDO z)E_NC;10q3l1n2_!QqGZoA6cmB77D;3EUuuMi~67v>3bg*n1(VU{pcm=QS{OxMsfVX81im@G^ZCJGaT z@xnM^tT09xEtsE9!msTHNB%iR>eogH!-ZkOP+^ELSQsP>6b1Wc$jP9OhI$LV zgq}hVp}Wvc=qhv(It!hIjzR~ay#XhKb{c9cv=Leht%R0B3!%BtOlT@J5gH4PgoYM& zG6-&z;h^9-Anh0S344V- z!fxR=VVAH|*dc5ewh3E>Ey8Axv`N?~{3>h^)(h)|wZa-p`1`w zC?k{>N(m)}5`K6>e$-HLp_ouqC?XUV3JC>;0z!TvpO9C`Bjgr5xul#z4k5dcO~@)_ z5q=Od3z>wBLIxqdkWNUe`!6JohEfZugp@)GA-RxDNGc=|5(|lhghB!#e&qcZPeXBq zI6`b8mJm~jAw(CV2~mY8LZA>JxcP64m}i_zLoI?k}IVT>?Z7$rpB_9HbiLKrT1hDk$(A;Mr` zkT6gfAoLgd34Mh=LT{m$&{OCU`Dg5|p>9G~p^MO2=p=L$ItcBBc0yaBjnGI&pyr1KF!ZQ&Cfo~&pyr1KF!ZQ&Cfo~ z&pyr1KF!ZQ&Cfpn{Ooc1%mj_Mr1~^J`xU=g zjfP$euY{LEgb*&g5S|Oqgr~wk!V}@K@JR4HlpYB8g?qwX;g0aPa9g+~+!X#2ZV1CSJoJ^* zP+6gjP+BM@loUz`KMKW#VnR`&h)`H4WPrm%UqKBO5b_K8guFr?A-9lA$SLFyvJ2US ztU?wGyD;_rprOn{CLyDcK}av86VeK4gw#SRA*GN)NDkN+#{U1876tZ4i+KKbe;<@j zGqX=KvrjX#PcySmGqW%9=REl|Gy60%`!qBAG&B1&Gy60%`!qBAG&B1&Gy60%`!qBA zG&B1&Gy5Wc&XX^4X8ui|pIyREVTZ6?*d}Zhwg{VrO~OXuS7Afs{kL92>x8w!8ez5Y zi?B-gSqKwW3M+)=!ZKm00q?&h8d@wY5*7*zgiygJgb2ZcR|pd33-g4z7P$ZBXlS-D zOPDFl5T*;$gsH+5VX`num?%sT#sl{L8>gYM!Wdz+FiP+UBZU#daABA*R2U)*76uWq zoW6k?I=5oX_w_Y|P)*FCnwUd1F^6hm4%NgQiiz1iA3`xRTWDeq)x;dCi8)jgbEqcf zP)*FCnwUd1F^6hm4%NgQs);#N6LTmhX7hXq<;-l5%>S7QO)4Z25(|lhghB!#z7S7{ zE5s3E3$X}~Gc=}#VhGWNXhKvWiV!FS2yVe8I0c6vzHh=;KRmuK8u~1J5G>Alw)333r7%!rzg%_iYW`5^f5A z2{(l6!ZqQla7DN*ToNt{7lc2x9t_R>e`!tdU-=qBs3zu6P0XR1m_s!&hjL=J_aA3w z15M1KnwUd1F^6hm4%NgQs?S`gCgxC0%%Pf?Lp3pnYGMx6#2o6Mn9cp?pP8MZnwUce z_&-0P{e^x)U!jlCTj(Y96nY5Vg>FJuKRlsbG}Kw>By_?0sj1LJXe=}m8VU`B`a(USu24t#NvJK<5^6?%7Hepzx=>B1DpV0F3zdY5LIt6` zP);Z-lo3it-hZVuR8lA*{3sL`iU~!9B0^!IkWf%4AmkVF>7XDquZE_E#TpZDQKGru z(LZ_dinogSUJ>3Z2E0`ac&ixjRx#kMV&LJuV#IsJfVYYPZxsXHDh9k&40x*;@K!P4 ztzy7i#elbp0dExp-YN#XRSa72nQ6p(#elbp0dExp-YN#XRSbBm81Pmx;H_f7Tg8C4 ziUDsG1KuhIyj2Wp^OqVD1(Efq1K!kvtm7E#wk%3OR)ALN+0*@c(dkSK(2fZTRjd6C^-_ zyK8YMF2&s`?(SaP8Qi6~I|PT~Qrw;5?(PL9nM`!Ob3Jor@9SC{>%Z1<@NN8_^L^oi z7Lt4JnG7^L@e7g76Z*qdS-F*k$V_A+G7=ex^h7!$Es=&uO{5}H5-Aj(KU~%C|EI0s z|G+B+*1yeF{spfPmx)WnMdCvA=ihm5og>Z?XNc3pDdHq?f;dhbBaRYBh{MF+(Vu^Z zxOI>?K

>5qpU}#BO32v6J|V*gqKL1v5YdNuuSV}A*788qzg~S44J~5A&OUxl=dqSUoe{yRUF_V}snye zv3@HiC-V89e@#N{_?|zw5IaEn%Xl)bj3fPIY#B?&lrf~Qv`Zgp^B5~iM#=~oF2gLX zKcy3@3%3lBE*UI?q*MNo-{m){KMEe}tNM%lEI-MQ@`HRY-^sV~jYmhU*SdHmU&cloE_5| z686{$ex?UWCmV~Cjm62v;$&lSvavXSVG235vRDg~la0m6#^PjSak8;E*;t$zyaUF` z#^PjSak8;E*;t%xEKW8SXG$Il87L}tuPOgVcZHO+(ZcBB7%t^!b$ufz7yYw ze~GWe7fE#f9|!-Vx9dEI-r_Tb!&dPSzGDYm3vY zE!O|b!P??vZE>=;IHLy!Ym1Y$#mU;@WNmS>wm4Z^oUAQQ))psgi_^Qd_&5hd{~Z1K zt?5VfCH^4#5WR_BL{Fjz(Vgf0s(jAtj~*~xfzGM=3p&-#sc$}bM%*~xfzGM=4`XD8#?$#`}$o}G+mC*#@4 zcy=2jK!DyPWFa*~`VC&=+~oE$61$kEavN6C?L zgdA?^u*V*zi=lFe94rUPfpUQCFZ;>9Qh&Wg>^|z=vX|^Bd&usxo9rsP$j%-eu{-Ia zqwFBt%XYG@Y$IFCRY|RUEo;e|vWBcK ztI4XeimWUv$%?XqEHBH+va*aUElWxB*IUFcsf!Y_xGW}%$|AC`EF=rc0#bjyMeO|Q zd@`@hBXi4KGN;TTvrF^WTg1+$i>xw>%q%m>j532vFVo4iGL1|vQ^}Mvg-kA!$)qxg zOe_<{^!2ws=4buKr-fg9&-e5Tkp42Bj4R_vKN(xbk}+ir=_~EhN7_8bj*^iwLWavQ zOY74jR2Oa;B3&|A21%#M>%XjjveB;p(`?W4!$(Qnl zd@i5Kr}Bw>EFZ~-@`1cB@5#IJj=U{z$(!iUQtU&zI4BRu{c@k&EBDCVa+lmG^?Fk59qR3Jo7^h5 z$jx$-+$c9l^LkS3^}1Lm*UB|=wOl1v$`x|CTqc*wC33M`Bp1pBa=x4==gK*9w*J-^ zzXXA8$HvfqXZ(LWWcbbWe0RSYa=M%*r^+dEvYaF*$_aA394E)hF>?M239U=V<%p-Hl zTr#K3A+t;Kkl~k27g=Q%nOSC%8D$2UUZ#_2Wg3}UrjjXT3YlCclSyR~nOG*$Yps5I z$Y^OhZS(!&``Y)B?@ix}z9)PS`0nrx^j+>d&v%;dSl^+(fB1IsZSC90x0Y{3-;%xs zd~^6_@J;R;;2XmpX8&$~Z+~XLYrkqgV?S))ZQpEPZC_-cWuIst`5%AO`TxilB!en= zSH&Qn;|B2@H>fP%#BN^K3dO2Df|(JK;mvyy1)@B8dnhoCqUA2{#c!xD=je)4|*dBAmnz;ydw; z_?P%fd?7v)pNNmd2jaa6e;?;N@2#MUfj$5GF)~hk&)A3)ApK=L8CS-UeloUiqcloUQ#aPJ+MzV-x<@{upPb=ex(5A*ah}a;lsnC(B84qMRVd%W-n793w|d zha4qG$`Nw7rNbU)m@bCOA#$)BBnQd?vcK#n`%3MPar&rx%U-gl>><0$ZnCTFB0GC@ z#Ob7qjW2Y%CkehO&XIFY8IOKgOx6i#oEltR-v8 z8nU{qCacOSva+lsE6NJ8yeucn$}+OFEG5nU7^kEzO331}m@F!b$ilLaEGP>|?T>Nt ztMkdcGLOtHbIF`Chs-X`{un2lF0#rjGPBGiGs+Ayy-X+5$}}>yOeIsw6f(I?CX>n} zGOvVln?WUKd0q9@UV=uUJax)NQ8&O|4oBhi6qPdM69ZHYESYoZm=l4wCRCz=sWi6%s2q7l)M zXb}DTQJ-7&h~J62L>;0wQH!Wa)F7%8)rhJ@6{2$V6PZ>2KfQ71|G=Mlu|A{N=!4kk zgV^YU*yw}IM(_FjGb_CnZ1h2F^g(R&L2UFvZ1h2F^g(R&L2UFvZ1h2F^g(R&L2UFv z-i_Y+{PV8#K0(nN{ab#2-Vm>eSHw%=1@WACMm!~+5RZvR-f#pxt@OWYxD z6Ss()#0}y)@egs0xJo##P?w2I#6{u)ah^CwoF&c>r-@Uxp&5TJvXK ztdIOP+=^ImJnyLeqn3>w`!oH$Ss#3Yna{z@=V0b@F!MQ>`5dhI>{$(h8+d1BRD6wauC^x zUx;i(Rw4_LnaD(BBr*``iF8C-!jXnbO{5}H5-Et}L^2{Nk%UN0Bq9~m5)+8=#5iIsF@_jTM1LZU;?7871TmZ#MhuPqzYXEmU}6w4kQhMpC;Ab6i9d)w zL~o)O(Ua&A{rT6OTiuARL>Hnn(TV6tbRgOj?TEHS8=^JQimx#Qx8&CT|BvT@Ba1z? zJ(1nd$MXfJ|9AhYoDV)OhO&#H>|!XpyhGXH<6|!Xp7|Je&vWubYVko;9$_^J(*~L^2j^Z~Xl87L}i7+CRa1$YfiwGuy2q)qAL47B_ z5&sfji7&)w;uGo)gcAr^FNDG4Y6aNIW3!6ZeR_ z(Vu^JxOJPjMcgEA5Z8%+h-<`E;tFw@xI|neE<}I+o#)m$;w*87I8B@)P7)`GSj~n0fGGp8T=`Z8SxH69Pld)wi8B@lP zzS1szq|IZTC>bduWVj5ov|dvW)rDJzNS6$jLDDII$nWx-)YqHhd{uvupXDd{QGSr` zwU2 z;;OtNFUw2vqP!r_%X9LqJR?ubQ}U!dA&<*r@~Au_4@>j)rZ|UmaZnzR`{h2lSMHI! zg!E$cBr?@ZE~yJA~(xTa--ZJ&DWdatk=alxmK=`tK}-WQm&B8**}J8tSxKFnzDwhF009^vWl!ME6Iwof-En~$+EJHEGy(9^U1t2kIXG|$(%BW%r4E>o8o5EMOK+bW|o;`MwvmTm+53$nMS6T zsbor-LME5VWKx+#CYFiJ=fwpXDd{QGSr` z0CQErgtaUL5`Q> zD=~43$IVU^z$*lmldc*-!SBdfbTDN8MZYl09V)*;PnyS#cy)DA zN7k0LWKCH^R+rUeRar$=mX%~hSwWVUT6wK>EvgGOmmx{bXzzOU9Hjq_4C~ zA8GR#FG@zr2pKNJEUnLtP+hoXh;+$d86=(Zhx{(TNj+}F`>OsTKg&<@qx>M>%Xjjv zeB;p(@3k&o$(Qnld@i5Kr}Bw>EFZ~-@`1cB@5#IJj=U{z$(!zUI$~AJeTqRe^6>_;;CYQ=3a^4 zzMLoL$~khj{@9Se{=SX>u}=BV^n6eM8FIRuCa20Na?XU)F0!*nhkqws zbd()rd)ZF5m2G5e*-EyQEo5`qOg5EGWMkP#Hk1uyeOXVMhYbI^x~L;-%UZIgtRbt* zYO<=VA}h;EvZAaY%gb`ItSlo-%Tm%jWcZiVMG0A47L!F~5m{Ikk_BY}sfP^z{OWu% zugoKJ%Um+2%ptQ&^N``6O&3{Z7MWRQk{M+NnO>%oX=NIjTBedIWeS;GCX-2J5}8;g z(nE&-tibU9eyR}=-}BuA0;Io;C*#UE(oe>gv1CjcL;6a)^pQ4?{!ubgM#yj(W@&wH zgzCaAL!?Uv%OL5LKje4$P3j@T|Ev0o{477okMe_jFWuck~ifId0m=^4F7AoxGJy6%kq-EC@;wK@|-*?&&bpA zlsqX<$m8;uJSvaK!_qut_#e{6L3u##m;2;ixkv7nyW~!(hYbH6>g{ry+$y)o&2p36 zC^ty+km0{x7whC&xkj#*tK>?#LN1rf~^Sxr`zRb*vZNmi5X<15|$BlrJx+o!w%VM&qEFufbLb9MNAoaKrkYAlo=9PJ5ZkbEwlsRN}X&yHM zvgsnL%px<(OfsX)Ak)iqGObJ_Q_EB`rA#4{%VaXCOd=D@MCNm2R$$t3|M{hj`0+j8 zJ$``nm+@p=8Atlb*fN%kDPu@qX_r3I<}n~jM#=~oF2gLX&y7%BxMhfR$zT~Io$`nL zF26}VZUlT)f03W%C;3r+kniO?`BuL1=m>bNi&yfcd?BC9XY#3hA|J~~@}Ybn@5_7g zuDl~}%UklMydkek^SBXkO&3??6?s`+k{9I#d0w8AXXP1rTAq?8< z#d|SaJ@`_zi}zxaw5RHjOL_?whQJ<(s{7%&6OVO@6+^S8~B5D#fi0VW& zqAF2^s7zEMDiRfl@>b}No4U$zt1MB5C{2_iej`c}C5YlgF`_6@geXiD@`UHDpss@4 zDnR^7HQe`fZz=oF5Zyg z;td%t-jLzq4H+)pkm2GD87|(C;X1|-%^NaYydlHI8!}v;H)MF;kKr=!$MAeWM86^9 z0N=Ks*hlOo_7J;?UBph}FJcF=o!CZfHDSFsY74hE6Pt*Q#0DaeSWm1Y))H%o)x;`d zC9%RA4%c#SEhCl^ONhn9B4Q!2fS6CrBjyrwh}p!Sgku&plbAtFC#Dfoi7CWnViGZt zm_Upt#t~zQF%D`p5q)PAcSaH;h~dOAVkj|$7)%Tz1`-2^{(jWe1>p|Ien+`+V|@SX z9YOJDdNzspGvstRO-_|l+>5!x3NI60dw{+O!57Wg^IYbVY zgXBOtK=zmYWM8SLl=1thd&^$3r|coS%Wkr(>>@jRbj0tZi;l8`Y%kl%wz7?EEnCT! zvW09eo5`lKiEJzz$%e9ltS{?H^OQ1vU0u|XwPh_?Q`V5xWi?qImysf!Y_xGW}%$|AC`EF=rc0#Z*YBU8&%GNnu*lgnf>sZ1gh%S2{v{;B?!mJoKA5O$Z4 z9Ntk7!tN5n?h=xXnH0kA62k5h!tN5n?h?Z85|V)*k=-SP-6e$GC4}82gxw{C-6e$G zB_suFa|pXjNHTutq(l-TF_DN!NF*TQ69I%j5s!#V#9?g?VOoa7=G$TsF^L$2FJUKq z2%9%tQA8vWL4*@wR+zOplv{2hgm4kTL=fR5eh}Y@Z^XaESKbf_P3mBc3WeThbG5JtiIz4~YlFec~Q*m$*aRCT5>#lNPDtMZDxEHBB6@`5}s&&jj$ zj65w*$&>PgJT8yPqwtdZ;E7!=?a+O>uSIFgZnOrKD$i;GzTqqaF`Es6|E9c1Bdf7EW zg1`ggey+bDI)uGGguOn5y*^|-BZ0j>M0>qwScZ(@+t}+vq8~%q>qFS*y}^s z>qFS*y}^s>qFS;0w zQH!Wa)F2$yscJ-3q6$%&s6Jq~062j^d!s-&j>Jq~062j^d!s-&j>Jq~05@J>t&oGEyU9Rzuf0ejGTqZ6N z7l{kRdEy*#mN-M4CQg~KhQUd0ogj`A$B3iE5#liMH*ttKNE{&c6Z?q0-f)EM;nr?q z7qOH0i`YSIC$*U~GP})Wwm$#djAr+5d?zNeo5}2EGP{|~ZYHyv$?Rq_yP3>xCbOH#>}E2%y_4DD z<7PCw^YYW@A#xMBh@33KepV1}G7r^%^uikvJb$%%4;952Vov2u(YEgf={94SZ0;g$}2 zf?>KCDu>9ya*!M-2gv@ipX@930&{{s>fW-K>?wQ5?y{TgD!a(e9vulf>7t|TAlu7! zvaM_*Tgz6mrEDRa%Vx5vY$6-WMzW!7AnVI|(!9W&psp_J$l9`&tSM{A>av=wDyzuK zvXZPQE6DP)oGdHL$kMWuG%qkGD5;AQvbZcJi^?Lhuq-4C$^ud^Fek{b&L{KAJTkY; zC3DIgGP^V{Fek{Si>xw>%q%m>j532vFVo4iGL1|vQ^}Mvg-kA!$)qxgOe_=W1?B`l z)eFpS_7yk#ikp4K&A#GhUvWqOM{V4T7!>R)ZuS*7`-+==#m&CrW?yl$uejM)-0UlE z_7yk#ikp4KJ&iHxp2|-@g_ulCA|?_Oi1EZYVk|L+7)?Y!B8=kBNM2xekKopDVi+-$ z7(xst1`z{^0YrbIAJLcigXm+0USM|j=2kDFC((oGPIM!>5?zSSL?@yn(Sc}BwDW}L zX_C7wx7rY`iB?2Qq6N{MXht+8nh=eNMnprRfx@$<)#p|{;&-AhQHQ8a)FNsUHHhj& zHKHm}g{W-8-^X2vTPxR%|9!!DpP%QyxaekQakI0y*;(A|EN*rdcQC&W4t5qdJByp0 z#m&y*W@mA;v$)w=-0UoFb{01~i<_Or&CcRxXK`CQi{78%ejELX`i5JtiC4r+;sx=X zct$)Wo)C|TN5n(o0dYTiCf(!KUE&ULo47^XByJGbiGPS|#8u)7ahbRjJ(DhS>jH6} zI7gf%&Jd@GQ^ZN)1aX`=MjR!MSYc+;VQ&3R93l=92Z;T|K4LGihuBT*B6bpg5j#Ag znY5i-+lZ~i7Gg88iP%VNAOeZ?#5!Uvv4&W!u>OmS?(o2d5s_pA^J1Ejx< zC*#UE(oe>gv1CjcL;6a)^pQ4?38G}AjF90n%+lJILv`VnA<`v-Wsr2rAM(5WCiTUp z1Ygx(*MEBR8skk92a`BXlUkL4rzP(G0N<-jTQE zEqPPkkk_U8VpD=^y0|K@$jkDQyeKco^YWZLE6>Q&@{~L&Psro)m^>w`PtKKdx&hu_<>duD~RR9GGZyQgjh^0A{G)0i21}k6V@=8 z%dI)YY~oL17BQ2UK};v65mSjN#AIR;G0_{2&jw@wqM zh?B$#;y7`PI7%EL4ikS9hlqp3f#{FwB!S0&wqd|{4r4rrF`mO1&tZ(`FpXyogKpkm zoUpD0<2j7+9L9JKV?2j3p2HZ=VT|W6#&cL3en7@^7~?t2jAv^Ygtg#1H7A-8O^GH% zW1?XU)F0!*nN5W3J=qNkL_OhL9E8ED{vXyKpTgc|JnQSVX z$i}jfY$zMZ`m&xhUwuwkR~L0;ZCOj!lr>~^Sxr`zRb*vZNmi5X<15| zuRbR%sf!Y_xGW}%$|AC`EF=rc0#aXnPMBYvPv(_*WNw*D=9D>Pc4@x)oG_a%vdSzn zv&>#!i+lZ~i7Gg7Bb_(0Xt&PM6B9K^5tRvPE zYlzjvDq=&0@R>#}RWJj%EGISU=(4=JJp^4w~bDIrf`l zpE>rLV~;s@n`4(bcADcabL=q3c5`eq$5wM}F~?@>us$;8Z8Db|&9T88f#z6mj&vIBqkCO35f(md?JAGC*l!ti8zFx35QR3Y;MIOViGY3U&2oK5H@dwMG=ui z1QAYz5ux62gt@sDLb!-vB8YGjKZx(dH{xI7EAfT+Onf37AE^(-d*U7OmUu(FCSDOQ zi5J9k;u-OjctSjme(-$6t%t+|;y!VYxJ%q2ZWFhNo5T&`I`I#2jc1zSx&GssW}^6> zWsF(j|jskaWr) z^1J*d^}daSU)5jaXZcBflpo}K`A)u-Z#+5@zShMn`BJ`+&*d}uR6dc9vgeC zu9a)#YPm|Tlq=+NxlAsVOXOm?NG_BMm{#6P1XHLdi3`Me;v8|7I76H! zP7x#2 zEyQMG6S0xlKm-zw_0&3IEwP4JO{^kT5-W)1#4=(jv4mJmEFu<04}%5VnorCl<`Q#= z*~Fj3EMg`xgP2ZCBc>8lqKCn&z_t^AuD?Dcg7F+t*88s;!FY~fJV!8|BQ%~p!yuw0 z-<$Cq!FY~fJV!8|BN)#SjOPf(a|Gi#g7F-|c#dE^M=+iv%y_njK|~&Y`rJe=A}5i9 z$WHu1WFxW?S%}O;CL$w|!GyynB0aa#5ow7uL~0@xk&;M3Bqx#)Nr@yxVj__@91#h* zm4Jv(1Q7m2JR&X;hv4HnA~tto5iyAvgfHQ+Q$B>v8{ttzBoRS`6JbOs;U+=|7ZFSZ z5zgpg@Pk|5iEqTe#8=`A@tOEUd?Y>)?}>NBTjEXhFIxG)ou z#&d+mvxdP!?=MaS<2i!y9Km>wU_3`Ko+B8~5sc>u#&ZPYIfC&V!FY~fJV%)E>=_1A z_~|DTlZc7L1Y$ffju=afAx0B?s6~w8&PZZ}32PV(=hiS{C^3W>Obj9h5(9|-L_eZ0 z@dwd|=6_BWR8O7C}56X&5_?6`OJ~md^u`<9&?%7 z9J$Pq(;PX>k=-1>m?N7xvYNwuNnw6wbCt;)8O@Qw9O=!G&KzmYk;Xc#FGtN!Z7x%p zBc(Y~m?OD4l9?l^Ig*$ou{jc%BcVAGm?OS90?grWj(FyXYmPXc!(p56XD(x#BbGU0 znj?lee9d7uhmSdII_5>0BhnlZ<_I@Om^nht;WkHzIb1p%^McJ~kU5;@_+gIk=J;lg zf6ejL9AC`w*&LtD@zER~%<)kM6Bo};h%wpYYU;sx=Xct$)Wo)C|TN5n(o0db$W$D2AL?sDr6ahteB z+$3%g*NK0KYs6LJ3UQgZL|o)e9T69}b)Gm!oF&c>r-@Uttr$fY?v$BlZ$|h~304Vkhwzv4hy|3GH#)xV4qoLTn~B5gUmOL?E%ASVycS z))1?SRSN4(9T8!He@-m5;Fja(83vJTHIZyJk!&@QY&DT=HIZyJk&b%aUz|v`nn<>q zNVb|twwg$`nn<>qNVb|twwg$`nn<>qNVb|twwg$`n#hU_gUAZ}bCf5_5oL)oL}{WF z@f%T+C_xk_iV;PLA`FAb!rUrE6eJ1|zY_V0d_-O%50RV5MdT!M5ZM_9k-u;&83ux8PAc7=SaqLq#4iF zv+GDRpRHKw{Y{EoK`bYh5le|B#A0F*v5;6m%qQj%b4@sWBIj^xHt{DhiOgIKn1Bn4df1)4J zm-vI|L-Zzk5j}|>M0cVa(KY&Cs0+6`6P<{TL{p(t%#OH3!-`Sz}Xx4 zY+{TB)BpN^@{Z5>+sspot>)Nbj?L!SWR8vI*kF!8bF4SVI&-Ww#~O32HpeP+tTe|8 z?^EpM=5m=imYQRUITo8^kvSHcV}Uv5n`53i=9*)UIcA&VPjk#N$4qm~FvoQ3@I1wy zW-h0iV~RN@n`4qWCYob{ImVk~oH@ptV~jaQo5Nv_QRWzFjuGYR_17Fjuz%xbNp_O zy5^{3j@ss^WsaKWs9}!k=BQ?ls^+L-j>_h!WR8lt%~`=5<;_vf9A(Y1{lDJiHPiFH zmqat?M239zN7vYs@5oG4LUUDT1aWi44#){xa@HCa_wk(Fg7Sy5Jya zWhrU?I8maKx+o!w%VM&qEFufbLb9MNAoa(I66IItlX+zxnOo+PIb{x+U79~mlqj1n zvdSznv&Oe&P7)`G5E8lo@BzmojSMsHN zA)m`<@~M0xAInGbp?o0k%X{*!yd!VRTk@v7A+JmGZs~=kmlXciPr04om?x|$klR{Tq#$`<#L%^DwoK`a*R@oYFs&xZ9t+0{EZqIfnO#k1iko()IwY&eQ% z!%;jNj^f#H6wijE+VBJNY&eQ%!%;jNjxx`Ntq01e=6vsFL{p*((U@pNG$a}j^@)1K z??hdq4pG~L!zZd1w`vkKi0VW&qAF2^s7zEMDiRfl@QKAS@m?%UPBnl9YU#a{=J|ZuXhsaIjB61Qri0s5KL^dKTk%h?217%buZe=7g z5b23@L|P&Zk(x+Fq$E-h$%$k{(&z`uK7k!4#aNMX(@*r5KS!~vAaZ_=U0H; zC5qi8%5jEoV|R&ScZp(miDGw&Vt0u;#{Y}mC5qi8irpoO-6e|MC5qi8irpn@fAmMh zK7Pc##2#Wdv5VMA{6*{_wiDZkt;7~$GqH)U(L`>MCEQv}EFu;X3yAr|JYp^}hnP+LNz5W<5;LsO*Jz@qb88wgm6$?ICMFRR zi3!AbVjMA+7(uWSomjioF z`l-G~W4Gln|CV-}cRt%~-uY~|dFQj;=AF-Wo946i8)3I)=KtoM&vu)4KHF^>_$Kds zw%fe(*>3aBXS>ZipY1m9e74)X^Vx3m&S$&LJD=?~?|in~%zSoOKYdbujwD24A`y|0 zNI=9V0tkO19ub#_L--M~O*rhfSlo(9#2|bLJK;mvO!!1a5s^d$5l(~=p@iETj;IiB zxrksQh;R}=i0{NV;$Pw`@rC$Id?G#)jt|s(;vMmpctgA)^`oke-;D|{-)eCBNn|D0hZQk*0 zw|U32-R2$7cAIxR+ie=p8V26q5xdPhp6xd8c(&WTCw@l!*S&E6%NAL{Xv$ zQJ5%16eJ1|zY_V0d_-O%50N{17)%UYG%3b^{bwN(&-A>;ka&iiE~m+b94#GklpHBX$l;a_d*Wfb7%GRz!E%rsC``pQ${{OWu%ugoKJ%Um+2%ptQ&^OdK>*>sUrW|5g?CYe!Ykm+SQnO3He zsbwmeQl^l}WipvmCXtC{BJ+aUtiV;13jf#VMw0lR@17(;`pbASu8br7WNaBr#*{In zue3`aY4eykN=C{E87{*tt5~C%&eO ztMZDxEHBB6@`5}s&&jj$j65w*$&>PgJT8yPqwtdZ;E7!=?a+O>uSIFgZnOrKD$i;Gz zTqqaF`Es6|E9c1BF@625kNE`u@n(f2GdPc4;0ml4R3GR+&X+mYHNmnL(zP>10}&My8gjWJ;MrCYQ-% zQkg_1mWlL`k;MADPbVdvm;0xAW4ztweX?t}d7tdsZQdulcH2|dN$- z;@iAWcI`IrlU=*b`()Q{^FGCLtI_NA75+Ic6PJjK#0BC!agI1koFPsVr-+lp3F5f-MOVA+7`KiR zM~K73-^3x}AaQ`$PwXT15_^c<#4hiPu6El_Zv92v1wv7j79MT{2h(NvHfFzsqk@>tm9y>M!!M{3Jih5AwZyC*R69 z9vw+u>*AGsDPPFv@|k=ppUB7Zk$fm0$oul1yesd>+wzvYDR0Q@(yWh3uIb{cydp2l zOY)+;AkWKl@~k`~Ps>yCq&y*y%VYAWJR%QEvpyy{q>F>{fZQ+l$-Q!q+%0#>ol@&# zk{#;pa+};Lx5&+MliVmbNV7gBS+9$Aa;;n=SIbp$rCcGG%Vlz@Tp}0CMRK8BAm__@ za;}^sXX|k?sr5IvP5!C=3tM)dvfc^c!wW$^yb$EW3qd}-5agp5f;>aYrv(2uUI_Bx zg&-eZ2=d{DARk@`^5KObA6^LZ;e{X{UI_Bxg&-eZ2=d{DARqHWko6j*Pi}ttTtrSH z2a%olg~&!^C9)8iiA+RBA_I}$gv0KWj$3JoG(>756_JuiK_n-V5lM+8L}DTlke%ejm5?5_<@E3t*xOl-2kTAHmNdLy?s5P^hQv90g3jyr3KHN7CW)puBvxu3*3`Gp<<2-I)j>$0={CVUj8U~%s zzomU-C!!@{N)W|~Vnk8z zFtCp-!mYwYA)+8rfcTZjPvj%=5_yQ+L@pvHk;4klFtCrz&aGdFY(!Qf3z3<~L}Vl~ z5b23@L|P&Zk=hg1FtCqI#jTV?3L-g?j7Ul(Arcdbh=fD}B0dp7_$xfapiAJdldZpW z=J3xl46J?IOk688aXn7}%)qt63|uSBz_r2*Tq_)A;#y@Ut`%nDT45%x6=vdEVJ5B> zX5w05Cax7`;#y%Qt`*but8K+JVk$9(m~4iD^_?bhYa%g$7*C8N#u8(Q(M0qQIEp(X zi4nwbVi+%{`3&XO5MnSfh!{u=Ao>&ih`z)hL?5Cz(TnKG%V|D6xYeELMsy{*5N7OK zzh-9aTVck&6=v*PVaC1{X6##GroI(z_;EZ_UoWTmn6YntTT8yJ1!2a%^-ayV)0AjJ zG$tAm4T%OseWD)myC?KawJx{n5VeU~gcsoP=I6)jIjuA%*#}Vo<@i%dZI7l2I z_7nSvy~G}3H?fP@N&H3ZFrT~DKlOHQZ6mf4TZqlXCSoJ8fe0kl6YGez#2R9C^k%S% zTPukb#B#!nTkD_Ij9V+rxV6HJTPw`CwZe>BE6lXD!c1E$%(S(_nzjzR9-7U#wQiYl zYlRuNR+w>Xg&DV2m~m@`8MjuLachMcw^o>OYsF;#>CLpY?wDz7g=gBD&A^OX>()5F z_gKP=TkD(5xV0ksx6F)N>y8<>R+w>Xg&DV24CBW!)7H9UrmYp4w%QELxV3JXachMc zw^o>OYlRuNR+w>Xg&DV2m~m@`8MjuLachM&Zp|;SnYPv)Gi|Lf)7G;YoDOU{ImXZQ zXPxXmZvA^(gD!+{5y3fF}7-)pr&_galL?iNS_3Be(_1VVs> z1P|^`a0oJSmjn;i28}~-3Bg^1ySqyS2?=+sG1kB9)U7(_`|iEjdsnfm_A`HTbceS2 zKJ#6zjGlp~;0bsP9)XA80k{wDfxF-ixD9S8e4jtO$>;{S4z7W#;0m}5E`f{S0yq!O zfwSO@K|X(Yn$an65}W|X!7*?Y`~r@E!{87&2o8Y#emJgujP`;(U^mzWb^@z?dFNT} z3#|49R{Mf2JhRolOsw?<*7^d+YF}ivFWA6;wjQhlYrz_@8ms~JZfz-nKf*=k>4wJ)&R7g+5Jto8*~`+^w$9cz7=L?vSMD!z$)&R}w@w`XTC zAd9|jE8PP!gG?YJ$N52!a!nR zA2oTNP$nTD7zBYp;07)b;79*A;O~T;!C#DCgFnG5V0A0E602K*)vdtlR$z52(7N?K zAhxy@SlbG$Z3WV{{+)red@D-)|*fwir`+E!p~ zEAX|g?F_7LWpssq=rXXnl_y!<3aoAgR<{DHTY=TB!0J|DZ7Z<067O2-B;YF-G|+~+?(91+>6{X?&#rB1 zo}dTl4!VJ^pbPj0bOxP3N6-PZ2klsY1KKib16qStpe1MlnuBJbDQE&3gGQhsXu$d# z@HM0QpdP3T>VVpy7N`ln0$+j};0y3Ms4md;H=r7$s^BwF1$+uBgG%5NP!UuBgB41SP=7pg1T7ih?4bFen5Hf&w7F!ngiDVw4Yj2tELLK_2ivcn`b_ za)Vsp9gq{`FnHVpvNIYG-(h5=$1Q8Ae83NqskTo`^dQM_$G5ulf2o%1v)*>y3zDZ! z^Pk+EFDLeXzU{hOMNTsNpK|A6KtRgpoO~xI)}6OpcdE*XRpKqz?ZPJZB|g`AA!BveiY`A=>xl9K_P zRFf0yiEFMKPvoSR|0y>n$=jdOx6+`> zb~&-DPEK0NiCr*ql1NVMV|~qab+Me-$3jl3%SkqS6&%-R%}EhC zdFem7d`?at>d6(?<-v0DfRmhZa#v3-xQEG`7kSf8T$hH($yGf$@4D1fPR?^8ALB^h z?MIgAdDlhxAg8dED<|?nj=1lCz6r9S-fUqZea?o{ppPbl*DkmKRoPe-R z`lS7?)AHdD`^kTDNB4f4e0+|L^x?d-J90&gvT|I0H@tYXf=G zNhZ2M3Rvm52OMW~3>*da&XoV`2op9)0}e4c2o3-?NCWmU*$b?Q|>jFoP{44WY^qD(ZQbqi4pi>wW0_>EW0!;Gz;M=G< zA2G@YJ_PKPoV-l(fcF7AC5N4olba{y0_>EWoJ?{kWTWO}XOseIGUAZkfT^M}>I)hH2Bj^CygLa@TXaibM2C9P3Ko#&QsO*E@kSa0y1XKhSKzUFO zlm%r#X;2E31SP=7ptwT5rsqtF-}F{}O>dQJrq!arYEfXdD7dU|x4>#qaM3q$0z?;h z+IeseoCRkT@@}J^9qQSko*nAhvDZVM*NO(O?^9r2;C&3AD92^5j!7m2c8607B7#soz!2z%z>;rqj9 z7sP>B5Cft?6qo~MgIQoEm;rtO)4{YvDp>;8<9CkCH?{Y`x8-Yk_uOt@&-;EX(rq;_ zu$mWG%?qsN1y=I{$9i65Juk4H7g)~=tmg&R^8)L6f%UvVd*1irt>y(*^8%}Rfz`ag zYF<#zE(lRsUi~tlG$;j1f)e0kP#hEkML`iz7!(2pZD$}az5t{A;3JR^d8;2ql;$cxX(C=T@b_Vj|Q!`2hQi4d3 z0wf2?KvIwdL;x@FfN&7zgYTP6+=&_4`jkm1lMoOLf(`{BaKahhW_$7qh$9Hlu@bA;w_&0(5DHHT;p)*PfcP}9*I zpxIxupJrc4#~t~tp7hb|t=UVnr)Ce$?wZ{+yJ~jP)ZaJ}*;(C5v!iAQ&Gwq@G}~&n z(QK{R%9l=LOFe0!*<7=kW>d{3nvFFZX*Sesp!v0Cea(8Bbv5f~*4C`0SyS^X%`Y`; zXxeX_i2Phns%uu$tg88$W);m(H7jdY()>iTqGkon@|xu|%W9Ughea-hY-_^{mnM>1t<3wam zJ;|Y&T{D|zR?RG$nKd(MX4K4}nO-xUW?IcOnyEEYX{OYS)J&n7Tr-*dB<+N?F9yoG z_z!)>o6oL0|IAmsWv$!(M_~IOf$e_;w*L{>{zqW@AAw^VAdzi=1hxSZ*ak>o8z8{~ zf5o_M10)mM014*tB-{VU#P&Y|+y4k`|0A&dk02`HE@>Me8QBI%U>hKTZGZ%}0TS2- zNMIWv!8Bg{R4@fh29v-<@O{Ev@;gQoz<4kYj0I!BXfO(l1S7z3FboU@LlW+igBcA1 z13|)jXaJM`pdaW9z6E_iZ_o?$1U&?Hm+a1{8|VtUfNwx&&AvOV9!|2hBiJ&;&FFjX*=t0DKMVgL(@2R!sNm|MF$FfA?3}{^9R@S>>8lTHh`~ zDNquW03U7D)fb_t2m-0MmnfP{>f%55wS+=

AQl2NANf<~B5`j<<0)jyh2n22) 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�%=6Y4SbhBGR3v4mY?PIXa9=y& zT!vAhl!XeRHdC9ZU@C|Tq&89;sP)u3YAv;fT1~Aoj7F2Vp85KbJQ+_#VU&@E_rkYZ_120E*`ps*{QWS4vDMA&d3Q+~A z0#tq~AC;HNL;XeNrgBmISGDBeDm$+oOExaEQdy|XR3<7Tm4Ql6rK8ePX{gjxDk>$F zf=W&$qmmjjt{qDfE)!FUsDxAkDn1pDic7_zVpFjwFUpfLQ65mpFX|`t!zJU|`Of7x z>MQky`b>SIK2jg3_tZP;E%k;>~sVkKEGJT1sIn-=w7B!QaK~1NoQB$cY)MRQBHIbS?ji<&@V-2~k9W$3>sL|9YY9uv+8cq$P zhEhYQ!PFpXAT@yMPxYhvQhi)9dsupN*^BB)^`N>_-Kefq7pgPWiRwsopxRUIsJ2ua zsx{RLGFw`5*@9|LHKPJ3f69;YrF zWK>cr36+>iL?xsWQ1PjFR9q?!6`P7hdGXo__2kk-c|ew5)KBUM^_}`geWkuopQ%sO zN9qIho_a^UrQR5FT|2M2d_}#aUQo}eXVg>b3H6wIL_MS)Q1_{O)LrThb(^~7l5y?a zH>A1I!B$Q&QPbRQ`AZ71Z1`x=kgeJlsZBkrVddDsRPu0 zY9F2q`BA=<59LiYrJA^8_6TjvWh1H~)qtu`)uZZC zb*S1@EvhC}gQ`wdqpDI>sLE6&$Q)Xc%L>%rRC%f#RhBA4m8MEjC8-irajFdqHu$%uq~MOjAr%Oi@f$Oj1l#Oi+wB!kCrD3)9AF zYpf#X<1$7&qZOkRBNZbQ!xh66Llr|5gB62Z;rd~iAp^BFK+#{(PtjM=N6}l+OVLx& zL(yH)P0>}+1rf`5_j>~SZ7KS@Po(cTK;BVrsW;SX>J{~pdOo>5P!C)8u=5%rLI z;C>>#&*eSpE_H{xP2HkyQa7mU)HUiVb%nZ2U7{{h7pU{pIYX`|(z9Hip-xk$sFTzQ z>Ns_bI!Ya(4pWDygVX_PKednAOYL#Vcp}}+pqo%0h)uo2gAyFcm}vQX8oa)OuT1qXU z7E_C;h13FSJ~fY;OZ`L5p=MLFsF~CZYP$Q0bQ+gasVUTC>O@OC-?*W4t_Ieyqf4M7GJ>6;3x1S z_yK$mz60NaZ$NyhuKz3aOYjBw9DD{o1)qSA!AIaj7tQ_;u(%K21Mh-&z}w(0@FsWz zybfLiuYy;=%ityOB6tBj51s?hf@eT}sjmMiEKY(az~kUC@F;i$JPaNJ4}u54{op=u zFSrNX4ekPWf;+(NAiq@Ce=8Qz;1)0nbb<~r610Oh&y0WJrZflI+9;9_tQxDZ?b&Ijj#bMd9R0Z9Xo zZ%OtC{V1AflSMDUx9A1j~bX7vNj;0(^^JfN#+Y@GW`) zzC|y^a6Z~@dA9j{@$Y3-&^$hdkbHGZ+v-*MK8d&#M7^itB9kB zt%#-YQg|v%3J-UL{8Ic>{7`&n7+;?9O=noil>SvipPpaiie5^iu;Otio1$CirWhFE!9oM4aIfEHN{oM6~$%6CB;R> z1;u&AImKDUnV5s@X>FZSoK&1p99JAu990}q99A4s98?@o>{slIdBkN2yuBsfs(;d$ z{+v%aEjssGbndt4+;7pj-=cHBMdyBt83%vYSkSrOqI17R=YEUM{T7}3EjssGbndt4 z+;7pj-=cHBMdyA?H}^-vqI18ciyje{&iZGa6de^E6zvu56m1o46s;Al6fG4k6wMXQ z^eLw$KwJI_KZUQtN8zn#s%WBUtZ1ZYsA!<5uc)U_IW2XyRYy@fDyS%+ z$gjw!$g9Ys_)C#nkxP+NkwcMPkqzN`MjH9w{EE>3;|oH~FHHAM|G6JfXZ&e2nk^d5 z7L8_$Mzcku*>X1K`a7e)7ma3%Mzcku*`m>G(P*}4G+Q*9EgH?1!}<+1nk^d57L8`h z{+R1;pMLdT#U90O#V*B8#SX=G#WuxOMYLjzB1++mx&9p5id5JYHicCYp$J!mDMA$% zMTlavVv{1+2ws0d+6q)`RBTYJSFBU4Rjg60R;*I2RIE@eS1fY{uD_+)TB2C2Sfp5} zSfH4%n5USl_(w5EFeTuNn6v{bj1m~y`oTEl?jvB!^Y6Rw}*~2IfQX@D>jo=_Pf`ilu z4pJjHNR7yfzepppC^9QDDKaWDDAFs^AsYhBAz0yB90=qB9_8S;i)hwJltXVg^2bX%l8%SX&%dW zW^D1D8NqjE1mBqvd}l`Rof#L=PyR+G%MZnO#W%%Q#TUhA#V3XNqw0g=z2cqXt>TU1 zwc?fHrQ(I+x#F4Psp5&^am)q!NLvpT4;1$m_Y`*(cNDi3w-h%OHx$8Zk=0(MZJz z#c;(i#Zbi%#bAVM7!1e?>n6+Q}YMN>r+MPo%HMMFgcMSX?2 zo~o{*j-s}rmZGMjhN8Nnnxd+rilVZjlA@xbLd@gqZ*7%Vlv9*dlu?vclv0#blu#5` z6jKyc6j2oB>C|`(PWvByhG70>`e^#keul8q6nYhZKqIawE-Nl6E+WjvFS?+u^NMqd zvx+l{(~47ylZq3HTyt82 zjUSr$-}>%R|Hr)o4FdCj=DSDjG=-IM|G~maD@rL!DoQAdE6l}IMHNL9g%yPq1r-Gp z`4#yTc@=pSe<^Y+aw&51QEB|^=g?MmMK(oNMHWS7MJ7c?MFvHBMLGo^_{RI<1K)_$ zd{i36N4^n!LENbfA6B7q{lBAy~H?^zgc7DrpL z6|odv3QvVe;o*+ZUy7fKAByjaZ;G#qFGd*mER1X6v$j4dJ}N#a-YecI-YVWGUMpTH zUMgNFo-3ZY!t8qYPqp<#@mTRl@lf$VabIyyaaVCiaa(aqaZ_;v;br{gNBv3|ZHl$% zvEvV#1{|EmAC8052o6poI5>^q;534R(+D#sr%{}oMi`UR7@S6EaE49S&NRhT#T3P4 z#U#Z<#RSE8#W=;-m}w9bWAx8PD@G|sDn=-VD~2hCDuyTqD+VbBDh9+%gZ|p;r|7Hb zqv);ZrRb^Xq3EvYrs%5ZqUfyX6f+GvYO8~yy`r6>t)h*hwW5`xrJ{wRxuTgOK;dr$ zra_pWwtN*n3U5VIMH5A1MI%K+MFT~BMLk7bMIBeTra@S3ZPilLRMb#ZS5#9}Ra8+_ zR#Z|{R8&y>ttgL(WxV@^fvKWnt!lOKkNNM3#-B+8I!psPOanSh13F9tI!psP%!~=` z`jBWqhiO2EX+Vc*K!<5ShiO2EX+Vc*K!<5ShiO2EX+VeF(nmrAI_yTw5V)>?c1>|r zaYb=iaY=DeaY1ojaZYhoaYk`kaVlmSoYd9{#c{>_%`J*tBI;L@2@)VTw?NMG>Odtk|Ro zRs<;m6&qcFX|O?C>lN!1YZYr0s}-vhD-|mg%N5HMOBG8LixIAA@HQ}0bi6<4za#84 zg=;>CYd(i-K8I^Qhig8EV?Mh+5aAfmuF!lA*L)7wd=A%q4%d7R*L)7wd=A%q4zKL~ z+YZ-!4%d7R*L)7=d^T=fgmXX}QBH4GR#8S#T2V?-Qc*%tTv1F>R8d4xSW$>!HiZ|| zRsltRMLtDdMIOapirk7^ikylZitLJPimdK1hiB1NW<@4NMnwiidPO=#T16T~YDFqV zN<|7qa)mjWDybrgBC#ToBB3IIBEBM?BCaBiBDNxy!b{<4R+$tY?g;y(_^J4z_^$Y- z_^SA#_^kM(_^9}xc&{gd@Wy}At;29l=5S5sa82fLP3CY;X4mzn(HxG^?3x3b%;B2M z;hN0hn#|#v%;Bruf1BZ&%;B2M;hN0hn#|#v%;E0IY+QdD&EXu)#=Bpn-*KU0fnvU5 zo?@=zAH^KSY{e|aOvMa$n8T-QYno!JVv1t2Vv=H_VuE74Vw_^EBIZFpMmwVw=25DV ziV=$8ieZYOiXn=@ib0BjiUErLihhc|ias&_YQ449OVLx&L(yH)P0>}+MbTN&NzqZ! zLD62(F6R1ctF1PQ){0h&mWmdN=89&D0ENH8PvNWZQF!y#q49`osx3=kLE}?|QFH&G zPZ1(CnjRsclK8CM)6wlO7T+hLh)SjOz~9lMDbYhNbxY{k@-Md z_Z9aPcNKROw-vV(Hx)M&*A>?kR~1(jm-Q(^_$6&!R9sM;SDaIvRh&_rR-96tRGd&8 zR~%CuH3FX^gdfq?VZ|ZELB#>Ze#Jh;Ud0~8ZpALePQ?zzc30qJx=mYK714?>S5$$yS zMYMJQy+mjG&z ztuFtAIbcri8PD|Jcws?=hH`|4a)gF*#4i1bcg9?Qn#vKF%B}~6hH`|4a)gF*gobj2 zhH`|4a)gF*gobj2hH`|4a)gF*gfW!O_-_*tn#vKJ%Er47)xV=f5u(_v*rW(n1StX) z8xlN#a;PtmwTWb`n6{{306)P0W70VP$6-yM06^j%L6$@N}>uLZDZVPc zC_XDbDLyJbDBdgHDc&mHC|)aG#SF)n+IpdQu6U++s(7M!tazk&sCb~buehhUtGHtX zhvRK+-BR3C+)!LsTvJ?CTv1$BTvA+ATu_`>oO1<+<5_K;QJhwsQk+zrP#jkrQyf(s zQ5;qrQXEtqKp6l1z?vYsG0z^eId)qJ*UK3g@Pt?v13vT8hA&6>|v&1b9T zvsLris`+fye70&nTQ#4pn$K3vXRGG3RrA@Z`E1pAwswn|23_4BC2JQ&XGJGPM@0uk zdqq1%TSXg1Yeg$XOGOJ!18Z|_HB$sA{1tu*UxkmtThUa}MA2B$NYPNyK-0ilUt9GQ zbrp3KwH37#H5D}!)fLqgRTWhfl@*nYz%;N{)K&$>--_~za*DEwGK$iQQi_s_5{lxA zVv3@!a7_bi5p5M#6jBsa6j0<>{aYh>{jej>{RSfY*%bkY*j=nwkV=vhJjOC4n?HGuCOVr ziU>uxB1{pguqZ+ln-!a4hC#5lf)s&@jfxG5^@??hwTd;0)rwV$m5LRL56HJsfsCz$%;veiHZq|@rrSZ zu?jx&T*Kh1Gga(bjKE?zI1C&L4gm*)gTR5{0I)xZ9~KtS z7u^T!4fXPdlmp9xWxDX=710xS*|1M$Pc0*asugN49?U;!{cm=DYg<^lP`!UA$*kqgWT z<^Z#U*}$w|7BDlI3Csv)0Mmo%z_ef*Fg2J8ObMm{lk?mA%n9ri{U?3x?oN|U=N6mJ zEjFE7Y&y5tbZ)WX+~S&0HXK}Bp>vB(=N6mJEjFE7Y&y5tbZ)Wf++x$Y#inzMP3IPy z&Mh{bTWmbH7&PDdM`rY>T6<*os&RFNLSVr0{Tu^_SwO;)mk9;+x{D z;)}xkS@lWrQSm|XUhz)xR`EvhTJcKpQt?9ZT=7itl+RPf)6^4fJytwYJXAbT+*jOF z+*RCB+*aID+*I69T#xy9lnLw=9cxjx+<(s9G@H&XHl15+I=9$#Zn5dyV$-?BX2!wA zH4JoavFY4m)49c_bBk@N`)|^wbBj&q7Msp3Hl15+I=9$#Zn5dyV$-?BX4V73Hb%eo zXvHYSNW}=naK$jiP{k0%V8tNCK*az>e;t`^{j}9r(MQo+(M!=&(L>Q)(M{1+(M8c& z(Mi!!M`l|GZM9dlQ?ymIQM6XHQnXaGP&8LGQv@jd6@EtG$ZYe~mXE?)(Nxhy(OA() z(NNJqQD0F{QCCq%QQH-GLaL>$nu;2V>WXTLs){O#%8E*gii!$~zZK;bd z@DO+qJOJ(o_knxCJ>YI|7q}DL0d5ERO)&$uVi65)0i!@C=l~-@J7@!~AigPPKsY)K z37roK~DtoQ!#*JfW@QierkSiX)1{ibINniUW%MihYW`iam+E9J*~MO2zoX7BcAZ`9 zI=k3)cCqX1VlSs@U@xn;FQX`}D5WT=D4{5>D5fZ?D55B=D5NN;D4=Oz&#$d~ioA+E zioX=O6}c2S6*&~y71PN|92LLXljNOp(+G zOaproZ6#JDQY2I)P{dcnQ^ZxoQN&inQg|sm6((1>rh(nVy=D8Q_^J4z_^$Y-_^SA# z_^kM(_^9}xc&~VeFs6aMQQ(3_&{JlyFMbC&vwmc zyXLc9^Vz=I{WodXe70*o+clrymAJjGna zKZ-eu*@{_;nTi>T>56F#v&lYHTT>L16_XSb6%!QW72_0R6*0qYjCMvVMkz+R!)za+ zt>KDcilK@jiouFOih+s&ivEgzioS|IirxxyFI7)P4@GxHH$_)P7e!}9Cq+j^2Ss~D zJ4IVXo0z|=*4k>NXsKwSXs&3c2vGPd{1m}3B_^6F~w2E5hHjs zIIOKhii3&+iv5axioJ?GirtD`ik*rbitUPRuD~k-PNg)_9K8c#hO~jx=LFyFMZs&ygC>ks8mD8qbj$&ygC>ks8mD8qbj$&ygC> zks8mD8qbj$&ynu$#cRBKi~eOp6q^;B6v2uhMWAA%VuND6Vx3~GVvS;T%rID`t(A%u zisg!BilvGrip7dWiiL^=iusCpin%ev;2&+xQOs7%Qp{A$P)t`$Q%qG%QA}1$QcP4# zFoMHiytc+E#wuc_^%(7pR*X`NRE$szR}51ORSZ!Kb_IsPAZ-m)3{dn}^i%Xz^ilLy z^iuRx^iXtHbW?OixQ4;rK;PW47Ts_B=bQ{28qW@mXNShKL*v<@@$Arec9=1rjbY%> zcy?$!J2ajh8qW@mXNShKL*v<@@$Arec4$01G@czA&kl`eM*=<89P!;BBu6|&Ttys3 zY(*@Em%>wFQh2x{@|WVL;)mjU%rN+-t*?qNiqDEqijRs9iua0linoe4ir0!)ikC6N z;DxrHE1oHyDxN4FD;_BxDjq2AEAA=oD()z58^K|4OItS;Hx$^AUDmp0IE7~dAD%vPoD_SX9Dq1ki zCP#B^HB$sA{1tu*UxkmtThUa}MA2B$NYPNyz#V2seQniK)K%0`)K=6|)Kt_^R993} zR8>?_R8~|{m@BF(DE?NISCmtfRg_VbR+LhdRFqH@R}@neRTMF+3M&dJ3MvXH@+lPW8pUeGD#c303dM58G9z$6a4gl<62)T0BE>?*0>ymAJjGnaKZ-eu z*@{_;nXbSy(hO})S4>k(RZLM#R!mY%R7_BeSBz7PRm42t#$du?rv{{=ZUnw=WWPK{=#Mzd3+*{RX&%&RxoXm)Be zJ2je}8qH3PW@ipvf6nZB`)rD=iY$uEicE@(iVTYMigb#!iZqJUid4G(oGG=HLXljN zOp#QPM3GpLNRd#HKoMUNPZ3uU#|T`1&e+3;S3FZZMYyiNC)#?fc%*o!c%ZnixTmt*FIEf$_1gsjV7{>WXTLs){O#%8E*gii!$~zZK;bdbVFgs6b>xAOC;+W#7 z;)vp~;*jE?;(%hmVxMBKVvoYSTeVBEQ?Wy_U9nBERS~V&qKHyB6%IwD!mhBzTz^(= zMJU1*VTw?NMG>Odtk|RoRs<;m6&n>BVy?gS+FGYrt5~C0tyra4saT;{u2`m6s#u~} ztXQP)m+M@pt=EC~|FG8|MrkrfX);G?GDm4LM`rYNc? zqA08=q$sE;z%ZMl@@p%fBCjHk;x9#RMJ`27MGi%FMK(oNMHWS7cbKCxX)B{5gCe~m zog%FwjUu%ol_I4gg(A5knIfseoJ5sakw}qHkw6h&5l<0U5l0bQ5li8v@Kl%-9x+4d zmwU_kQ}ILbUGYuvRq;jfS@B8nQSm|XUhz)xRzoSO;h%IUh|*+^(qxX(WRB8gj^bo? zU4I+ge;rZ(kGs2$j_PdN{-4>wrMN`ULUES@rMMM$65QS0C&As_HMmQXNiqo$ifdci zLJMu7IK^Fl*PQ46Wp8I~*qJJF6=eiOaGPCzNdooF2GKVsmLz&E>Oy`VaT!8qU?i^hP_U=$b$Mu6d97#IqM zfWcr87zhS{{)vCter)vxeL!!}3-km%KzGm$bOl{NXV3|BOg#TOu+<*418qSd2mozB zYtRa`1T8>w&;-$kZh`s!g0SRASD4?0_1XMmykX4dFlKWYvpI~}9M;Lc z8NxaOC$l+>*&N1f4r4ZlF`L7f&0);uFlKWYvpI~}9L8)8V>X8|o5Rd(maBrWCQO2` z#%whL4M77?AAASufx4g$s10g?nxF=#&Ljw{##U8O1$+xCgKt13P!UuBUxV_X94HIQ zFbTp+vsDU|1SLRmPz)3WML=Ot2owYbz*iu@flPw1d~AIQ@`5}dH^>EYf*imf_yJ$w z1G0l`9(X1}SXQ>OfXpBh$Otlk^dKGh0;C0LKx&W*q!f52LH8}LB+CwahQa^-_u>W2 z^Ze3-fVq-$Bxg&`lAI|yLvp(0G|8!wQzR!#PLd3k43cz8PL!M=IbL#{Nv9PsRu*F< zM@x>994R?Ma=7F$$)S=%B<1(w1q>1olpG-0U$UQMU&%g_y(N1|_VlDPpoc8FOLmj& zD%nM{vt%d9j*=ZD+e@~SY%3Wk86eq4vbAI@$(E8WB%4b%lhogf7tll&jU^jNHk522 zSzq!y$$FA?CF@AmmaHXNQ?iC+b;)XyRVAxPek)m7QhzUAKqXmJl&m26wPbn8a*|~w z%Se`%EF~$w7cZcMxVU67$)b`)BnwLxk}N1$KvI7%UO;|Xj2GPPtX z$&`{QB$G=flT0d^MABQ*l5|LVc{1RW);K zB%ew?k(A$l6Y!7tk>o?k2a@+C?@8X3yd!yA@^4Q%18&LUrsQ9ee@gx#c|-ELBzH>gklZf0O;UgRO~6)JY?0h7xk+-P?Tr9ara-p0Xf$2ihn{(sB=k#onOZu>A9woV?595+Pj7$13F6qOZa!v1f zAm@@kj7$13F6qO#qz~hgK8#EHFfQrCxTFu`l0J+}`Ygm#mgIQoEm;t7PX<#at0w#k=26_z{%vKOcyk91=GXabTKhPKS0lh&l&{N>KhCJrJV7@K&^LaWM&NY2F*Yx3B z(}#0SAI>#>IM?*yPPwQzqad7X`f#r4!?~sp=bAp8Yx;1m>BG6E59gXboNM}UuIa4xWLh;0bsP{sE7`!^BbWfUW!B9=HqcfZO12a0}c7e}O;2AK(VKZlI&!ceZ{5 z*T7ZqEBFQc46cBmz>nYua2Z?z7d?E{8Lh!bY<&mnfx4g$s10g?nxF=#4yu8w zpbGfb1JC&vUYV_LKqXKSQ~+Ot@}L|j3(A1fpcE(xN(emXUvajIfuf)YC=3dLf}jBS z3gid*z?UE|$fHQ(2+z&dxR89V6zc*$r(cK{&S(y2G>0>q!x_!tjOK7gbGTDxv**xY zG>0>q!x_!tjOK7gb2y_poY5T4XbxvIhclYP8O`C0=5R)HcwFLCisimJ24X-oaDyli z2_k?Cgo7{;3XXy!iBst?TZh0wZ~*KF`@mkX2kZvBz)r9OYzNyCr&0)8Tfr8v8EgU@ z!3MA%tOIMo8n7Cy0xJ!4Dy?8^Iamgkf+b)vSOgY=1zfe4Zh=7|$-ovy1WUVm!MT&n_L$ zZimascy=+KU5sZJfXpBh$jB^kWne2kNC&KT&%jgg1Uv@+fJfjVcmVE$d*Cj( zT?}RygW1Jk zcFjpV|70?oYXTR8*~MUXF_>KpW*39m#b9U5OubV&eIyli7Uu z@%H`W8VAOLF<>+p1xA7qU^o~ChJqnraN_wlh^>KO0O$|;fxe&*=nZ;-o}dTl4!VJ^ z26Fzny0Fz5bOIeg2hbk018qSd2mozBYtRa`^uTlexmvK*95e$>K@-pzGy)Al15h7) z2kL>kppL+E{?%ry7N`kofa;(cs0ylpZ$V}74X6Yvf(nW>4%gRgEefgZO7U6!|!#zn9MFFvx~{>lF2Lwgp6j-k-=nkF_~RVW*3v$#bkCdnO#g~7n9j_o!gkn>|!#z zn9MGn%$@^6N3+2%{IQ?G74Q@I5&QrygG=BdxB$+BbKtDP>2RH4>ohn8PJ$EQdvF{i zfOrrGV!<&G1EOs>U2e9bKqQC&E)WjFKqxp0j)2495I6`90Ox+R59|edz;3V$>;yZ& zcCZbEfURH)*bFu~(MGTVtOx7BTCfJJ2CKkIumUUx%fM2wB=G_1pZ}qYf`7|Tu0=4J zBbdw)Oy&qCbA(Q2bN)r>Xf|LnM=+Tqn9LDO<_IQp1d}qyt}Y{zar^D-B2uQh}5p z1xOB(futY_@CFue0I$UJ?~}dd`UpON_uw6P3*La&;1zfYUV!J|8F-q)JG*=*r0a>j z717W$2mTM=i557|^9=}rb0z0U&X$}dIa6|mkO--#AjNfs3) zD@cAVSzfZ7WLe2FlBFd}Ny>Mk1(pyOmnUW|A=9fi2$uA}I zO6HNwEtyL)r(_OEe@Q<{Ur8Uy?2_3evr1->%q*EnGNWXMq~2-FF+czRa$2fsBB$G-ek@S|dBps4oo(%jX`BCzNAHbPsu+d zZ%AI3{9W=l$!n5VC4ZItMe=9KE0RA+{wVo_|vm|Fq&XAlgIZbk^ z@C?#vZp7VZF|U~yJR=Xu996OJ4<$w>?qkmvb|(G$+nV#k^z!! zBwI_il58p2LbADJGf924Xxl^%q*EnGNWV$ z`QFU7^Fsn$0qb7x@_b9y|Nfi$+kN4A|8{95(@3V4OeL98GKFMv$z+mAC6h>cOInf+ zNiR>f{UrHO@`L1i$#*8r$?;YeZzNw!zLI1=yT7B?mTlKfNh56K&n*Cl_K{7v$jO_CcWH%P9RTqn6!a*gC_$yJgoC09r;ms}>fRC0;rV#!643+3c!moDV6 zYrFiDwu8MMdo54@AjoHZf!FgLvCdaskGZ;X6tFu-o zt&Un9wAyR6(`u^~s1=~qMyqu)^R;2~0bA*^rB(~A=333Pnrb!CYOK{rtD#l{t@>Ku zY1PxJt5rv{Iql(DIVn^GWNY)(5TkTJQ9x+4EMHZ?s-(y^`A7bJ>N0(?h3sju?~rUp<3< z(m(m5)(={jwJvF0)ViQ`UhACJS*!{WdQ=T*Eur3d29n?CYwO?zW)?TeWTD!G&Y3}UDpiR2msI@_Bz1BLdwOVVmR%@-&TB)@{Yq{1kt)*H^v=(bE(po6x z+`B-R^R?z_&DENtHCtbF8gZr(dw;r#hgLoL&pz}nBw;t zz4Ud@%C29?G?*w~$}^Y%#)ENStOrgn^G;*f8VyE)kzfQE4u*lDUI)RP~r|bCh>?Z%~mO(FJ+j&kiL{*pf6<@ z=t~&}`cj60zLa60uVfhLD;Wm*N``^Hl3}2)WEkYvui+a7g)A_y3VFVg@&CRc-B(w} z$i6ySwY6$#)zqq?Rb8u^R#mMkTHk6_*7`=Pl2%2n3i@!m?`vI_*D9w~R;!FwX{}OP zCACUu71t`JRaC2pR$;9|S_QQVXnkeMJe=;!ugiQ|I$-zZ)m0v?+*-M`a%$z!^4Idy z^40Ru%C417E2~x(t<0WsdhN@k%ZyqXw9;#()A~XytyUVX)LN;uQfj5pO0JbmE2&lz zEpIJL%DK;>OE0OtpR_(|eb9QZ^-k-p)*G$YTCcQTYQ4~UuJugosn!#%$6C&Rv>$0b z)Ow(GU+bRMU9CG>x3&J(x}|kf>o2W8wf@k$p>T5YugwF0!-XtmaArPWfag;sN|W?D_PnrJoFb7x;8T{hHepjBThJfwYO z`hW4<*IH}1+>1>%CD7AOF#1dyt>Mxm0K&9R!*%PTK-yoTE2Sj?Dx@ScCBn$ zS+%lgW!B21l~F5$R(h>;T3=|T)k>q4S}T=SO05*8%(=5axh|7wCDlrz<*j9DIkdc_ z_I=X&sP#eXz1BOew_0zsUTeM5dg&>1?!3_DbFF7uPqm(CJ=Xe1>yg$&tp{57weD%% z)w-i~TkCJFTUs}zocsRL<)2!AXx-4duJyatZ(7&1u4?_N^^4ZeT357w()v;B2d&Fm zm$aN0wJ&I$*E*+lR_lz`X{}RQC$&y!eXn&~D?uw>D^4p`>zG!IR7PWzV-JN%H@`X4}6?|IA9Q62jvl46W%})3l~)P0^aHHAyR2D@eIe3w1#R8(Hg8ZNNb?h0ImL7{j~aO_0j6B)yq>(ul+rB*+Z+lRyVD#T3xg{Yjx7< zsMSHMy;eJ|wpxK&0a|UeT5GkEa_(=b%NAPAwVG)))oP;ESgVm%L#+l{^|ij!s;5;~ ztBzJ}ty)?&wVXAyt7}!$s;X5*>szhLTHk0@(yFLcLF;R+@>=Dz%4(I-Dy>yYt7H-F z5?aNzifI+qTK%s*)j5z_-u*x-t(00Rw32Hj(@Lt9M9W*t(sF2dN$vln^-=4C)_eQ3 zd8f;_T5q&oYrWEXsr5qZxz;nSr&>?69&7!h^+@ZX)&s5kTK7zOPMf>ByrXqn>u;@F zS~s=+()v^D53L(o*R_7v`c3Pa)>W-vwSLk1*;D4UxuVOTw0_k3LF=;CC9R8E7qrf6 zozpt2bw=y7)+w!%S|_x=*E%lc+@GM!c&#|CSgm7PF(AuxHPiwE%9#{?a(@{n_2y#ASST4S}wXpPnyr8QD(gw}AaVOm4AhG-4e8l*K) zYk;0R2m0%>pH^S3K3cuCdTI64>Y>$LtD9C=tu9)fwK{2a)aszsUaOrcbM72ytII&G z0IfD!t+iTdwbW{%)m*EYR#UAeT8*_DX*JYppjBV%J5M>i4%E|SU9CD=wY6$#)zqq? zRb8u^R#mMkTHk6_*7`=Pl2%2n3R+)FIS-WAWjU>~T4l6KYn9R}sZ~O&xK=T(qFP0? z3TqY8DyUUJ>npANTF!jhdJG@PtE)U(xwUd><-TIO2MHh^#DQ3F48(wF;09435<~#=<3{Fn2hYn6 z;cSJ0P;e9+0f)gMa1a~-`@uf27wiGM_2=Krhu_84POt-P2irgh*b26Q&0rJQ2sVKA zV4Z=PmFB~*Wor#s4OW4bUU30MpkfrVg!2lATFe75F+xnK^M4Q7FvU$@#eq1M`C;de9i?L1Ul?je#CC271sK=s{!P)T72o zj~W9#Y7F$KG4LEU-sWf1BJ`j!(1XT64;lkKXbkkAG0=m?Ko1%NJ!lN{pfOmY!@x+7 z8UsCQ4D_fmkfX-);q{;~(1XT64;lkKXbkkAG0=m?Ko1%NJ!lN{pfQ-n&pt%xQDe6B zs4>u^#z2o6gJ5okAdvXCpUBPxFdmEpW5F0OnjeOZ7{%5|Fait*!@y851Plg)z(6nn z^auSwUjs7?%xBhzt=^y)=m~m&?w}j!3c7&KpcCi_I)L^bcz*UVq8(dpK_CbKZ9r?# z3bX_*Ky%OxGzCpSV}bd_6cIZ@(nJL;3#k1sT~$BStBD6%_qFb6-PO9IbzAFity@|* zwf@rjQ|k|{8(P=3ez&ixf79hPt*ctUYW<@1v(^=@pR|6|`a$cm)+McrS{Jm=Yn{_N zt98bd=c@X&E>CHl)HR7`?U6I?a|t;wM%QK)()-hQqBY0bQz+xRcnjZX01(H8?`oQ zt=C$owN`75)@rR)S}V0yXf4-TrsZ6!y+muV)*`KiS_`!1Yt7S|t2IY!w$?1InOZZn zrfW^pnyNKLYqEV+JxQ0rT0vS)tw$lfqZa&&FCZN3D1YW)2d(y6?X=oz1!@Iowb5#= z)k>?SRtv4>TFtbYYBkYw=U`)9HqvUS)j+Gh)^}RN-MusJ}te!59ZZX9<X?@iCp!Hts zoz`2eH(IZ?UTMA5dZG2)K6jq!@~PGnt;bRaJB7TD8vhx62bkLtnbdxCjZ6Z(fdw4E z%LBOp_+)QId;}lBd+-jt1#iG>@Cv*HFTiu~3_KNhe)#$cTaUp%;1PHT9)SDc9=Hqc zfZO12a0}d2m><6Wi>*JwAK(VK4t@u}fotF@_!ayDeg;>-Pd1zpKeF`$xC}0Vi{Jt{ z56*$J;0!noPJxr)1aN+jj)Mdc58^;9I0j-sG;o6`5D6lH3xqpS7zhPN!4Ys690CWy z0k9wJ1AD<9up8`3VJk9O$ar_jWhvJDpMP9up64eR+Rc@mBRN}gmgG#y8Isc_r%6tg zoFX|{a*|}QWRRp&a-!q}$?=loOggQ0V`VW$a5JL{fg1t=%B; zK*<4;{U!TJ_Lb}-*;}%gWKT~z+x3t|cgb#&T_w9nc9!fU*-^5CWP8bWl5HgeB?Bbe zNVb-2CD~H4g=BNdW|I1|Z0(xJqOoKn$%c{*Bse)74!SGz(z~x@+CAu2|=+1S`@yWbL#zS}Uyi)--E^HQefF zb+rPmrdD06idD`kYJF+>S{bYqj(^MV6OQc4DbKUzNS-Z6cH&JuTaN6&e2SE(%jVf~ zB+r&3dA1zMv*k#hEl2WfIg)3~kvvgRLB$4`b*?jm$ z{2d#D2B1Fp4%7p6K^;&V)B-g@4N#pgkVIBvt174hz6F)RH=q)z2r7WDL3vOPlm%rB z0z65ze9*`U40y#kr;1B$O zFYp1`K{kQ8K8noBRu+&MWC9sM29O@417Co&APq*u`$H;CWhuzhd^~%-)LNmnTx*%uQmrLgi?tSME!0||HD7C<)?BSQ zTC=rgNjVSB)a4AV=~~mYrfN;mnyfWRD_AQ?%c(U{Yl7Bzt#MjowZ>?T)^d*09;r1# zYq-`ht)W^&v<7Pp(i*5WK&!u2Kdru6eYARO_0sC8)kB|b9_+5mZdzTnx@cVpdF^hx zY(>S-=M|60XhsEB{E=MoM{>m<$rXPjSNxIAaQ+xq{E=MoM{>m<$rXPjSNxG&@kesS zAITMeBv<^AT=7S8#UIHPe{Gic6a)E^VT?w26{S8_yjP#idOYmo`yc z+C*__6UC)X6qhzpT-ro&X%oezO%#_lQC!+YacL99rA?Gx+L$Y=C@yWHlG}GuR5Fkh zBmv&Q0uJD1Bk~jY2tI)K;GM$hhgfa}2dJNgY=16RSX;1}>SxB`9xKY|~?WpD{x1Q!w~ z&v~}afwSNYI1NsLli&pS9vlY=ARfelSRM$Xa(KQM_kZBo^}prUZbmVgqnON5Oy(#i zbCgbI&-uq_j*`*r83;_~C?<0hlR1jX9K~dgVlqcDnWLD@QB3A2CUX>%Im({QPDd1@ zIZ8*f`S9KC`zNX!=nA@k&Y%0@!K;T7y=gC1?SfgJz&9XaX98 zMxY^R0G##Fcc31q3+jN{pcbeJYJlpX8mJ1YfNw!%&cCQ{*s267f(qbkP#%;6WkDHG z8k7PhK?zVi@%$^sR#8v{6b6MrK~MmE1@eP@;7gDf);c&C@|>50n4*4U7M&+Vds z$sEOGj$$%LF`1*7%uzC#<)YvMHwlwDipd16f{rC2`vF%Scyfg41DNDu*BARL5&P;e9+QJA50n5{$LAUFW_gMDBx*aLQh zU0^5J0k(r}Hk?r*Y;6Twz-F)sYy=y?daw?x1#7@+unMdM&J}1mSO%7YC15dF1Qvn? zU_O`!=7Kq3Hkg$-lxDIu155|gz*H~=Oa_xcFbD#PA7Uaq6TtYyp>*YQx+rinncYlg zHgKQux$O1BhOg5bEjBI59=|MX11xO3hfYcxrNC{Ga zT;zhwP_LjSBNcZT^>mTTF zGnw5?W;c`B&17~nncXs(Jr@P;S==N{W;c`B&17~nncYlgHVxk2iOj_fe^42 zYyq3Wro{7aBU>B5daw?x1#7@+unMdME5LHF3@impc*(}Sn5{?u;W^;^uiudK&~ejo z)p5yj(h=hbb?kL)b*ynLcFb}FJ4QPOIeI!eI9fUyIBGa5I!ZbUIC46&IMO)0z215~ z@w(%6-Rmc>vtIGuuROor*Zypx8OqTNdH#>(Kv_@*lm?|hNl*e52gN{9Py{#& zqe7q{C;+|!`9VJLCCCf%fZQM#$O&=)f6l*XKel{<56BL(fvg}4$P6-pj35I@57L1z zIRB#4vXus;2B|=VQa>d00H&>pk{Z9yOi0Bt~P&;Y^A*#p=LvInpgWY1qK$ezDekUf8`ATxjE1hInb0c-`? z1K0|(2e1`Xl@DeQU@OQTz*dkwfUO{V09!%!0Jehc0c-`?^VbTp=dTrH&tEIZGk-nb zQ(y(z1K0{G!v`x3>;Y^Am1M^rz*dkwfUO{V09!%!0Jehc0c-`?^VbTp=dTrH&tEG@ z=C65zY6aN?*b1@-uoYwvU@OQTz*dkwfUO{V09!%!0Jeg1@i(&vuoYwvU@ORDbl9=Y&%9Mf(_u%5+bpii z|Jy9On8mLwl9)xPz1X_V%PZdu7WK_SkAcIEEf2lCzSKk2EEbrB9-L-T#w?tAXB~EI z{>iNLPBDuyW}&yfS@@fU-a3aJo1(qE@;&!xLIXZTUNZ|l1kA$o+38_m7J1DgtNcw5S`!k?!t)5}`L0B3LT|IuM@O?r z?d6qwvc8{V^&GR9#G-^*1lfyKm(0S+VuV?YXOZ13#@UON5oR%lMMtw3&B9?8Bl$n9 z*kV@0?KiEcYZf}^4my_KGYcJYW--?+bb^^hNwd%?cF?ixvRUXPGmDXCq0`JPe9S@z z$U(=_NVCwnU>2RcoL)I~ZkUxhIkK*|{|ZaCn#F7u^~{1>Vex&l;L}??&n)y|=%8b9 zDYF=8|CvQUm_=I_qs&6@$%BqXzNx&QdR6oq=ViW8J~Z`|=oiU9r*HGIg7ic&wxF%SdvtTlfjH#<=Rr`d{RD+0JcI0yqe z_spL<%FYpR7#soz!2z%z>{B?cAe|xR|G0;@?FPHRPOt-P2irgh*b26Q&0rJQXu}z_ zfh|1&%->@jJ8Qujuo|oaE5Qn|94rG%!4j|-I2WOXU;&s9=7G6j4$u?T{H15HGZW}I zHgB5F&NMI;OwlQ1-bv@4fu8LK!Mu|WKC_ef&J%gl1fV0(ypPTYgR#6xXQ0{9`DZYS zH;qhzE`}_KPO+}!4#($mwI1z=)|78u;d{4G|fbO6h=nA@k&Y%txk0&`@3NW5Bq&(=He7Q6wk!7K0* zya3O^Gw>8V0gu5y270yrh^>d<0k{wDfxF-ixDEaWx4=#C7x)wW;ek9N-C*lF_#ONP zu7RuISMUq?8C(HBfgiyS;IbfzxnIYJtT9jBAI$!YhJoG^=5y0q!a#2c1HB~-^p-Ht zTf)G3Np2IPi{Jt{56*$J;0!noPJxr)1kg(i^C6D2lK|oqhd~@$vEUep0nxw>qCg~w z04@*?!ayiEnm7!Ouyq(50tdkXupjILd%+&C8|(r*!49xphk?0e^cuq;gtu)4dW~V; zw3(evU?bQ7)`N9mEm#9qgH;A*7?}U{O14&j!6Xn2frylg~&0w2K#@E*JaZ^0Yz+58V0gu5y;1PHT9)SDcp1^bd z-DT?zxDEaWx4=#C7x)wW0d9cn;CJvFxTZ+sh`wrX#gq@({#ktouo(tS<`^b(43jyA z$sEIEj*-diIUr(WG<(2gj$ty#FqvbR%rQ*n7$$QJlR1XT9K&ReVKT=snPZsDF*=IO z0TH94*9&3G^lj0I!BXfO(l1S7z3FboU@LljO&%wV<#fq`HE=nwjVzMv224SIo| zpa5-6;uJ=g390&%it2Y2rhv0Hk>i%*g6Z&fYaa!k?O+=S z0b9YA#Pe@6TbsZ}umP+G>%dyD2CN3Fz)G+JEC^u6>LAgS;6+>n-y$7zFEOd z`5!g`jqL-|3U0(!L(l-!2j78upf0EbY6JW6%?hr`P7P2URI{I{Six1I4jtG zfU|<_2RJL(et@%rEAq}2z}KKWC#C!rD!3XdjyaR8+8}J&u0x!V}9R@LunCEOg15d#d@EH699)XA80k{wDfxF-i zxUIv$eE7fFx&>~6zrdg14{!rq2fu^gz%_6c{32AOW`OBn z8kh>EfXQGI2=+jRK@eMdG?>5IM0O^C@n9Sn3&w!aU=$b$Mu6d9n80Zcz3l%(&k+6% zzn0H@Hu?z~=qG3}R6bLKAz&~Vlz9FPWNQHE5Bh<=pbzK`dV!vx2j~vEfv%tn=ijl; zY;^)1K?l$tv;%EHAP4|$Kx?2E4(4WP$xaK-zhlkWY6hBuCZI8B1R8<{pg#Bx)B|-v z9Z=iAoPXwTREw>epa!T8s)4GY3iuXO2H${6pdzRMzV^WB`S9i0(klnEQ#QJ zqTs@k&*d3{xoI!*xm^I~!8vdioB__$=oB~!PJr*hagYGwK^%w$$3P5-25u1LM3Eo@ zxIj1v1EJt3I06oXL*O7d0QQ4@i9=~GTYJE6unX)2JHU3Z4TONLU<=p`Hi3%ls(7OVlQ!78v4tN_cwGO!dZ0gDZEC@o@ZAy@!BR}M0`=7G6j4wwyQftg?im=30a zsUFBsn!?s(FbM>MAdq;(Ok`&Q7!SsQv0w}s4Mqt(L+R4zbWsq?WR7Jr$1<5?nar_F z=Ga2qnz2mgSSE8UlR1{j9Lr>mWirPynPZvEu}tRJT=oqe%VdsaGRHERWBoY)Vwudb zKK!xlAREXEvVhDW6UYcMfb<|8_yVNm{EJP)R%(z6qy#BIa*zxp1xbK6uz&-2**Nye zK+nIAY<&Rl!8`C4yaBJlEASG$0MEfQ@Dx1pK+eC%Z2bcsfrsD$xDW1uyWkGE4gLnV zz)kR%z;pin$<`m>2DlD>2fu-9;41hP`~rRkSHMr;M}^aI><4=*w#5Iy9B}eWyZ?K? zry#}=%TSJGD919CV;Rb^(-Y4>rgE%IWpkw%%TSJGD919CV;Rb^4CUCwF~U%eWhloo zlw%pnu?*!{Gn73)24g-LQ#n?rve_BQy)ps}2gATnFa!(+gTO#A0Q3j_4CMTa?aNjl z&>QpuJwXr99drX-K^M>&bOIeg2M;{wUu=7}+JUwp5CniWpfzX(T7nj!IcNr&f+hlU z{>3(Cs}X1j8i4xXJ5UeQ1$97ePz%%qH9&QR(-B*Zt*W33_!d+K-+)S>BB%hq2IWCH zP!^Q2;fyWKRw*#&KR5@R|LZUB|8JiI4CPpcax6nR)(mC){9`J|>Qpud1w%QOp&ZLl zj%6svGL&N(%CQXPScY;eLpheA9LrFS^$cY_|Cq|L_EdJnCJyDx+$)#BMQ{O}2j{?9 za0Z+Pr@%=M!k?O+=S0b9Wquo-Lu8^H#!-i9-F9b0R`8n7Cy0xQ7^ zupBG{OTiMb7%Tz{f&T(DAIt-HL#};R-&+*ph+{IxF`46-%yCTSID0ZX;$$#;PLMbz za~zX7j>#OyWR7Dp$1$1Xn9OlZ<~SyE9FsYY$sEUIj$<;%>0mY|NF0+nuB3g}#FYTW zK`~Gi6aj@nAy5z$0AGRpAfLkNi2IVQydV$A4RV2;AP4XVe!v&_fb1X}$ZEqGmxZm& zAQQ+4GJy0T9ryyI1!+KPkP4&(DS$IMN(PdGB)}V3zyZ8$#C`%F!3XdjyaR8+8z*`V zUV)e31$Yjgfv4aJcntmlkHACl0NhW!9qNSKj86X<{a~Uwtr*X7jORGUbKH9S28d%i z$H{b-VZeBfV?4((p5qwLag66U#&aCwIgarh$9RroJjXGf;~39zOy@YA&Yoewc#fOP z-*FC@4Q7FvUXbYfstSY7!HQn zaK;T~YX}$&27!TK0O$|;fxe&*=nZ;-o}dSCc1PVnSI`A?2Ax1h&;hgu?Lb=)2m(MG z&^qxpZ^c$i&;m3E%|KJo1T+SXKts>~)Cb>zdWpkebI9w@?aJU2pC#itj`1AFc#dN{ z$H{n>Vep1O#(0inJjXGf;~39zjORGUa~$J2j`1AFc#dN{$1$Gc7|(G!o;}0hJ|F%b zxC`!p+u(0-3)}>Mfj_|?;0Cx3epi@b@Ecp#z*X=o_yzn7u7IDwkKhMz8C(Jv!37)6 zxbtkC182b*a2lKfC&3BuJva^$Ks<;8vA}r@#eitw22mgqL;x2E2Vo!-90fVVpy7N`kofa;(cs0ylpZ$V}7jl$`Ouf$eGPyu`m%7b#CEGPp?gHoU*C;^It zVm6%dMcFC>3WGwRASeL70{KBc@FmC#@_^hR7jWi8IekE(;qyecxDv%N+p47?NNd}UFB)}V3d>K8y!+-EghyV2}hyRA3Krm+% zgE^kT9M52mXE4X>VD_AUOy>AQ+%62}cm{JkgE^kT9M52mXE4VznBy7D@eJm826Oy& zK7>7(&H2Y6ka&(wWM={xpZKfqDz-TZEj07XV za4-xE1w+7KFbE7xJpTr;)gSZ&eL)}48}tG_K@ZR!bOT*M7tmRM0>PXDo!D}Pq>o9m zto_l?=lhEin9K=G<^(2l0+Ts`$(+DsPH?8TZ;}Kia{`k&fytb}WKLi*Coq{4n9K=G z<^(2l0+Ts`$(+DsPGB-8SR9xM4*niq+()0lNALl>2k*dJ@CLjFufR+20z6MVFrTsY z6g&Zs!9U;;cnBVV``{k93+{m1;BQ{viND3xP4E}^6Z`>gfa~CQ@Ef=Wu7Y2|FW_eb zd3`7T3R^#cAHfgcGPndTf(zh0I0w#xGvG8h<$+w7o@DC;_#PYw2_PQCfmm=1#DHkv z22mhVkR-;DkS!#8%;)q^7n)Cr@tnYTPGCGIFrE__&j|xPw}j`8NMJlCFrE__&k2m@ z1jcg$<2ixxoWOWaU_2)Vi6;HmGI8nNX9h8lXC;2C9N8 z;9F1`d;=JnDBwh2f&3sJ_!8s= zc|dNE3*-bjfIsj9zQ8918Xl56Ce3H`I>J56NAG?Ez55OH?l;i8-$3tu1G)E|UPgNN z8|d9{pm)E4-u(u8_Z#TlZ=iR-f!_TFdiNXX-EW|Gzk%NU1_k8iH_&_EX{2|*f!_TF zdiNXX-EW|Gzk%NU2731!=-qFicfWz&{RVpX8|d9{;KPT{u5emD+1SbovVhDW6UYcM zfb<|8_yVK_X+Ua_%7)V?C0lx6n!jUmc9MalAPMjW7H|MB8`(dBkKhA%51jANTkr^E9FVXY(|{97fCR&(dcpSOOM z!6Xg{pJ29vK;oMwvNHjU2jjq4Fb0eUqrgZo0u0xu3Fg)t#@0|U1Plg)z(6nn^auSw zU(g5i2E9N}eVSlCd=Iv|gKnTJ=mI)}PM{;`0NR6gpe+al0S4x2g8A@m*lG=0ftH{J zXbzfzrl1LE3>txkpaH1wfjl66$5uU17t{f@K`l@d)Bx2%HBc2)0pEhkf+Xg%UmjB7 zvw9)Hd`gUGAI7r}AQD6X7YGMoAQT)0&LikBI0O!Y z17JVc2lj$JU^mzWc7h#XJJ{w#Az&-m0ycw9U?bQ7)`N9mEm#9qgH>Q<;se3+&*z1N zdzLSg*_X-e%VhRtGW+UeHs_x&quEzRvw2|fWitCRnSGhezD#CcCbKV-*_X-e%VhRt zGW#-_eXH6xy{|o)ot7`7*;hxi`S9QHPL)7KPyu`m%7b#CEGPp?gHoWR4X1Ajwu*yd zpeQH;3WGwRASeL70{KBc@FmC#oOw`gkPGAlIeyJhAJa2Mp$GB^*;fwKzpWwJADod&1CNpJ$_Lz?+N9%n}%(#%dg zJ8>Wu90M^R+J-a1%~lkM1QEam^dZfBFnvff(1$bweMmFVM>GR{L^IGwGy{D^Gtfsg z1LuDJ*ZaU;um|i0yTDGc18fJ|KnT!BH1ol>u(KI#((})}Z6jM7za-7ua_i@VrwM0_#c`B&bn3=>%V?yf#)}u{P+G$l6gSYBiTTY zWCJ~t?^#Y?J(SIs9?AxKC>!XZY@mm-fgZ{RdMF#{p=_{8ZaM=!k`44oHqay4K#ybt zJ(3NadMF#|p=_XsvVk7T26`wP=%H+&hq8el$_7jL@OmVh9X*l_^hh?)BiTTYWP^En z2pQ?2Y@mm-fgZ{RdMF#{p=_XsvVk7T2If#UFM1g0k!+wxvVk7S26`kL=#gv?l=%3U z`1jC5*}P2;Wdl8w4fIep&_mfk4`l<-p)4O>k7To>N3y{P-ZUHx14DWI^Buz0U@!;_ z1Oq^S&=2$leL!!}3-km%Kz9TALWFNOwz`5Ypfl(MI)VcbG$oe7WOgacsIoS z%U*fxL&fnfvsu_jfa7hbS$OVPb2K{Mwl#|^_TtS4v+!cE!TdW|Z&}ndi#PV-_1|Xk zgvCs=xXhxcSzOSC)A8!OS)H-p^lGSC*dxvHDvMd{wBPbF%q;B5=6Ko8EbO7?c=6FJ z?7`-EvC%BJeO}Zu3wy#ip5HbLd!{&^&oT?or0^WJj_1Y9%AN_1XBW)Eo(qm=!_2}y z@*U5znuUFcI-Z7`MRofx_q4rPRJ0dQKAA-k7Msi>GmF}0k;z^>zT@SU>%BcL9FJ#v zdF8ysn~Ix-Uf|tx{BzMP670A9Gu$j{u*hZ>eAGuSFRvU8?6*AX;N|7_7YlRD``xe? z4>y~|@3Oe#c-X}JyJddYWOdt`?ly1wl|>gXuk63+!tvmNSsY_A-z@Y4-F7@E?d6qC zC*^I&{U6Q0PGM1f zmw3Gg^seMx%DbRNWat0Se^dCL<(Eo6FN2hTdEu9won#;>NTP6B ze%@?Zzya*D%<}zY@A!TMj3M9m?7Rc^>1g@dr=sQinm4@yFKsw|U$FHYJOfXGeHvT7 zkJ%vxN&AcD@7kKwVHrVWwbhwrYWzpa!T8s)4GY3iuXO2H${6z<$iM{3_TxPQR~t zTX|3plm%r#X;2E31SLRmPz)3WML=QTEQAVz0^lo;T)rHV^`~f-N?jew*3a1U7;VU_Dp|)`B%)HCP2!f)!vn zSO%O+(Gsv2ECLI`0x%!U19QO~FdNJQGr`VaT z!8kA$j7dEIMzb{vj07XVa4-xE1w+7KFbE6;13-V!Pk#!)oC1B>N(kv4lV;hL&*yi7n)_wnRe~vlXJIRnakJ(9>CTF6I zo=QlN5HBH4Lac-*5*|x?!r^DfR3r_3SD2 z>?!r^DfR3r_3SD2>?!r^DfR3r_3WwYSzm>CcKlKXQ8MZvp}mB5652{=BcZi~RuWoD zXd$7wgk}<&N@yZw;MrJ4jU+Ub&_F_c3H2n@l@KW*LV{aDxP&kXp%PqD2A&}@3YHKg zAy7hq1b+#B5_~1pkx*O0j}mH0_(4KV6?7SR){s$k3DqQ2l~6@OWeJreRFqIbLU{@0 zB$Sm+I`Dn87z&Zuq2ki;#dreVi7Eig|HwNKqEgPALhk8 zm>YAU4|<~)I?)qzVh+rX*)Xf6;hTj)X3T^c@q7FZGvK%Q4W`F*m=@DuYD|SGwT9g{ z1%u?63_Z|+cH~o4=d*RY&L{kcAMicC!?*YbUz-|T?R8!;c!@9YIX=TAOvI;{fbkfI zvG@cZ<0E{iG}MEx&I1Pb@gCmAJ9ry!;Z3}O*YO%&#VdFjFX6?M9)|g-uXBOHc|3<_ z@eH1}^ey*4_Eom=-~RslfA8Dxx{>7a##1hDJmvDnQ!Z~jb<&9Zra&_Y= zS2vz=b>k^lH=c5J<0)4+p4Qck`nugyE^j>L^2SpxZ#?Dl##1hDJmvDn)4IG-r^iUg z9gwhJ!afOmCG3%~+X{xmbC-;EO4uP`yM%2Lwo2F{VY7ry5;jWMAYr|PbrRMR49_(( z`dh+Z68@C1TEZ#`e@IvS2j+$vT@3ljnlfa zQSUyF+>P84a!K%!;4Q(6U^tyJ@|2KMLJkSpC1jJ3RYDdCnI&YBkWs?-626m=L4xtE zq;Djomyk|ES_x?+q?V9MLP`lKBqW!ROoE35hXlLqpHm(Lo}c+M&rcFQO86k*y@YoX z-b#2Q;kATU5?)GpA>sL#uSlNBC`m%1gr^b`B*aUIlMpN6iG;@z9!Yp8;emwvsXTnG zugvbr=&po25^hVlCE=!o8w6*i=!ySkub**Fllvyc?37}5N-;a7n4P+q%}WWVG_zBh z*(uHJlxB8HGdrc3ozl!sX=djLdG}JxPAO)m6th!`*=ZHCx|DEAGdl;$`ClI317y-) zLO%(=N%&PlUkQCA{34;ZgkBPQT0vFW&ocT+LJtYuC3KU}RYDgDoh5XV&{0B^gbotg zOK3+hoNZ;)MnY=|tt7OR&_Y6U3C$!lmC!^&V+oBUG?dUlf>B>mJqdLsL`sN|;Fb_B zAxuK31eb&m3BeMABm_zb`0|Q<~W+&FqwBc1kllrJ0@5 z%udzJx|p3(%uXq0rxdeOirGmqtNptvr+sPW>oU0};i`ly5-v-)B;lfj3lh#tI49w( zgfj%gd0IxNB%G9RLc(zg$0Qt;a74mk35O&cln^7~fQ0=LjD3>!O4uV|w}f31c1qYG zVY`HF61Ga%B4M+HO%gUr*zjfl*2`#}gtZdZNcdaAUlRV5uv)?@34cgfDPe_#`QZ^i3(#l@a%3cBdZFos3dr2vKNhy0tDSJsNdr2wFKh$)1Nhy0tDSOqB zw=AV>cu6aJNh^C*k%KBrs3f7HgbEVMODHFytb{TWN=qmup`-+(grwpUib*Icp@@XS z5(-HuD4~Fa{1Wm>$SWa_gxnHx$^Loy$jDoQmjtH-PYF3CC(D(o0AuA+3Zo5>iV@B_XAR6cUol{&^*nk%t6_1iJ(q!TDLj zCkY=Ve30;7!aE6XCA^XFS_S>X1?MXny(D;r{fm0wU-J4HFDYd&DP=DyWy4Ea*-Kj4 z>v#D}kW%)NQudNk_L5Tel2Z1PQudNk_F5osM@rdCO4&kfOXww`r-Yv+{3M~rm;LK5qizzqO6Ve? zvxH6(I!cI=&_P0b3GF1bmC!~)YZdhVd9{*JO9?F`G?&m!LQ@G%Bs7-LNJ2vi4J6c; zP)|Z#GnlWR@rsmDgao&Q)zQm$r<-4Ph5g^>$MD`#&E8VY-crrpQqA6~n)MQTOEY^L zQqA5{&E8VY-crq8Qq5jc&0bQ?UQ*3oQq5jc&0bQ?UQ*3oW;L6y2lJ9<_ImkcQ(wrR zJ(uuILXw0;2~Q;?NQjpZCm~kC6A6zcJd*J6%cee%(R~T`B;1v7N5X9hw%4of&B z;h=;V2?r$Xm#|O5UI}|7?3S=g!cGZ0%wT?}%4@rfwn^A3VT**#5;jTLC}D$y^%B-e zSSw+Tguf;HrGxrP**nd@=&IoV_6i>3fBIFm-crrpQqA5{&E94;oBQW2&FtM$_Rm|Y z*}J(MB-QLK)$A?R>@C&oE!FHT)$A?R>@C&oE!FI;tJ!?_(#+lwvVY!E&EDbi?!zR6 zN^nUCkq|5)NJ5~5015sQ{3Q5Fs3ZI5U0X&!N~k5_2MIML)R0hJLNy6hB~+16SwbZV z6(v+qLGPb;c^Q?HP*y@238f{Jl2B4Y2?@m|6q8U?LJ(+@bTVqcap@X$MWB8P*TlBp=8@p>ul!g0UtVEv*w5Gx+jrYH+5h~n{T%T> z{20+&n%P^L*;|^~TbkK>m)w7=na$6Lu4eO*A@CggEzRsL&Fn4B>@Cgg zEzRsL&Fn4B>@CggO*0z~Z>yTsyZ=)@wAB(;N%%v;N(n0@ESK=RglGxNBrKJ%M8aZ% z;k`&k3neU&Fkiwv33DaPkuY1rED19u%#bi$!ZZm}B^XmAO_nf8!bAxZB#f6ZPQq9T zVBy^R~MM7r@og{RW5S7X!rS%lKKYG9Vk8-YB^Y8N&f{)a* zk2iPMN9x%}>e)x?*~hBqCk`J&>e)x?*+=TxN9x%}>e)x?SzadYke7%%e59Uzq@I1G zo_(aAeWad!sAq>yI(cOIq?M04jfB(^Qb|ZDA%%qG5|T;qkl>JDmtZ4!f0pp+%j5B* zj6O(sFX5epw-Vk+crD?TgqIRtNO&&cnS>+>iC?Zzp2{deLcD}H39%BMNO&yak%Wg5 z9!R(^;hu!M67HyAU7_5T(Jcu#CESp3UBWd9S0!ALa9P472^S??kZ@kYIWy=hl(RBA zBjL1!QxZ-}I3eM}c|{V~P#o!f1XDJr3e zgu)UENhoLr^S|96Q$R-fC0JL8>W}iuB#(sL5^_nfDo7n{Rgel+1*u?FkP21>sbE!* z3RVND|8{?jRY59P6{LbyK`K}kq=HpJDrA!Pno)vPLF$jJ3R1zUAQh|%Qo*Vq6|4$U zA)R%)VUMvYNR6xtQo*Vq6|4$U!Kxq?tO`=Wsvs4t3R1zUAQh|%Qo*Vq6|4$U|LHBO zf>ij#M{gXkDoBm23R1zUAQh|%Qo*Vq6|4$U!Kxq?tO`=Wsvs4t3R1zUAQh|%Qo*Vq z6;uVOXG9eYtAbRrDo6#Zf>f|7NCm5cRIn;Y1*?KouqsFetAbRpDo6#Zf>f|7NCm5c zR4^+@zx&&UB&&kdpIH^8f>l8(SQVs#RY59P6{LbyK`K}kq=HpJDp(byf>l8(SQVs# zt|0T?pZ)R)E*^dE->nQr^H&=)O2SA9BP0x$Fw6|P42H^Rh=jos21ytwK|Xyk17y-) zLO%(=N%&PlUkQCA{Gx+d2EAp}OF~ZxKTG&YLJtYuC3KU}RYDgDoh5XV&{0B^6;v5? zkWqUH?Ig67&_+UQ39Tfwl+Z##a|z8PG?maqLSupv(?~`QB{YywUqU?zbtObfh>+lx z5H2B1LZ}3ngb)cvu%sXfff52F_)GAU;47hygxV5*lu%2;4-#rhs3D>Hmq$}I8C8`~ zMM7l>l_XS@P(ea@3FRb|l~6`PX$hqyl(eo2)njnX|4-jL{9pJNM(W;3Gsj3X$4E2B zNHfP+&1~+URCCO2`FoLOj=3olY33Md<``+_7-{AhY33Md<``+_7-{AhY33N3S?!-x zbIe(JXJ;gwmT*eKNeL$;9G7rR!chrFBpjA-NWwva5fdY$0}}R2*e7AHggp{=OV}l0 zr-U66woBM1VXK5K5{%7~Hc8khVS|MA64psrD`AaB4M$FMG_WDSRi4(gn1I?e%Ze{GMX)6mV}uSW=NPWVVZ=g5~fI) zEMby_i4rDA7%#u-FJ_#K9!1|$uj`$-Dp|7s_zalH{&MUh#PP{8tVvaaSi^Bf8n3F8du>TxDr?3a{L{maTzYPG@dMBuoxHN zLR^6JaURaaIXD|<;Y^%?({UP3)v7NXr!bg|lW-zV!0|W^$Kn_qjiYcRj=T^AW!C)MO1JS?%*dP1hZ}=RDDdX(3X_SOtqVM}a*&9NEojgH%$ES34J`X3j`{GPV;!q^a7Yys=g*!-9e z^I{&%jk(YVz0nJu=!rQo2O8N4*)S_+!OWNmGvfF79cI99@f%E!=`by(u{2^+Gf0Ig zF$E^aWaxnow4=@P$!Gk8AMpde$9Gz_NN*Xu!Poc-U*ZdVj?XX&6Y(h~U_8cQEIu(c z7wIvBNB9sQ;C;M@ckvG1##?w3Z{T&jhF9^5QZLeF2AA+6UcmEs4$tBlJdLODB%Z+I zcnpu?5m}_e3=ZKzjKKrA-!isf^b7S3?8N`iGtz%rq;VWN7RTUd9EBrs1P;exI24EA zU>t-4(J%-Dkh+Vd?qaFCSn4j8x{IamVyU}W>MoYLi#6*`wOuT27faj4(sr@5oe@jj z#Zq^%T{y8bcEXMrg&nXxw!^mA23un*Y>6$jhAp-^gJ#$in_y#XgblF)*2j8S7b7tO z-58ExrfQL5Lm9X*1cNaM12F*o(GPvG4%WsWu@?S-HI?Qf#nxa@9jjqgtb&!X5>~_t zSRTt^SuBI4u@shMkzz|QD2~OjC>FuOIDTWc)ye+zb=`m3qURj<43jVspJD>WV;sif z6MT%1@F6}x<38aY(si+PT`XM}OV`EHb+L3^EL|5%*TvFxv1ZqqpCPI)ma2=T>SC!n zBbKgM=p1|XH43FXwJdB6%AjW9b79C))ANS#2+=IJu7w*IzxE;6Q zR@{P{aT9JdHMeL3gY~!$*Ww!d8~?&TaW$^OKX4_kz~%TmMl1CeEn~10m*8StgbQ&2 z&c}H;7w6z?oP{%S22M}uQC&YsrZJd`Q*bg)!ilJVmC-+4(#18jj*4r5^|2n-#Yl`m zH-=*vhN25YFc^&>LLgFeanxKKH5W(C#Zhx{)La}j7e~#-QFC!-&8Z!Vqvhggxj0%b zj+QgxsJS?5F0K+MR>TTe9?M}_EQ6)76qdviSR9LCQLSN%E5e{K7Q%v90P|x$%!_$2 zH|9bg^hPgqqNl0ap}3q3a$t7MhFLKSX2wjI5x>XpFav&z-(Y%7r!;pcE-iyJm>N@I zN=$*tF&TQG1MO(DjQxzC@FRYZ9eU5;9lpgk_!?hX#x?rdmql^AIBF;E!0osVx8fGu zjGJ&HZou`p4%ecwhVVC1a&eSg93>Y=$;DA}agFVjFCYt=OTsmJC{8b8Lo9u?g<}+789%vyO_-i+M0N=0YFzMlW=t zC+5T)m>sjBk(H1IDY z8S#`{JS7*OoD-9w2RhJ>Hp{rr_z6Ga2Yiq3@GZX4svUaG;1#~a7x)~XVG<_dQ%t~k zjKf%bf{*c$skuWB89c!Icn|O59lVXV@Fw2C>v#>X;uXA%my~*kE;6`)=kXk##WQ#s zPvJ>CfyeO}9>pVg7!Sz~9b^!L2XH^`!@ZXA`MoIwj>3^R0*B);9EwA5Fb=|j zXy5?3-Jj48DY9}}0E}o7v;wia! zN-n+=Cw9ar?11gD9k#_b*cw}5OKgG7v6N<+#&8V7 zP;{B99f}WO5R5?>hym!2e&~yJur~gPweSb5i8Zjg(%hl=Y7DAk6|9Vvup(B#@>mYb zVi_!rrLZKHz~X#YA-))cqF4kAV<9YvW1}%XaS<-W1vnq);ar@9vvC&A#2Gjpr{Pqd zjN+#-n2eKfB2K{ZT8GR0#Vh~xvm%G9J4bcHuGj@TV<+s0QP=_7V>@h%ZLl>Otq3i# z1vbZK*c6*!V{C*Cu>sb{dRP}DF~ZVtxfz6G7>1$?LogVFFc1UKAN|l5>tJpCQENC{ zwHW+>HL(U($7)y=t6*iUgcY#@mdA2f7R#8b9deasPzp<82`rAquqYP6!dM6kVgbyL z`7kf$QK}tsxNoQ<B*$4#B}V2nV8p1F%2#!{6{%>}y@nIb3}h{DQr)7xu)TP1SZ>kIuU%+4Q{X zM@9el?{d3s3B}AqmAY`0x^R@baFn`ml)7+~x^R@baFn`ml)7+~X5pA`Pxp;d_l;8b zjndGCqk=9Rr7oOsTY{%~Vwl6FAJ0ntcvkAibC@k5r~Y$WLJrK1*)S_+!OWNmGg=x6 zx`@;p)J3G!MWob4q|`;EOwWnwFs*5*!(}a&!(}a&!(}a&!(}a&!=)EX9j6yasTWA8 z_a{_68R-R51HC{>y+BI6K+09Tqd#yZuE6E^yVjPF22*1yOo=Hlxv3FqOGw7R1085b zn`QiG{DdFz1HQ+1_!i&bYkY+-m4^Aae8J#3KEotT#HW~m@fe4(_yiy0BYcPt@VRwRlUQp^@Q0iV#>RwRl zUQp^@Q0iV#>RwRlUQimk7*tTjpx?3X1$A5Zf>QT_Qul&V_kvRQg7PQxyhw-ZfYz4K z1G{54?228mv!#*Hi9ttsb{dZvbYMAT&vi4o|=a16sxbYTbvV-N;n z0Q#dJ`YH|cAz6n(ZTt~y;SX37YhZP(hE=f&R>n$L5i4MM{bZy*fN~7VVi_!rrLd%_ zdeDuEE~%c37S8^sC!=}}*IDyW@FHHo^LP%eJ7P<)?uaeHx+As(>yFqGtUF>e60Cb-OR(;VEy21cwgl^**b=OJ zVoR{@i7i3y$wA&x4C+m;XG_ovrPK?h)C;B53#HTxrPK>m&#)!vjZy=>P)fZ}%5A)1 zy{YQ<7H)4gt?O{<4?w9u0QK43r02GTjkp2V<2qc6YfKGw;@=GZ!as2}uEIZXC9c5b z_&Y}9GF*yFa4{}Y8s_72A%g`tALrp*oP)D*7S6;OI31_qRGfm7agtsn^#M#|FagKo zI2?;(Ox1Rri>{~^so+0e)ity|)yuEc%dgbSuhh%0)XT5b%dgbSuhh%0)XT5b%dgbS zuT;x#_fYEHSL)qY8fEx{(pU;hVhJpc#jq$A!NOPw3t|DxkNGgKrSUWmgWQ-4eb5`d z(21Uy6LVm8%!XMp3ueYlTEq42wLSe7zrpmF4%1>9OpU29C8ogS zrbYwX(_{=h(1CWeStfkOPxui(;Cp;$THoQisI?`$#W(mGUnvcb`nH6Z3|`=Ke1=Jw zh)*#A<1r3n@d-Z0NB9sQ=tWW=zvZJlR49mN|Mi6d}04#S~11P9|F z9Eb)E!2Z||f5Tt3YLWUf=!3stZ|sFV@n`%Adti6$hF!4>cE(QF(bQ0X6;TX2V0&zb zZLtlu##Y!8TVQi+hE1^vHpWIu!+cyeWY7TXV?C^kkr;t)4974GMHhx(Fa}|uUL^Ga z1TgSNKlH^qSR0p5zjveFrh5K+R(gEpWfBc-iRrBq64PN?OoOR06{f@#m>iR#2RhJ> zy6e;(F?89fpvz9F%TB4wPN~aIsmo5OOHQdvPN_>y`O133Pj$zs+q&bFy5p3(@+Ki{Vu~Fdo8#7=s6JKkmc5xCeJD^*ZfhuoHLS zcHD+raSLw7O}G&^;Cft#YjF+!E$j3bgFkUKuEIZXrDftb(P8QWZ}WzK`btSH($5_F z6ZXLF*bTd47wn9kup>rc2W*e+&}d6&gOpw(rI$$QB~p5clwKmGmq_U)QhJG$UZPog zs`C=*yhJ)Lk7 z`~hoX4XlpUuqsx;%2)|2Vg)R3sun4+9D}l021{cpEQuwsI2OaASOg1WAuNamFu&4V zq{Ms-@?sv$jk(YVz0nJu=!rQo2WH1?m=&|INQs#lWWtR2J${E7uxE4wbCK43Wsxp( z=q0>}7w|lu!?Sn>Pva>(i6`(l9z)|O;RsT9iPT*pb(cupB~o{Z)LkNVmq^_uQg?}F z-I<>x+Afi{OQh`*X*(m4x=W<)61Q;TX554uaRaW$b+{JS;NSQc{)ww`l~yg%9}HIF z3S5rAV>B+qrMLta<04#$3vfQp!?~vBBF$ki8)xB6oPpDE8cxM2I2kA5M4W)*aU70S z>O~sEU^I@xkvIZ}<1ieGLvSz-!hvYu0PK(bWRZSj@GJJkKKKjv#w*b+_N4mirCm}D z>(Hd?SPiRU6|9Vvup(B#@>mYbVi_!rMkzu`r0$ZayCmu^iMmUo?vkjxBd$J-)-Y_y%9&D}0GB z@HswH>P1Rokcdw)0pl?aWAO<-#z*)NAK-nwhj;OgEYfWTx9}$3!0UL;GO1>C=l{pI z9FmrC=u%vQi*XSy#05AX=iywOgR^lK&O~DdVLDQGNz`2ub(cilB~f=t)LjyFmqgtq zQFlpZ-IREMHMYW**aDklGi-`YurW5m zhS)%9E>co`2KBHmMq&iIF&x7%6kQmC!5D;r7=ZpPQj#A7U#x?*@kgwM(a}A>x=3B^ zRjZqaDyv~ttb&!X5>~_tSRTt^SuBI4u@o952_>*N7Q>=g1Pfy!EQkd#Kjy={mu3i{D^+OowSP4W`Cam=aT9 za!iIE=s>%v`eo%+ZPuX5XZ(a8@dLicclZ|H;A?z^FYyIF$7h(NG=Eunl|%+lF#+Q- z4rB2NKE_A*5Fg-uyoY!34&K)Pv_X9Uw;0^S8+aYB;Z@73HU9aZHgvW7&bE&7orN=T z22RImI2EVhWSoQ(aRQFVacGPsjKR@33P<7y9FD_qC=S8FI0y%#fdjC=rQzF;!Eg90 z_QgK<3--od*b{%opRfmZ$8OjayJ!u&Z)XObup>rc2W*e+ur0R1*4PSLVhe1J&9JGd z+9BU23>sr2Y={l8KGws!7>N<+#&8V7P;_C4(%d26U{(n-E_k}sX)ODFl#NxpQFFP-E|C;8GzzI2i=on-h@O1`R; z^apSYZ{iKSj@R%iUct+F2`}OWJdfw_tXA#N83w2E6rRKrcpQ)6Q9Oc&@em%w7(9Uc zai6KVLwgzQ!QHqEcj6A*j@xi6Zo$pC2{+;fT#xINdWY6BSc8A#U-&1k##Q(SuEZ6% z9Dm1XT!u?=iN2sye*=pdEW(Aj0O#X8OF#S6sAij*4c)Ui<@D~={^=WbUG0ADIKC~m z!PeLcTVe}rj?J(sHo?Z&2pgi&fKVT)J3s2qkGk`t?)<1bKkCkpy7Qy%{HQxWv+mS( z`q6fNw4EPq=SSNae$<^Gb?4{HiFL3x{)n~k2ds%TusT-5s#papVe zSQg7*X)J{$u>=;!VptT5U|}p|sB0>`HT+ z{IW5~idir-X2Oj4J${E7@LT)_(_=bJi)k=5+vJyuK}t-4$uSvvVEgEa|Bo+^{El(x zQ9Oc&@em%w7(9UcaUbr*J-8cpp|O*&1L-_JI?s>J^P}_p=sZ6<&yUXYqx1aeJU_GZ z%uf=P=SSuFQF(q;p5aI5`O$fPt2prwT!|}iIsT5(xD1!#5?qXna3L?rJ zIXD|<;Y^%?({UP3#VI%$C*ee#U}`SXcn0HeERMm^I0{GN2po>Xa3~JJ!8iy9qM_7_ zG=M>W?1#VMuhdv3K^QZ3o zsXKqO?$jdr({}!}oj+~oPum&()SW+d=l?w?euo+GTl@yoV>(QWX)raW!jzZ-lWPsT ze=-Ih=s-K#Ed4&?C;W&X@IAi6xA+EM<12h=YA(_X2G8*sCSf8z#RQDUIE=+7_!uAI zLwtbum3ooxF}RC&@HXDUn|K4S<2AgBSMV}k!i#tT&!_Y-blaX|a2C(tX*`7|E&aZ41@^m&xz(!sC(0HIGvs`#m;$tnygsG1X(FM?a759&J1tcm#XY^eF35(8JRs zgGVyQ8%LbumgAh`kYl^!Z^u%{OouVnG0@S|(ZSKg5$34vsOTu_@Nr~vq_TgoC))4X zFWHZ&Usbl=zT7_7KG8nZ-pAhA-ohSf_qSKIm$c`#XS1iX+iWjvk8Ia$r_?W1+iY8< zKPvMB)0-9LXf#Y^yV{saC`W^MmGxSwJVIr?QYz*u3RPLp+-Yk{B zRatLWl)dN*mDOgc&%e6yqs>-YuUC}4$aR(VDyjU7%6gqt{!V4RQc?E8f2ge2O658# z>(z>~7rLpkUMrRRs;oCl<%}xpZHlrNT&=R+D3$$ehOM+-rzm@Y+v*SWN~!#t%6g4d z&aARtr6_y;zf{)iq;i1DdX=K=`R=N0u9Lbm`TDD@H%jHKD(kI^vgci+vfeC}gH+aA zWklKY+*ddBYN@P#J6~zNRw`##S+7)-J@-15^;)SMqOxACD0{AlD(m%9d63F#rOXc^ zS5B4nHbvQeHmIyOsJ-21y2^TsR4%Eqaojwio!$Gqx^a};P30rx)G8k^b6bbIyUP2> z>bn%B_v&o-id1>Gm7NJH?;?*>c_%ry$~&y=xn1RLR`&I*r*3SuZsbf=kGK{IeVPQ$4<1t;SqoQM-}JdVS$I0lW;gi$yWN8oTA zhC^`(4o0qc{0DMdmxQ__1GwEE`{8evhX1b&`eGma1$$#J?1?|)PuK&yV>j%IU9dBD z(yHgujtru(1GdL@*cRJhYixxru?05AX4n*)U}IDDT#IBTiK9N^2Yiq3@GZW<*Z2xwqHbjM*Yup*&rr9snj47>o}zAN^#}3Xj>A}dg1VvA zak`zA51H$RR=4kSTQ{@1eV5yJkZT>o{}zLrcmuEFHN1*f@G@S)i+BOg<2gKwXYjOE z?a(O(C-DRx$76UDkKkcEgahkJ34skuYD8SKKHxC6K2Hr$F^a5HYgjkp2V z<2qc6Ym|D2{$}tO{)ww`75;%MaRn~N-!U4O;Zj_Ji*b?c&_V_aa6Zn%xi|+ue{F{X z+E_;gw8mE05?f$%Y=%v-2{y(?*bp0FeKhJ3>LMiOR>F!{L2K9p z$}=d3Ww8vF#!^@kOJH#99SX?LARp$%JeV7Ep$~ea7dp`sb7Bt6 zj@dA)(%hkdEDSPZCd`Q6<9C<=zr}AbJ*LC7m9F0wSlfcY^W=EXc{}azL z_>7^zHxn zf+_X5o6e!ra4Js0$v6oo;shLz<8UmF!O=Jhjgf>ANYe${ zMe4wyJ+{NP*all;D{P4^usJrvrq~1 zK^TYuN^_9{{TcY7FV?}@_#@WBAFw9Y!0K2Ht6~+bjFosY3arSW0+z>eSQg9RjITZ! zec-6~_zvIV8+?tg@Fl*$=lBehFcF`kkwAz?nl6y03#91+X}Um~E|8`Rr0D`_xhkJ1k?#5lF<__&-umiW_Hr$F^a5HYgjkp2V<2qc6Yw&OU zOR0D0PX?=T75;%MaRn~N-!U4O;Zj_Ji*XSy#05MV1oQ<>aWArig6XS*c z|NIlH23E&vSQV>aWvql1u>zLI za$3V4RF***ERChGB$mM9SPY9|5iE>_upkz|{Fu*FEmBZk26-?y=0YFzMlW=tC+5T) zm>siWR?LE#mF6M^Wnz#KzsK(|1AdF&V0ui4X)z6^##ERRQ($ryDJU5O4|Jd%ZI*$b zx!pSY+*e<8sP5At4n2r5cmVg~KHQ6Ya5wJ4owx(H<2E$561E_97ew6!QFlSqT@ZB_ zMBN2ZcR|!$5Oo)1)}8rDqV0lcyCB*wh_*9=sJkHQE@(L?{*KYO442{(T#SowAuhoA zI1lII9IaZU*$igkOq_w!aT-p=DL5G?;Y6H(<8d60#WAMlB8_G+3P<7y9FD_qC=S8F zI0y%#fdjBV_QT(ldXau*&=>pQFW4JuR(`V1 zOENwZKHz(Nhi~x>zQ$Mh5?|nRe1=Jwh)*%W(nyMD5Qnk&1Rvuge25S5KHkH-cn5Fe zExd_0wCeSS*BM;Ht9S)3<0ZU^7w|lu!?Sn>Pva>(i6>0W*Bc&Za14*)5j>2C@F2$E z0o;%Ka4+t`-M9;PD)s9PcQDwF+i)vx!Oge{H{u3dkLz$PuED?YFZ@$K8L7X4)eKhQ zAGi`%;Bw1n>7v)q{@U-x=xPrxZXT*EhDEUm7REwY5DQ>_%!hd~59Y>PX!sDk(F>jE zi8(O`X2)!p6|-Pw%!C>7d;HGQ2+qLZTl@yoV>(QWX)raWLR~THZ%$W?Qdf*pSBz3u zj8a#OQddk@!yc?VMm;C!j#284QR<3O>WWe7ic#u{QR<3O>WWe7ic#u{QR<3O>WWe7 zic#u{QR<2@pNw?JD0Rmu6Rdj_6pwKji%;+|K0;kF>U>=>N?kEZT`@{sF-l!AO0#10 zlacNiHP9WS)E%SL6{FM@qtq3n)D@%D6{FM@qtq3n)D@%D6{FM@qtq3n)D@#t6{CLX zrV6@al)7V-C%8w)@faSp3@-7{Pe$r9JC&oR;AEVH6LA8L$8k6o$KYrjg(GnU8p8?0 za3~JJ!8iy9qJaajKla1l@K@}Meef4cBe*w%Uf2_V#-FeUcE@hm6}w<(?1UXL3OitX zt=ge>4BBEFY>ln3CAPrk*bJLu6Ksr)upu_U`lf1!g6lD;i;)PUbRj@Kv!irdduZ)7rGbo2;u?&{RQaCL- zQGJWy(pSFU9sG_%-{Kp5jj!+}zQE`B43jVspJD>WqY+1lMVc;{rVFO&f@!*7nl6~8 z3#RFUX}VyVF4$~3^OHo;1ygjv6kRYyX9Ux9!8Bd)6;8a2m+&H9!1H(x&*B+8ji>M= zp1|W;wMfSp9K|De7!Tn=jKKrAANS#2+=IJu7w*Izrsg7TXRr;o;uhSDn{Xp;!1cHe z*Ww!d8~?&TakWw}(kcdj;7VM9%kg)N#$~t^m*8StgbQ&2&c}H?83oT}Fb8MjES!lm z@cq}Gj6zyiM};)UX4n*)U}J2A4Y2{%$9h;7BQXLEHz6Epx)7Q!gr*Cj=|X6_5SlK8 zrVF9zLTI`Wv+2|hg-~=M6kP~K7edh)Av9eGO&3y=6Kh~~tcF#w3RcESSP?5=c`S!z zv5eNRhm>Ye3QJ-MERMynC>FuOSO^PZ0nCs2FfZmYRXY@tn?Wx0L2vXzCwgK|%z@c4 z8)n5Um>Dx+My0t!A>T9j4m04l_zkAVbeI;?U}{W-DKP~m$7JZi4uv=v*wJPg{24#t zNB+F!S9d6eqYmJH+=qK{5AMcYxD$8acHD+raSIxo37e3T3!&sfD7g?yE`*W`q2xj+ zxe!V&gpvy}OV0fK&~YJjTnHT(LdO{)lw1fU7ZS~h%Wx?!!Ns@;7vch(kMnRY&cWF@ zORIKhCW9F`9jD<`oPv{a5>CVkI3CC0SR8|+ag?dKLn9fCz~MLyhvE<%jDv6>8aM#^ zV?X>2f5pB^y+eH%{DQr)7xu)T@h9wo-LV^X#V*(xJ7GtRk{#;6pgp$3w%7(+fypr$dY}XCXtT6_4XOIZ zLdYiuAMpde$9MP^-{5O}g)i|1KF4R6go*gn)ZC#22Jsk&vG@cZ<0E{C5AZ(T!@GC~ zZ{sbzsnk1kgTZyYhF9?lUdBs!5ij6*JcnoT44%eQcv5!g1cT#v43FXwJZ$MI_SGGt zmm7aV|Q}MaLN~O3p>exhOeT58gm`?1o*j3wFj%*b$?!1GdL@*j8)UU2Pb& z##Y!8TVQi+hE1^vHpWKS5F229tcP_?)egBL8APBP!!Zm)(S;!xj6oQP0qBo@=!n$L5i4MMEXNMH$}%W}rLh#2#1c5=t2^|Dqh8}H ze2FjcIX=TAOvI;{fbkfIv1mLYJVr{+Maj7+ITt18qU2nZoQslkQF1Oy&SjRI`T3#a zTy&g^j&sp*hKrJOQF7KVaZx8;;$lw4?aPOOGiu?kkkN>~vqV0kQuWw8vF#!_0t9$Jz?2`rAquqYP6 z!dM6kVgbyL`7kf$!Q7b3RP9ix4+C%XLMM7+PRxPXF&k#ZESMQHVMhEOzf+n!6qdu z$A!{yp>&)PO38&%a-mB(aS1NQMYs?b;C!5ib8!yN##uNMXK2+9O=mC-r{WZxjFWI8 zPQdXv4#(mc9F3!JB#tmOcW5|+VK@|r;9wkt1JS?%*dP1hZ}=k)C*all;D{P4eqBHGHHvR88|NQSz!wOr6 zh84nsSOD{5KFo`GFgNBxAM{2qbfV!&$cZ#v7)=*O(}mG=VKiMBO&3Pfh0%0jG+mh4 zbZU{pD7r9;E{viJqv(tVJ{;uCy~kMJQr!25U)@8TW2jkoY7-oWch zy-3#>T*WJR886{QynyHN9G=B9cp6XPNj!naWs#0CIEqK`Fdo8#mSIKof0@#A@8Ylh zax?Ydo5=AKa6FE~u{Z`t<0u@7BXBql!=X3?jlqOLNauyod0}*37@ZeJ=Y`REVRT*? zofk&ug_)gaZWEOkM&*T3d0|wZ5k}{Q(RpFrIk6jd#V*(xJ7GtR!VcIT+hJR5gRQlO zJ**Xjme>NDV>4`uO|UUG!iLxY>tj8vi;);%so z2W#VxN^_gSYBBf$Yhn$oj@7U#R>8_x2`gd+ERW@|ESBNYF03?zQdkm8U~w#llfHIo z7xs#yUg8UUj?XX&6Y(h~U_8cQEIz@Mo4B3#0DBsJk%g zF3hYu^YcU7h0%6lv|Si&XM|CAVbopN1x`GV=kP3^!P9sOPvQwYj>qsQ9>K#}wL^y( z9K;wrfctSD?!`U08+YMO+=1J18*ardrsfW9X0Qo2;s#ug>u@cu!N2h@{1aE>D*OXi z;tHkSq2&yI$7o!JOK}M<#znXg7vOxHhjVcb&c<1?Lo*r7!09**r{WZR{k0tmZ(=_DUd)5JF&Fxvx2f8pa4!Z<^u(N)1G8f`%!*ksGiJh!_&t7y8Sq=B zxkKUKFi4N-FfFFR)R+oWVhT)-$!1*{2=i(fkjk9nj&cNw7O{*4Z zDuXFF87JXHoPgtT9FD~?I2uRcNF0H~ahR#ONJAM6!NE8P2cm%kus`<0-|$!Li+%7H z?2WyYdXaiE_!)n~9@rhbVOQ*eov{;k#3<~5?XexU<;f_#4TIL$3R_|eY>xZB_GIKP zXdUG)fcY^W=EXdi8*`x#dZQOQ(Gzo`k%N#OX*xGe=cei0G@YBKbJKKgn$AtrxoJAL z*>q}$+!URgqH|MpZi>!u({yf{&Yg-AQ(_8Cj>*si9cV|JW%y_Ogdgz(zSpW9ddJ`` zzQNb{3SZ(2e2&jB2@~-tCSW|qVXUdSLr)ky#z*)NAK-nwhj;M~-o{&a6K~*kyoOhm zdWWtsxQv(ZB3{7rcn;6v89a@r@FbqV<9G~@$_^c2a2OBaL5#rzmhM7d-J$UuH4ew( z7#xkGa3qev;W!M3;t(8+gU}c#0Vz2*CFiE(+?1S~l58=P06__Id@l1?1G)K6L!QX?11gD9k#_b*cw}5ORZsdw_rfYxtnpjDK^2z z*a#b91FVnrur5Yo1iCTYRPB&Ej6o>6Fa(1!2m>(y{m~D7u@2V8AF&qxpfq>LU6Vl# ztd7;NDptYDSP3g)1uT!{uq>9r(pZWea+hRK0*hlYEQ&>N!dG|b1xG!{XPAVE_!JW` z9^)_;pWtJBgb&epK)8>ToSTw!Q*v%f&P~a=DLFSK=ceS`l$_fvIrH;F$GPb^Hy!7u z;|wf%<0||ESKj=wAQ4n;FqhD&h?F2+T; z5EtNloQHF94$j6|I1^{^MUi_tgK0Pwr{H9qgfF9O?oBm4+opg1nNdU|>(GdX*Z}Ke zJ*2p3_$_{e>6PXpMWkbp z7SmvAOob^i1t!O2=z$Kjqs`L&89(7iS)>mP-s3xbi*N9?WkloXVD-b-KC8d7NV_?7 z7w*IzxE;6QR@{P{aT9LD4Y(fHp|O^*2C2IU>Mnx1i=gfzsJjU2E`qv?pzb25y9l%H z%uf<+7eU)a&~_2Doe@FZMNoGU3psHC&c}H;7w6z?oP{%S22RImI2EU8)gn!1FbOB( z1RRg!a4e3&(Krf6;s_j$!*D1LF*O%yFoQuj5DgrF{jneZhQDH8?1R5xZ|sFV@n@x8 zq@Nh{!0y-$yJ8pYjGeF}MqvkRkL|E6w!zk1)kU;o&=OlLT-7M@8nt zyqE`bV=nYTZ}dVZdSXt@f!Wc>M#zdZT_jBxNz+BrbdfY&Buy7d(?!yBku+VT*>q}$ zA}P8^iY}6(i=^m`NSZE^ri)C$iODe;dY}XCXtRv?jGyo$e!%zm4&Q3k4!vRU8eic{ ze1XsL875&OKE(u#$2g3|C-~UZ+@VJd9^wPMkN5B{-oe{=3vc2LypGrKDqg|MO1(pu z7+k~)cplH;Sv-TM@f4oK6L=ht;ZZz-hh>KjF*t}ZcmVg~KFi1gU)`ax95n_<<0u@7 zBXBql!=X3?2jd_dh=w?T&>tzeNJ=h}l8dC|A}P5@N-mO;i=^ZtDY;0q;2WYN~c9(#0SIgE0sLF#!G14}Gx?*2W*P7XE-Wv4+yzp~&hCs$o^E zf|aonR>TTe9?M}_EQ6)7)c+yuE(4@0`vwm0oJGa%7Eu8~X$iZ#MOl_zV7q&;bL{TG z#>VadB_ze}?pCA(vFp9hIoG`3Rd_|=ju5`ndZn)A7SGwU! zH(cq4E8TFV8y=S~{!J3P;X*fD=!OejZn)A7SGwVEdg2>=ov-m#zQULJ5?|yCe4cap z9Oop4MVf6ei!(Wc)A=l?aVn>9GN0kooWzNIiciMIi}ZxS<9v*d@)17Fhxi~L;QhRh z_wpXz%?Z3Km@Lwr26ymw-o{&b3&-pU$j7RWr9>zm?2oGlNAcq4fcSUknBzHw}S0r~ua#tjG zMRHdpcSUjT!Xg!^U6I-qsa=uU<%;C4NbZVu@WkyoltVa}gSZ_Basd0YAN#Todne{H zMcW!|!(Qykt=WU!*^OIqOK!og+?-vw88?j$i&V6U!N%N(8*&4#&-J)2*Wub+i)(TX zuFloCYA{};qE!r5W@oO%6}bXCv5*lnEJz*xFaP1+{EL6)7wHd!-}xJVwWwr5 z$IQ;T_$$)r@Gh2xiweI9@2L4!;fsYc!h32yTsWcd=J2kX7Zsjacw%^8&HBQ!!lLlb zntK=SR5&oaw`SME4GLEe@2>f0v^1I*-e2>*=+$UWc!$l$qx+)U!h3997M&ZN8s22H zIjV|E!rN@_AMF+m32(I7E!renJG|BAznNb$3&Wdj=03{2nRy|+-{!>3Lz%n6J8oW; zxiE7^c+buDOkHM7c-PH?Gkaxr4DY+yGqZVS{qWA4g#~{UED7(u`B}lc1+Ns$F8nq8 z{0ll4Mui2_GjsRJANI~4_R1gj%pdm1A9jxqx%g?j*Nn>=MQV;4{PQRYvd2B=MSsp53A-6tK<(W=MSCphn4b&+=}_r z3i(5){Gl*^i1LR_{*b?M&;4ui+&}rl-}%E|`NN<2!yoy>@A<=Tx%}zZ{Nb1U;phBe zS^n@-{;)KESdu^dm_IDe9~R{g3-gBs`NRDD;fMeK1=)APDdEo>Uti82+!syLjj5c% z$$W-Sa}p==DL%<3_&6Wqqs%?x@GyPvQ{;P}BH#NI`QE3<_dZ3w_bKwdPm%9^ihS== z6o2m%7u&Z!MZWbZ@~uyiZ+&t_w|b!OeTv5W_-5Y38+ik-=XJc6<9H3P=2g6sS0sk7 zs+SvF#!Gn#FXlzOkQeZLp2u@}4$tOUJdFl);f4#v^z* z596Ucga`8=9>@c@KlkIl+$S+tuyk*Oy|^d$;O^XwyK)!q%$>L+ci{FM${`#a8~$6# zO9vTj$AKKc{_MxT?8DyNmfNrwdva^`VE17B-%4KE&0s5T$t~EGo3jfyT#IXR4USFzg{kxZ*S|0|B7TJ-EPu z!&jtV41VS^{=}tR!XLSqi@1;rIG;ao9>3>zvGG@=Zw&-f`n;m7=l zAMyjf&-a4KSEP3h-r?JPi*ND`zRuV9DqrEte2Fje1wPNY{ywkhIfFTz%~_nu8L1p2QP*0*~i$JeJ4s zXpUu;9c*VCTT^o*S`3=m#6~u-o^`Bc4XatjN>;F(WgL^3%ZwOpFp8xt;Yb#91dBMF zNAXAw;}JZZhw;$Zut*~gF*uk9@jxEH{kb3a<4+z({OF;Jxrht7fb;nS z=ka@f$8Y%!zvfrWed+K8yOBjj#GoV)lpN$p0c-3YZC zp?0|uayLTmM!fEcuklsB!k76HU*rpXo^$ye=WsS>C5A0Px1*q9vd&xV+N1%5kAa^_#hwP{k)I&@*dvJ3A~GU@{VA#NVgl@##?y{$Ma_1 z#2a}7ujh5Vmg9I0ujW<$9%;mt23PQMUdBs#377o$-y^j}W2%xzMPn*i!E%;y3`cVm zOIgB^EanIn(VLq^V~#R7lEZie59eV#l!x%(#7yyS+?Bg973fl z9^~WgIFJL_pZ(aEeb}2qSDc0}mnl}dVx=qI+5>yAJG*f!Zpkg!m7B8*H{+(C`N?yUsc^NO|CA^py#pc2*xX|DNp3n1mF3;iFJd0=Y44%#$PvfaP zg(nBYB1L0PGB}YZ@OU1_V|fgZ=2&Lg!FIN>l`U*e7bzOkWYEY4*0YYad||>PGdqpn z~ihqq2>C zyb(9#23()(ab2c8jmpxVM!B*ys8LxO)TnF?4_uwAaaFFumD!mqaYe4cPAp`^Okyr7 zOM@DX`8WN;|KguagBp$b-N(Q2SN_7Exr{$?DVM~?oAjf>VlLuBF5rCrz{=jzvLIeWRpHO_>7w`+Se@@*Td-xA-RC$Zyi?2Cwl|zQULJ zQfgWM36o~7w!DADDJr|#L$BhMyn>hWGG59{crh>Hg}i|0^E`Tcrl{;31HCKLyE45i z)4MXgE7Q9&y(`nZGQBH{dlzz7CU<3WS0;C5a+fR9yE45iJH``_=2&Lg!FIN>l`U*$ z6C2sU`oyqEdRJEK6E&=66)Rc6a+YxnM{^WQS;CPljtz@cHo~BY!+8{s7ALPviSx|SEh7jN>`?IWlC43 zbY)6crgUXWR~DBp{{0cUGNCIIx-y~5l__1B(v^Mai68KNzQ=d@4&UZme3NhRb-u<| z`ATBgA*CyO$tPaq3w)k)`5fnPHfM1rXK*^7jdy5@!DK$er#Xoe`4pez6MUSH z@lig)hxrg63?@7DfWiH|kN5H(-pvWTi+A!4-p<>2D{tX=-kjf|n+$H`4ZNP$@menL zotdKYiu6(CZ&a2`eP%oLRmGZ49Qkt-Lua*-<+xpI*!7rAng zD;K%)IC5c!$~CTBiMgm; zlm!fwYVnN;ObnBt8x{t%+6eiD{=*PVxb)>j|?&_NGpUo8*k+;9M7A16K~`Vygo7PkjRx^ z>l5R64X@@^ypmV&a$d$uc?mD(MZAy~#Kt>xzQK7sm*?>r}0#t!jpLt zPYfnIbb`V0JdVfm7#_{B%(8>+Y-1~1*vuw2=69&Upq_QCWeuyjymw}bD*B|4s_4ya zxea@QDnzbA~JM^i+ zC;XTn@k4&V_xT>*`zD6-rm3bQMZhp>!2- z>EcBax(cDI5V{JX%T*{{h0;}w^~5YY*v>Y#vW3lTVj~+^&pOs7=AsIvtEl#gDpsY#4U1GU+~6o4$zeQ#hx0HV%0qZC58{D5fctYl?i-93sbU|4 zy}1|na5##D!eI`Sc!5QN=t1xvP-73c0J0y9&9hkh==GtB|`2xvPkC z7yl-yU4`0Js9lBH8*k+;9M7A16K~8f(hUaJ^EzJ3alD4VPgt=0e-tRHEK46+ zIfkP-ilr>!NEUMhi#VJ|@kkD%H)@J14>ypzO1Z0)yGpsMl)Fl~tCYJ+xvP}B$~bpn zkt)@$Qtc|$u2SuCm2y`pca^(&;;!6+QE2{ zD%UbtlWTBwuEtfl3Rh-luEZ6&0z0vg5i=I4vLGE){L6p%H~-?Fsg>mumi@0qn(d*p zIFmCtozHR_r*aA>^BF$PNt{UU))ZAfX&`r%a#tyLm2y`pca?HiDR-4}S1EUuaqi;Z zB(3OUF9`CaW${v zmArzN^DSyp3IYYB2VD)!DNw+ zGdPyV@Mw-@mK|(o8(Z1JW;U^r4Xn>EQk_99Ygo-HR&vgSzy8M}Rc)I-v}zmnVoz?( z9_-F;+=^Rr3wGt^>_YF>6jg0%Aa_-AS0#5M~x+OL#Fa z;)T3`=kq+C%X4@(&!YEeimJ{qP`WCmt5UiurK?i9Dy6GZx+#1?K+c>wq4e%zP)aPMHeLsfej?8!a2J9p!* z+=V-HC+^4{xIKq*2nTbJFGf|{84TnA_Gdr#8g~jO6jVUu1e{ul&(tYs+6uu>8j$=#lJ~HS0!{+LRTep zxhkcrQo5>lJ@FmB&A0d_-{9+fjj!?*zRZ{SB40=hi==c_bA94D&f#p%;!MuqbUw>z zoXRPj%xCy?Y`jR53?}j^KFKHeI3MGqe1s44AwI|lct7vsy}@LW?lHKV6L=Tz|RXvKOEa6BNa|DYxoJa9U z4&xC#oZhG@sy@^}>8h2kTIs5lu3G7;m9ARps+F!<>8j(>g&nFEx@w`T7P@Mo%T+5~ zwbE7Z;)y$RC+^4{xIKq*2nTZzx8pz#VE@EiRIPN?eSM-2dvjZE!(Qykt=WU!*^OIq zOK!ogv0;a*H#g|Q&A2Hy;l|vE8*&4#&-J)2*Wub+i)#ks9jac#V0Es>Rk;dRW@oO% z6}bXCv5*lnEJ&^TH@`#w82rt@_$UA1@2S;emiG-^^-PbN!RdUK(>Rq=IGNAzX-?uq zKE)^LJ({BG#|=cTTI8xlu3F@(MXp-pszt6^qE6Ib#IUe3#SDKFv0yoeX_0-n$F zcrMS0jd$p5gR^)h&*16I@id;wQ+P5@;)y(g$MZNI8%%cS7=xoZmRWYNoo#Go3!B-* zMmDgXb*%LbU3HB?HLF<33YK%$gpFo(8n@uT|8wL~O|SH!H9fgCd$2pZaVu`gE!dTt zvkN!lru0TlQO(8%N>`(FHA+{bbTvv>qjWV&SEF<_N>>w?E-X@w(A5ZCjnLHyU9Lvy zYLu>~vnQ^^6}bXCv5*lnEJ&^Xm;dl@{>48N!y+kN_3u9M8-L|5{F%%66PI!cf8=5= z;zBOq{MdMrelVEF@A)0S&g`Mf%X-1HRAq_%7e!+kA^} z@(sSu*Z3-5;mdr<7o+MI4PM~$oXh7pC$(mIZ`2gkTN_(7w*iRxFdJq_8iI~ z9Lz!7jstx$su^I=pZ(aEeb}3qP3ZnV{&b;cnTP(wrCh=vxtNQ%kPA4UKX4wu=XdmO zO;OD^21-|>bTvv>qjWV&SEF<_N>`(FHA+_#moENI61p0ps}Z^yq07}MU5(P!yzPl^ z@lC$L*ZCS>pjyTDhy0yIQ%cmAhKGtChQ2xvQ1C+BkP%k!sbhR_$ulu2$`GwQ^T0ceOit;*Q*b z+jA&~a4-jPI}YRk_Gdr#P0U5La#!2iC${A_?8TnknmyQ^-MAIEcM!CYF9H@m8)=NcIHZ4kt?th3mGxPg4CLS z`49ijFVbHIfASCh&foZJYVD{AgTvn*?eWxq|8sS<(>?TAPUBQg;bcC;r#Xoe`4pez z6MUTBttqN~)IjcP<*rulYUQq0?rP<(R_%s2q#;v#|w_sOp z&Mw@Hn{pFwOz+$j)oo~?dUdK-r+Rg&SEqV)s#m9ab*fjVdUbL2!amiBUY+RGiC&%P zIAP&@ahDwPVnjkuTJpl1g|a*Uc5tkSEqM%dRM1+xjMnC z6TG?>Pi$rr8`;2m*0Gi~tY#G}S;6weTvS(PFovT!ilr>!NEUMhi#VJ|@kkEi5j;FL z>`>id28Z$x9?XMyAP?aF+>iTmAMVY)xF`4E?!kD6>UJ~OmAi0f?!+Cr1Gnc;4&h)9 z;&vR!0qk#w>iQYO`(iN`&PfbAByx4Ld}1bNa5|smG*0CdPUbUwnv*z@Pw~mvc!!=a zc$|;%Q9iZ&a2~}YIgCf}a301(c?b`t_iKvk4>S z+>Qe|fc@Ezec6Y-6LV3$$klJ-6TR4zTeAndvm3YKmfV6}xjDOVGj19icBp<6gN?Zn zH{=FfpX+g5uEVvt7T4q&T%D_N)nL3s^{W`H%+6eiD{=*PVj&}DSdd!xFaP1+{EL6) zcjym;-}xJVwZ3GzJ2cIsrg91=^BF$PNu0>1_#~g;<9v*d(z~-n^$#0}T)oKE zi(I|P)r(xc$kmHny~x#zTzwq5`1eQS>NT!j|ET##4C; zPv%KHktgtY9>-&O43FkmW`oHNbr`g>jje29Gn?4R2G+BVwX9(^t5|7=>MIP&S;jFO z%~4#=yR)=K4c*g6HFV=v+>%?cD>r8sZpKZy2{-0O+>qW+B5GLQK;#-ku0iA)M6N;P z8bq!^(6FZl&O=V$zs zpYUUT#1Hua-{*V5WQX20c!zKEExyS&_&Q(Xt9*qo^CiB>7x+Bq=6C2hgE^edS)9ok zsSQ1r_jRb@LXWzD=kq+C%X4@(&*GUpgQqjc(|Brreu~4%6uAbGYY@2xk!ujS29awJ zxdxGI5V?jpa`6snT!Y3nXk3HF3j15AM$0 zxN9)pp@v-ycIHmpkvnjE4&@LI<{)mzfgHg8?8m-#sG*NRZ*I$N*o!@R(Qw8HNT>Fk%$_;Fc7&0k!ujS29awJxdxGI5V;1CYY@4HICAmt zkH$43o*c zIF(a4na}WPPU1v9#V7d$ACHZ9=rMyw`3N88Lwt}A@P6LMdwCD<<^};?SSL6!p z#6m{QupqVJU;e|t`4|7>AN)PPL%$jP%3t_1m+`06#^U9D9crB7QIq)$pXMY^`OYZAF8k!upUCXs6rxh9co61gUkYl{JmC;#B@{Effz7yg_Wc4(QwPh83+{E>^fhzq%Z^Z5hk@q2#9Z~0AZyhC3b ze8n&M1wZF!{FI;YV}8UB`2pYOdwiGg1d|N` z&dKl4Y=c>x$r+r^XH%QHEq8~`_o(xDF3;iFJd0=Y44%#$PvfaPg(ow2lEaA zlUuU~FPL!5tj^=s8vft^5NgvR4_(LwoX;OPkKgkw8HNWDQ{DQg99X_MdH7Q+_ z(lsevlhQRQU6ax^DP5D&HN~Zif0Kl+N$8q{u1V-}O-k3KbWN{%;wyZaFY!gbz~?!a z&v6cCa~5ZEMq*f`=?2eo8mDp!C-WIT%}Jcdr}!kF;NyIZkH*G}^oYU3e25S70p8F1 zcrWka-JHO?cqi}R?Yu3REYht8w{Sdf=1shjH}HC1$7?x`*YIjy#VdJ5evvLWxQv(b z5?;)UxOl?p|KneaXda$EwD~9=$zeQ#hx0HV%0qZC58{D5fcrDIpToYCyJop-mb+%T zYnHoaxoeiYX1QyYyXH7|VUe2Eu37Dx)vj6Xa?NtrEO*U=J#i4X<3J8zfA(Wv_F->s z%Wc?;Jri?L^VSAE*qzvA2g&9%5D z*Wl`0jjM7MuFTF{DHtzO^NI#5uoDXzF~fq?rhoYl|K?x(lYj7c{>ESPi}Z`Z&s@fz zxRgs$n~NrF^jN1{R8UZGK*6oy{|{&?Tvqsf;m3uq7tSu6RQN#Qt%X+?o?m!MVMk$2 z;mE>63il`+T-d8{v%<9sJ4L@m3!=}Xx1;ByDbXX*ozZpC#nI`}F;PP_IyxfSC)y$E z6KxT#7j@43mH9FAb>{ud%bDq!Co=bBZpvJqIXiPgrX^F68J@`4InW*&&?M70c}X zW;rvE=-u3-(p5i<3THpj9X}4|bmcNT9v9B(+GTcJE1ctBp|Coc9qtPs zr2CfHVV`hLcP_L2r{SFLU1s|e!a3c!%=YVqbG&!qxkDca=XAv~L-z~kbiFb|J`d+~ z#WF)qDkvD7u2*Krdf}X|SZ44;1qHdmei;WJ5I&LaRA$hZ1qFjXPX7XfP6_80=MBR7 zko3IWBjLP{^FiU9wmviP>u}yPoew-MoOgHLD4f&2X9heL&b!3(mhi5m-NFYuCm&=6 zY!%K)+*>mJCx>%#>B6}voRhY%A6&i&$f zIG+{HeVn_5bJFt0Xw<}T?wS0Oh7X2KxIFwjQs)o*?{80=pNW5r5W1&1i4*x0pX3vK zoavp5njiJ?BTTPf)clZ-A7t(Uhx>USeectJkB{%>1p3~m`A#3-!P|KoZ)Lj8QS*2o z-<+CjzRBQ5-oWd59k1m$Uc;+-6|dwKyquTuQeKi6zN%hqa1k%$1w5bU@m!w6vw0TJ zE+SdxA|5u zS)?}&-r(zejj!?*zRZ{SB46P1oXh7phqE~=zeqC;W^g*6+n{kSjp;ojVfdvXu%&fT~xcj3<5i8}`4 zMQYi>V0#Yb5Dw-bZpVQf!2ayVzU;%^+?Lx|q?TR=J-Ib|usgf)ya^Bdk3TSJS>U1b z`2*+idw$1n`3=A3SNxJ+@N<5~+@}toQ0`jfu0`%zN`&f#p%;!MuqbUvFH7HOKnR8HY!KEtOu zi4*x0pX3vKoR9HQKEj7%<3)PN;6XmX`*|Pl@c@KlkIl%00+NSGrcEYgM{d zrE68XR;6o=OBZ&iRp?rUu2tw-g)Y~sbgfF)x}7HueZ1JAdP^{DnW~zZfku_=!uoggluYRk~KC zYgM{drE9&_j}wljfwJKe!(zRaaiPv%*ui@3aidXUqUe3#SDKFv0 zyeKg&(uD>W@O+-fb9oNW=2<+GXYh39cp6XTDLgqgUZj%@PUHzZp2zW69>b$KmRWYN zoo#Go3!8(&1g5@mZ7>?#BUyNEy4N5qY#T>yRKE1pzMs1s? zk810}&A2Hy;l|vE8*&4#&-J)2*WudCt>v&Lm99DrX8P3hW{u1)FMl&&o< zUD%;Ep=%SmHlb@1x?G#mwJKffKj{-&|K?x(lYj7c{>ESV3xDP^{=}tRk{EXAM}x&& z#D!eI`TT+N_&vYlxBP}*^DBPIFJj{z`rP0%e#%eyF+bvm{DANCJ-*9#_%`3-n|vdf z?9l55uklsB!k76HU*rpXo^$ye=WsS>aVBTvcWAo7vz*4MoWjYeZC#hULuY%`Sv-?x z@O0*Q8c*dZJeeo)M4rIonLEzmSc+Vm$hC=Fo5;0^T${+XiCmk=wTWC?9JzRhG_FnK z+BB|B<8o~x*CujpHJ(__Dps-vIFI6y9L6JfI1l5Y zJcI}HARfpAxPNTep|<@D_T@g@n|pCj?!n!;8+YX{+?hLZNAAGwgYgcv4K*0T!5qZx zIFJL_pZ(aEeb}4ZavSzyPv6kBZEetl-Pw&>aZ8>v;rajZ=iO~Tc<4NS&+qsxzv0*X zieK^ze$LPMDL-NEV~3BZbZtu4rgUve*QRuBO4p`zZA#asbZv3z;@>2pYZJOQp=%Sm zT$|FhDP7x(p7;Wv=UhI=Ih@T|oXHuS&SyD|Qxn4?O);3vXZSQHaU!4MlYD}Y^D#ck zNBA%w;)AjAB0XSmKkwtcyoYyl0`KCTyo0y%Hr~oxIG#5LlSR78;6~oS>vC4?~76U5$U7a59eV#l!x$O9>fEA0Qcv9 z+?V@sZ|3%L*po`vu5|56*RFK!O4qJ*?Mm0KbnQyl9+xicP`l8z3thX=wF_OYUFq7D zu6=+f_Gdr#WgqtDw%mrj*ppkc2fMRdVlHam%3w=w!LHn#UAP%H`3^FW8ZTpx1@NfRbKlulL z=WqO#zwl=+<4^e=T57O_KXNe_abarvu;uR1Qy%pspWx$sjF0jWKFo*sARplUypQ)X zcaOu}6uEYhYZtk8k!u&Zc9Clrxpt9j7rFL0a`Eqv#CEvop2|~rGEd@(vGER_ zU~oK-|i_F*vb|*vx$wtWQQ6I>RHEH*07pYtYihtS;jFO%~336i5+Sm zX;91&EaGq;#fi(?p^nYcM|EtvKJ>%XPRm*W#MYt>LgbMXp2SIz+BR z&tl^p`qbbPe$0>fAwS^z ze2?$)9lp)C_$J@r>wGPk?9i(QukdBQ#25JjpXXdY$2pwMS)9okoX%(cO;P(agQ=Xt z$$W-Sr*?Fi@cIAvQ|^v4J@gEo&KytUsXT=z^CX_g6L>t2zm?2oL5#Jdg))f9}V9W5XhK>|?Mu_u`)1gS&G#?#f-b zGk4;S+=1J3D2D{&Md}!AFo@f6AP2BN`>`+kus65mHtfZo+?qXnG3w}U(2ZMhOK!og zJZrgMjK24%@Axgh;n)0%U-Aon&d>NMKjFvxh`A3PKA_TdC|!rrbtqkj(sd|ZhthQ@ zU5C=sJY1L+ElHO4p%u9nX8>Tt3G+oXuIB$r+r^XE}{iIfauG!wx-T z@H8iJBA?=ue1ebjF+R#i_%I*hgM5JZ$HqH!pTWJnhj()V@8X@jgSYcG-pX4zo;UL* z-WW`F=mvx9c^$9iI9|i6c@?kZ6}+66@lsyGi+NFghb}a@fami(p38GM@4t7bBU8Lj z{HWmG+>3j1kJ$E1@$Rv0QT71t&;7VBlOHcUF8T3-$&VLIe!O5V`2oWr{{xC#R^+lG zmle6J$Yn(?D{@(p%Zgk!j$Hf`)VQq1Wi>9Vak;F>WkoJ4a#@kfidWp=?1q==hia@NfRbKlulL=WqO#zwl=+<4;`5CHWot z(O@wbaUmCQer(u|egAuhvYFzf6~Uwx!MGKL!6X$OQMM@gQKIZ{9>pU$j7RWr9>zm? z2y+KJ9K-_?GsQ`h!cRA8QZQ*!Flkco8jri0SMf?-!OM9WFXbhvx#EirE@IN8@E1s$ z6ik{FOqvu-niNc$6g=DW&f=LogQqjc(|BrPE>nDp!O1*{C-MXy&*OM3kKxfA%Pc$C z&NjBj=E5szF=%EJ8`;2m*0Gi~tY#G}S;2CaaZE55U&+x1qgcukj$|=MFujbK;`B0R ziqp%ODNZkArZ~Nfnd0;^W{T6xm?=&#W2QJ<#@&*gNN;1NIK7OS;`B0Riu0H80Dr;# zW5YI#|L+|dn<-9KJeaI_Fj?_nvf{yH#e+Y`KU#1Zf8tUu;g4L*MO?_-0*Cqhf%Eu% zY&N>!5k8!nO@7_8Q8xK?4<^6v!Q|IHnEbj2lVA5>^6MU6{&&gqGsWMg=8C^D_?lnw zOMb!6`58auC;XTn@k4&V_xT>*O$3mwj+8DSopk^BUb zWQ32CWCW9B1e0V0lVk*wWCZu~ynVS3_fE}?+{<83?!n!;8+YX{+?hLZNAAGwIg~>< zn1d2?nUUKW4CDazXFv93ANJ<9+=ji_lUuU~yR%ztF8mU0Ww0f;U{`L=F5HZpauaUM zjkqB<;QCyT>jrc2rCP^eZLY;NxdvC~YFw48aAkJpN?egEuoDZD9ST2z$RNXl)Z%~n z5C8W0%H{6Ra~?H^vpI`1IfK*rET?fQlQxB)Wzwc#(xzb2reH3KQ#d4X3dV7Ye_fL{ z1(P-flQspDHU*P51(P-flQspDHU*P51(P-flQspDHU*P5jm_jnCUFXbBu>Ezegb## zPTs-Wc^hx#Ega9Ac@uBs4ZJ=v?9g=v*K!=M;nlo~SMmy8&dYcyFX6?!h!^sL*m#G| zH#m>y@*JMcvv?-Y;OWfqG@i;+crs7oiNR!tPB1v0$MIMm!=pKtS$43UZER%=o7u$1 z{0=o3)U%GYtYJ0hE^miQ`lOF4>CJ7q4STUCw`LD^XE$!eEx84|GPk)y7m8eo$d!m( ziO7|RT#3k)h+K)tm55wP9J#QIB^p{=jzvLJEoSy}g9s1PZ6MoE(_#r>w`+Se@@*Td-xA-RC;Ol%X`5%eGufVGY zukdBQ#25KOYDwP-oo06)f55$&|N3t(go}5j$6mq9c^NO|CA^py@j_m}^LZZ6Pn=pMCwYUt|U%fyh%z|qI4xnSE6*e5~(YZx{|S;m}Ljs z*~V73u$fJ4WCQD2$J)ePrliK8npLc11?K+c>wq4e%v=0Z&JxV277Za?#Vs4J9p!*+=V-HC+^4{xIKq*h)pUP zY%qx1aUchMD|K#ujGACe2?$) z9lp)C_$J@r>wJx`@)f?!mlDH1y=d?PpXXdY$2pwMS)9okoX%%CjZ-;=lVjt3ddA>s zPU1v9#V7d$ALnCyl#lRXKEwz40Phbb`*fedy}XBaa{}+;oxFp$^ETefTR5IK^CsSy z-=`Z4uIF{Umg9I0f1l8O_VWH4CSx#5^^-5K*RP{<#uT=F)Rj)LzURb13(JK|bQqe0FyqppyXfv!@v0#|4c0{U*6v)mCp94S)9okoX%%CjZ-;=llcsv<|IyJ?kR^SsdS}E zSE_WSN>{3MrAk+-bfrpHs&u7s>EhoXp(_=-QlTpqx?HK!l`387ot}6HZ|7~imA7y_ zZ{|(BkvH&qUdL+_!w!uzxQ18rDqhJecsVcQrM!d}^CDiz3wS=yi;Z{aT!V9XHqYXj zJcFk*$J2N!PvOZti6`;|9v@70=s1I8c?^%{SZ3M5cDAvVEo^2J8`;2mUyMrY3~E`! zYF4q5bH+XJclhRR@a+2v#}8l5H+NAsy-iUzy-iUzy-iUzy-iUzy-iUzy-iUzy-iUz zy-iUzy-iUzy-iUzy-iUzy-iUzy-iUzy-ndCWk_#Rlud6_lud6_lud6_lud6_lud6_ zlud6_lud6_lud6_lud6_lud6_lud6_lud6_lud6_lud6_lud5a*eI7xZ&Q>_Z&Q>_ zZ&Q>_Z&Q>_Z&Q>_Z&Q>_Z&Uc0C%?8)HoZ+zHoZ+zHoZ+zHoZ+zHoZ+zHoZ+zHoZ+z zHoi@TW5Yknklv;!o8G10^VB_#r>w`+Se@@*Td-xA-RC;Ol&iukw}rKD})45?|yC ze4cX?qwHPd_Svm?V(~7s?=2iZa(VkSc9rxQV^?NpuEZ6&0z0vg5i=}E&Hl@O_&0NZ zIsC~#_&a~&ul$8Sa~Xf)QZC_-T+BsWn3~HjFqqFDIFH}+JATV=_%**`dYhtbdYhtb zdYhtbdYhtbdYhtbe4CPeN^et?O>a|_O>a|_O>a|_O>a|_O>a|_O>a|_O>a|_O>a|_ zO>a|_O>a|_O>a|_O>a|_O>a|_O>a|_4Yw)Xr}Q>O+4MF=+4MF=+4MF=+4MF=+5ByK z&MTe6*__3hoWbdQmeV*j81^a3PBECwXZSQHaU!4MlYD}Y^D#ckNBA%w;)Ch;cv1EN zgZp_O@8vzbJ9X@;|NTAQ(V0=b<3|Ozfap4^%}*qz*BB(H{~YW zm>Y3JZou`q9@phMT$^igO|Fre8@0N@YFw48aAkJpN=#}Jex;I{1e2NslbQsRngo-Y z1e2N^oheOf5=?4xbod@G$w?R_H3=p)2_`iOCN&8rH3=p)2_`iOCN&8rH3=p)2_`iO zCN&8rH3=p)2_`kkg+r2)U{aId{PY!;{=j+sp5HO4NqBrxlVDPlpqh+L?#kF`Y;sqE z$z2I1cO@9#m3W87CYL3cT$W&RS%S%B2_}~%nB0|Ma#w=MT?r<4C79fmU~*T2$z2I1 zcO{tIm0)sLg5jsiNI*07pYtYihtS;jFO%~6TD%&1a> z5{_gsN3e*)c@&R~JvtgYfc@Ezec6X;KBKWoK6BxTX+NW}y^;rHMh)W;Je-H|P#(gA zc@Pie0oj!cSn3!FC+T z^p`XT z|G2x)@Tlr;{o~m?D5xMsKvWb|L{wBzP>?DrT}65g5C}Kn#(npg|np{ za6iy3tp-co|F#+|(Oj&#NOPg)0?qlF^GrGo=IUUM=4{QMG-ql4s5w(}hURq5Y2i$< z1MZn8>7IF#?wKd)o_Uh)nJ4LPfn%o@Dsci%hW^ zq-svpoTB-I=J%SDH799K)SM7bN8ZtR9gNc)t2st92!+ntj6=vIFjJNxHiw>F$=KyIYd(Zb`bkCF$;#q`O;^?rurCyCv!F zmZZB|lCoR!{3LLfOVV8~Nm(v;?(UZSx4T=C?rzC;><&K@$tO)U!%s?0{`)7THde!e z;ddqZp60un?`Rg#d|NZW=3AQiG~d*GL-TdbyqbA5&Cfo_4Zf;_+?ub1v$Y+lt69fQ ztKrLUl znjJLTYqryDtJy}gwPq{LmYOM=A(KwSpbi3>$(l);eodcdqGp1oSJR^zAI>&*pq`sn z!#K@Y%@&$5Zpscd*FiJQXw9aYO*9*8Mrk(EY^d2lv%V&GpsxOR9Zk0ss1{7AE~W+BZF!zpL`kP$VvG+xrU z$;Qdg{SSX{LSFHnzQJA1JDRsOZ)x7tyrFqr^O~kxSMvVcx{`G3O46+>Nw=;f9k;Ip zZeK~deI*(0tMEN{>q^qCD@nJmB;C4_bn8mett&~lt|Z;Ml631z(yc2=x2`1Jx@v1V z4Ug&#xqT%sIHLc3So4tPLCpi2`!)Az?$z9*xm$CW=1$EWn%mu!b=szbt(sdjH*0Rv z+^D%hbG_y|&9$0qG*@e`(p;&zLUVaI9eKpdbg)!&iRNO>MVbpW7iiAcoToWgbB^Y0 z&7U-9Y5u4=Q_=~4jA!Uzy5=;^RL!ZHQ#60j{9bdi<|NIDniDj~YmU<#t2xG9C%FTo zbudbEq~-|C;hMuV@24hhOgCcIxc}~_@!HwF6T+`5>DBa@Ec~bDL(K=8_ch%GY-bmC z7f{k&KuLE2CEW#-bQe(4T|i04-9Ul6fs*b9O1c{;>29E;yMdDK21>dMDCsVsq`QEU z?gC1>3n=L>prpHilI{XZx(nFOb_%;2CTW`!bA@0BbEUBZ_=M^pOOh9C(!oZ}4VvpU z*J-W^r)fDPSTvHIYD#0<~YrkPIHT!Ay z)$F6$TeFvDPt6`~$_{ncK{w5=nq4$IYj)CfG&^c`&}^^SPP471yOZ*vb)S7C-6tQ( zmf@E>0{7WR(tY-k4C)&OG?O)xH2s=B%|y)vO|Pa$GhQ=JGgh;Oq!T_RV|375vzcbJ zW>d{3nvFH1G#hC))NG(xU$dTOUClb0wcQ<(J5WmpH8pE!R@eMavzq3@|7nM!+)C(Z zMY)wA=~jYdPV?4LZY9WnyOkjMg3hyPX4TB1nOXCB%}kmZHJ#@a&uTuSnL#tX=F^%_ zX{OVR)U-7%%?Oi?9&7%s`IqJ+lTM>Qb?{L0f#!Y9dzyDO?`YoEyrp?l^M>Yi&1;%h zHLqx1c2jof4;}ojc}er4=5Lx8G|y|E(>$wrM)S1hDb16bCp3T6JRZ*Q4jt3MFPcX+ zf7U#rd06w1=0VK^n)@~PY3|kBqq$pim*!4McZYW9V7ulv&8?bSG&gH*(%h)IL36$4 zI?c73YcyADuF_n|4z19^a?NF$OEs5hE;bqU^8c_ycEB7bJ7A8J9Wckq4w&O)2h4G@ z1Lio{0dt(}fH_Wfz#Jz#V2+a=2p^}&j&{HtCOcpblN~UJ$qqQ?IN1Snoa}%(PIkZ? zCp%z{lN~U}$qty~WCzS~vIFKg*#UE$?0`8=cEB7bJ0Qo&y#wYj*#UEy?0`8;wi7VN z$qty~WCzS~vIC3s4Hs%I(44P1Pjjy39L?F9KWWa={84kJ<_tIGTS(J&FikU6bE@VP z%^x(s*PN_5Npqs+1kLf9<21)=j?o+)PDegAqjWG*bA;w_&0(5DHHT;p)*PfcP;-E0 zf6acHeKq@N_Lh_#vID(z&{MOAW_QhQnq4)!Xm-}@r0HmO)a;^Pc8i%{!X6-L#^rYksF$P4ipLZ%jH- zU+bW%W);oKnw2ywYF5xJulbecmzrN_mec%Pv#e$r&C+f-_v|o^Bv6sns007*L+JepXQt4lm)q^ zc~kR-=5@_$lI|v5)xj0b%bI^^{;qjR^P=W&nin+BYo60Qt9eHAwB{+zlj$QJ_nw~6 z!LORfHIHfjqIoo&vK^Vi&qfU+Hp*YUkGvXrKJs|vfynKV>mrv%&WTKo93MF>vTtOU z$TpElk+G3ck+mYLMt%|bS!ChJ0+D$lb4F&0OlSXT-?T5;r)=klz1!Youe2A~GwsRt zD0`sY!|q^*Y_A<{*R!kH73|V>QM;i1rv0*=)y`l&w(eS2taH{eYrnP4T5Bz_W?NIO zan?|)kJZ^~ZTYPh@&%NdRu!w9Rop6My=}c_<*+hZkr59gZbV#+I2my`Vwc==`Co=e zJJN~hYDG;AD~u`N2kXbYxp3rGM=}}#hJ#^XC>R0;gF#>* z7y$Z%exNVtHWCvdWPBxSkWC58Ctf&A;21&pVd>|1d059->co1g} zNGB^QmQf231Db+7nmz%H0s4l1jYJ*y!CaAIa;G}fv z9JdMncRldGsR8GI(F2k9Xo83yR@4>ufpxc{E`vY7@8A-+2%O*01#ljm182b*aN0#T zJNO=W7rX-sfVV+@@D|8t&LMe6Z!&rVybkgjSW&0INpJ%E3XX$g;1_Td{0xp{aKh(M zH!JEeqeI{zH~{v8ePA!x19rRUY6tUx*TAbFH+Ut3JRwPW+rgI^y##U@SW&ycPOt-P z2iw3_umx-eo4`h}LEyO09qSpb18cz=uo|oaE5Qn|94rG%!4j|-EDFPY4qM1*0hkZw zfw^D~m<@gcv%rsFCYS-HgJ~`t*_^9sR|Nn09&r8-t_S|V9%x+IeOx`P#+5)tPyv(& zUzz=r*Zz{x7oZ&Y9FzrRKxt44lmsQfXP`JJ20k_WCpZ5IqoSY)_!xWy3WGx6L+}B3 z9~1b~if(PI}xCicnJK#3B1#W^H1{tlW z>pE&&C3UWR3qQlzC*`7`r`0&seQbiMU<&vFd=DlAXA+tSCV=r^92g76fYD$S7zsvz z;b0gT3WhjnFc<^|f&rjE=m+|OKA<<~1$u%WpgZVhN=Xh{S4LexXV3|x-PevxI)L_| z9cT;MfYzWDXlY7GZa#%k2n0a@B!eX22R@Jp5`Y(YKs<;ONGZw9$1-Z+qK6$!tI`-V zu^KlA%|JA03Yvh%APO`B4MBr2+)}E~s2->b>VVpy7N`kofa>5oPz`(wz5!pmNGFee zTI$k`>70M@${>7U;QTMYQt)4{40>5jOe+gaD+^333rs8bvKl{j4}iceWhX*pT3KLP zSzuaOU|LyVT3KLPSzuaOU|LyVT3KLPSzuaOU|LyVT3KL9*^v*#HTNC~u7WGzGWY}h z4laR<;5TpqoCoK?S#ZX{u^OLdbPAjVC%~`ZI5-A=0Y|~l;0QPj4uOLTr||(s`@uf2 z7wiGM!7i{9>;T)rHn0_J0h@ud32g)$zgB41SP;{pg1T7J_VnEqM!))7<>c@E1V{U7<~vn z0Pll>;63mzcn1^!Z-e~cEszhq37j|3>mV=416~8Kg52O0@G^J_qAkKq{CDrhp&7_h2%Z1SWzBV7$U*(6)02H1tEnlQ0Pcf(;4ZiWZi8FkCb$8vgKNOKimrgm z;1BRSxCAbO-@pZM9-ISb!5MHGoHA=CC*Da$C%~`ZI5-A=0Y|~l;0QPj4uON<0N8K# zPi}r6qrG4c*bR1ponQyp4z_`d7oZ&Y9FzrRKxt44lvFrPOECHj6bHq?r{EJ%6chm;19L?t z$F(q%Lf}L20dU?&1;KmZUGNSl0Nw`q!CN37coVzYc-uq3h!jV@R!)UaNK6dYLlS?((z0GY1 zMll%)Mt}i|psuSO)OEFkx~_Im*VPW{y4pcqSNVKJ_tg&SzS=?ES39WdY6o>)?Vzr! z9n^KTgSxJEP}kKC>blxNT~|A(>uOgG=zXo4Y+yM}^^sXk^^sXk^^sXkhwCdf9R`Mi zAz&~V1O@^BoE2BJYz&;&FFQJ@iM2pWL;pdP4eAp2K`QEgBQ)C4s^b?_Z9R|N7f%oTya zToDM&6@kE95eUo`fuOR!xf86!JE{mOfbs@b)AQgQI1A2z)8G_12~L1t!ExXmL%)Ed z;Ae0I90rHLL2v-<2m8QYum|i0yUhN{0_6DLCS9xr{Rd5Ad z27iFx!6k4J{01(#kcMuj)no_TGHL@_gI1s=NC6=b1Obo?l7JuhK%%K8IR`&_axM)9 z+QIJb0~B-vT|pPn*@Yvo)QOS#V92B+lMbN0ffcRq(TdjhXhrLLw4%*>l!K}7(2CY~ zXhrKgw4(JLTG9FrW&hgouFWYRZ*NWkfjI>P<`fW^Q$S!&0f9LM1m+YFm{UMtP62^A z1q9|45SUY7pyfm-a`Oqm3p^km#DQ4Q0>pskpc#k;O+gdjG)7UN5oib+fcl^ws0-?V z+MpJw32K1q;JdVsP&G#1f^Wdrpem>WDuYU(BB%h$gRj7s;ES~VE63<_P!^N{r9mlB z5|jX+f#RST_!N8sikeFUIUS0aksa(Y;oMA1{z}Co`70Gq(6zx}D|)Z{5Cwa{Zm{6Wf+^q!@I9EUaH1zMng}Mi7-U6{2jjq4 zFb0eUqrgZo0t^Skz);`}L4&~{Fc1s?{Xsv_7xV$WK`+n~^Z?ym$dk|r?It^D?xT#% zeH57cC@^i@_qW5G(-m!91YPw{~z2liA=WFbn($W`Y@de%it5 zjHZE9Fcs+YtsT_oTRW)Fw{}pUZ|$Hy-P*y4yp?&nl_NBs$v7}p&rdrzhS6v+3XC+c znl%H_pebkq8iOd%2s8u@Kz;LVc&X@mjOv0qpf;!lYJwV|I`|G$1K)ygz}KLvK>l%p z+!B^l*@C7IbJ_lt%8BjWm@bzi4QjAK165umX925hef=@tEPy~Do zJ_3b7As3FE7pwoJYlHAlApRf!i^U;!&=joTr27B`reFoXGC2;8Ip`MytC`u7AyzZ9 zC4#ZM$SjFW%#sMqk_gO_2uASA!@)2x6bu1_&Hl-o4PrD93;_K>KhPKS0lh&l&=d3k z-9b0d)$E_#d>2NYK_{R`$ZFP+Ne9p#v;%EH8_*iG0xdy`K=w~=KEx;p0w5VA0YC78 zM34Zyzysnz9Ec6W3EzARMlqnd3)zjM;Ae0I90rHLL2v-<2m8QYu*XGs|8_Il1$KfR zU_00bwt_8SGuQ++f(>9jSZ9#Y4z6`2>v4L*xw+v#ERlWFj3?=P3PbJSU+zN`JOY1$ zhu{IYABGbluYHfvU2q572DiXXa06Ti*T7Y91zZMyfZts>a`TrMT?D@wSj|k64Yit? zCKDXvMW)DPVoqIwIdui*)D@UhS71(EfjM;r=F}Z3pSPHES4QUC6_|5ZV9s5EIdui* z)D@UhS71(EfjM;r=F}CKQ&(V4U4c1u1?JQpYB|l!xho@c?h4GgD=_D-z?`~*H9Y#& zU=>&iR)FPT8CVLI0B12;1Qvn?U_O`!=7Kq3Huwq50zZP8UC1=4{?U;_(8D4IP6e*;sH z!>neeAcx8RnTC{+X-I)-NP*js5du??0#lFzQ;-5vkOEVX0#lFzQ;-5vkOEVX0#lFz z$26qKG^D^Zq`)+!z!apw6r{iuq`;iq0&{W;%*ib{%Y!}xPJ>h6q}e}t?Gx^3s2wt= zjKG{S0&~g;%qb%bO2+SEHFlUUwoG}7(#t6(ABgoADh0G}0|2#o9 zyN!OFo3{q7KuZJJzZ6Cx5Cj2`43dB!_&_2^0AAn$@gPp&G>>J}0>pskpc#k;O+gdT z7({_apdn}g>I0`9stf9X+MpJw32K1q;5$$ad<(t-UxTWk3j5c*GNVeMBB%h$gRj7s z;0sU=d=AQjGN3dlW%f_bl#+}}fX_g2Pz-zuJ^@8R5%4ki2owf|z=vl4m4x+2#jGQp)$@%)BJl4ZJ z#6#d9H~{v8eZbj^_JG}B7uX4QfbC!#*b26Q&0rJQ2sVKAX?wDc(OR$utOn+qSRU(2 zCM&>luna5(OTc2V2rNw7lLd_CgLz;sm;+{mpTI2eBbW(hfazcwNKM<5sf?z8AHeru zGMEG=f(c+e7zf6JF<>+pC6KRQ$nhM>XapDzhJm4A2p9|ofq`HE=nwjVzMxMSPWa|~ zGwKC;f*znd=mxriE}%2$1kz5gj!Zg$_AbKL$w&Uf*9QDZ@;~tP!;w~uDbEph$aJQ_ zbf&;`<_Igs^r|4gIY7g$81qWQ?2z`U9nwCvL*YJ^)5H#Go!X&1OkM-8g4_mHjJdI4 zR*b$wD~5uO(RXOYyYzycA9=8wVO;4kn9{0Sa{2jD)q z2kwU9?%y3ox4|uN6WjpT!8LFdTmhHCAK-Uz30!m$-oM`%T>$67IdB%70jI$!a1xvV zzk=i782H6Nu9J_tlFfPNU+4kn|L`{<|CfKlJjROY;yx@vXJA@UCJvL1X8&Z=fl+(V z4zvYrKx@znv;-+21cD#{l0lN$Ke>57BOgcv3BU_HARfelSkMB*faahXh!)8H$;~%q z)C4pJQJ@iM2pWL;pdP3T>VVpy7N{A96TbNxjH-k0KsE5Ki_uohH{fef)x{_~^bRo3 z0i&##DrREER0fqmMHh~|QUylk!B^l*@C7IbJ_lt%8BiLO0wrCHv_o$jSTQ9G94qEC zM#Vuf@G1BN6a_`V$KWGS7!(2@f)Bv^itI538NKI1J{(Q)76U+e9!8DMnaAKx1ngV_R--F3u z5|{`kfbn1)7z@UL(O?vCMxqg5I2h()j2$w&CosDwFuNx(yC*QaCosDwFuNx(t0&Oa zvqSHi_iV)sbK#C ziZUu7|m;@j5qK`mfPzZboJ^=5#7;lHn zeHDc7t9%1Nw!WZwnbqPwUb|ar#ZBo(tZen9{N%A5HdB^@lRU^1z?7xD$dskPl%>Ei zZ7Gtrl&=p8Oj!z!FgXkkfrH=x*bnxBy+p1xA7qU^o~Sh7-Q|p^S!r!C(*= z2nK-updaW9`heb`7w8FkxNzj=Pyb7w9Q*^{IhbI@(#)|mb1cmqOEbqxGrPMUTa5jS zrI}-C=2)6JmS&EnnPX|@SeiMOW{#zqV`=7C)68|g9Fj9vyWfn4B4kQ3wp*})4S8^{W>fXv`|fxCaPnHXgR z&w*#bGav&<51s~3fpj1e*uVl2VYvJESVt}X27iG^;7{-nJOKB>J#ZJ?0k^>|aMMM2 z|86k44z7W#;0m}5{s6y&OW-2-4O{@{!8rrDKt8LZ*wX((5Bx*lIgllzlw&F7SV}pT zQjQ&wwtuv8tlP>`%CVGkETtSvDaTUEv6ONwr5sBs$5P6%lyWSk97`$3N-2kb!b@(9 zR*p5TER*hhRJwt#pbO{>I)Su0>&T=7Xb;+fwgR(%Z5Xu%tw2kV0zx1N0w5VA0YC78 zM34|hc>iL(j65J7#DQ4Q0>pskpc#k;O+gdT7(}^{{flkHs3B+o>VtZqE~o=)gIb^_ zr~#^j??5#J$BO-y(Kq00P!&`Gl|dy?5mW%>!B^l*@C7KR$R7JSqq1OZYTZrgCgdLW z#QeKN`505pu~c&`)f`JT$5PF)rkdrg9I82%YL2CvW2xp?syUWwj-{GospeR!IhJaU zrJ7@@=2)sZR;$^HJ)5@9XZYBh2B*MDa02`aj)P<17jP8(432=q;80pS9%OU?><9b6 zUa$x32D`vcumfxd+rU<^C9NGdGui|;f(>9jSO?aEHDEPZ1y+I;U^!SOFzvXM(Gsv2 zECLI`0x%!U19QO~FdO^?W`Q5WaNBVvqZwd2m~-E zpW5V!`aa?WD~^7Sqo3pG=Q#Q~PW#!4bL%<$frz7@;63mzcn1^!Z-e~cErk=8kI|dp4e&b13-W;1z^foPcm=!+UIMwm zi@?c=a)9jM1&|G71zA95@I1%_GJ@y8v)~z!!9nT4)8HwP4nzVQSRg_X`xyKU{sND{ zpWq=+1aYXb;cAzb216qSt zpe0BFp|slwG75lXkOcg|2NFR7@B$Br2XP=4v`E{(7)H%OGY}1$f+nCbhysm3L(l-! z2lYT*^9xMmjH|FoRVW&4zU(B5jVwCCDW>``_;d#>DD-Fkk!pWiw_&et`#3r*B2i&ZgE?DKs`XbUtK`F$2exac$d1Nc!zQG zyW(x?LE^3H9ruwne^>rvvw1LKEF>Vo1m#!WYiSE-wbR~R>W zC|;@_CSI)mz>)u0Wd5V^R`Ei0w0MDW)FbhH^$787bs_OA<3`)XGt|w+(_LG&!-qOm z9X`@i)ZrsNS?ommtXkniJGPE zKGXx%;X^$@9X`_ijlYv4?G);({}DdaeT=Jx4|Q*K_)zy$hYxjk<8Q-{RfQ9Gh0$g32lyRa0vEw=-~u=g&VjSw3^)x= z0p}z-0e%I?!7=a)I0}9SN5Ell2pj|lz<#hV?V?~Wqdj0Z*adci9bh}y2DXANU^CbR zHi8Xl7X|AXtpjVp8n7Cy0xQ7^upBG{OTiMb7%WP=C|IbY_{^!TH)WWRH025Ux?w!m zY4KdA#dDn&&vjaSEC-+kaJWv3Z_bG8wD@QyT&KlzofhAi7jc~y&vjZn*J<%wr^R!f z7SDBByj-Wb-%W_G!?V%$fyD+5559l zf-gWh@Hr?8%7D_K6etNw@O8uZ&lnX4#lWZF6HpWs0Uv{pKw(e_dKrZki$O&?Q?BE5E z4PD$tFb~WHbHHry6PN{l1T(=5Fda-w+rLys zQ^6GQ1Na_H29v-7JaQGxSi)9%|V`EqkbC54G%}mOV}$Jsuuv*+VURsAUhe?4g!D z)UtaF1VA{NVgf?0yn`8a2;F&SHTr<8T~JC9N%Z7T9keOK6ZEGLH+#}Hj&An2-5mZvc<5#i-Rz;8J#@2& zZuZd49=h2>H+$%258dpcn>}>1hi>+mZkDG858doZ)DMy;0eFE2#Dh2x3tE5}&>S=a z(V(e;V|kh|Y7C-4BhU~u0QEsVP#4qzwLvXV6Vy;Rp6ZOg1J%H{;2ZEYs0ylp%AgXc z2r7W`;49#KiM{~kz~`VWC<97^QlKO#0X_r8K{4snCqYq0MZm}4BTyI=0w018 z!26&ecn`b_-T?*Do(Q`BOP?P61OFmX4kpd)p_x52vxjE(m}U;|AJyz}t2tZJv6h2X75 z3Z{Z7;0N%%gC>JXU?P|R#)ENSEEoeugHd247y*WZVQKp}l+h3{7z_df!2r-7^aFiC zAJ7~00zE+wzG&#_&gfL?q$lj6z)LfGX=X3Y?4_B#G_%)j=I}*<_Y*xNUYglUGka-f zFU{zYX$(w?IDdCU^t94)TIL;5G0n z$PHdGa4hf3j9vn{z>6R!$N{p07eF?U6=VUK!Sf)K!trKg^c;8=JOeU-^x$dm6i5dm zfekDWq3}Eg`p=}LiT`5s2>b~if(PI}xCicnJK#3B1#W^HK>t3A-2630SHTr<8T^bX7peCpRs)O%9HSjI?hKmC4*Nm!yDxfl`1S*0Gpgi~r zd;T)rHn0_JQ8?bsj5dLdU;|hW)`7KP4Ok6Uft6qd zSPqr}XDM0&7K24#Ay@$BgLz;sm;+{mpTI2eBbb?1N;4Qu2h%_*mN$aWPN=BI zFM)bapq>+`=LG6GfqG7$o)f6&1gU4aFpx4xD8qX!4N8HMpal2~6bHq?r{EJ%6chm; zgO3axE1@u>Lf}L20eBx21n+@&!8@P;cpKygZ-IOYC*e&-Z-Cc9UXTa823`fZ!7Jcp z@Dj)cUIaOTlLKW3FMweIGT|pP%bVi*(+Ddd}(gCyw?Lb@52DApPKueGU zLLiuSV*y6VAPM+^45Cs~6hM)nc59)!s zpbnoQB-Ca!FLk5*0;5L-pPU~oNTit)Y34+lIgw^gq?r?G=0qpG9+E_wIgw^gq?r?G z=0ut~k!DV$nG+s!XldpInmK`HPN10+Xy$|mX(#4=-u@oA3+{m1;1;+EZh-6H8n_Cs zfXm>Iv=j4pMwh@v@Ef=Q&VzH{EI0#BgHzxnI01g;2MZF8Gdc!-0Y|~l;0QPj4uON< z0N4-qfxTdl!2Q93gx!pGft_Fn*bcUVtzZk-3^sv{U;|hW)`j6-n672C2CN3Fz)G+J zECN$~mPNbd_spmxMIZ^7_{nBA#ZOS0A7NeS=2B;3c z1J%H{;2ZEYs0ylp%AgXcNEswnU{oG_1-=AdfO6n-P!^N{r9mlB5|jX+Q3i>{85IMc zf=@tEPy~DoJ_3b7A@Cvi0K5+h3fwYCe2>w);2lr^ybbb$w?IDdCU^t94)TIL;I%Nq zWsvwPquk&X@G^J_Z?5?4y)@l(LUf_EE|{O4&y#`zU1}rR<}WeU!3KO4L0O!Fua2A{a zr@<+35}W|Pg5%&A_{Bi>?V3TUtRED|1jDW`Sk_Ito_zD`2_|`tl8F7`4t93tv*&~`6UK^tA*7_evLsDtDIF_ zeviT1)@xP{`Ar6q5f3A7$nP>Z8F4sbSH#Bu^7oKrktk&!rR<}WeNxK0f3&jCw6eSz zrR<}WeU!3~Qua~GK1$g~Df=j8AEoT0lzo)4FI>uI|7c~OwzB1;lzj<&RJ_0g;z1mU z1uZ}fXbzfz=rF?j=WEKS31|$WKqJr)GywHMJx~|a0kuIbP}7C%pRWd^>fk$24SWl} z0bhfvpbDrADuIfi0w{0bSiY|qeF?q*<-q5lEGPp?gHoU*C;>hL#X&KJ zsB8sWz-F)sYy=y?daw?xbrIgbHH=n+RbVAp0hWVhU@2Gv7K24#Ay@$B8_536V>B1c z0kgqRU>5ih%mg#QbTAF1f~jDN!twpU=zB03Oac?Z1TY?q17pD$FdB>kBf$vZ3`fJj zP%s1x27|yrFaY!i{Xk#P2lNKLKu-tt0Np`1aPlAQ0jGof8Y8bAZU3iwz)var-BJ$k zpPyFt)5?BI*-t6^DP=#U?5C9dl(L^v_EXA!O4&~-`zd9=DP`F|KdtPimHm{mpHlWy z%KrTNQSrY8@_{$O8{l=27vur2890{zRYtkNE8u1D637K!1UW$tkR7}LvVp81i^B0| zX7oJB1Tuo>z_Z{PkO8CzPlKmGIuHqL;8-X^;d>1J27iG^;7{-nJOKB>J#ZJ?0k^@e zwEeru=mxkBu7RuI3b+jZ0KbDv;3D`9Tma`Y6qIYg@Fn0mMrXkpa9ZInnR@vN`>`TF z&FrU{{WP~Q;jF@_GN=S9f(oEK_zHXpz5wOG=b$Vo14{D^Bmd}s@S@;5ih%uL(A8H}cbX&@C$1yjHe;CnC`Oac?Z1TY?qe?- zSu5%}iF!_=o|CBOBsC67`%!JttAmNz`)^^_(=3 zcSt=aQO`+I&*mQvV|eY+U=$b$Mu6d97#IqMfWcr87zhR!NE!5J)DQFpeL!!} z3-km%KzGm$bOl{NXV6LEB&DrGM_$$ev|1d z059->cn}9-K?@KAnuBI(k3O1FQ_uu722r39Xb2jB`k)@D3+jN{pcYpsNpqj1&k&Mn z=46^VnPyI=nUhTq%9C+2)tvma9+zaAIhkforkRsz=46^VnPyIU%weUOlW687nmLJP zPSR$U{iB+b?(_Edz+G?$+y=M6O>hHT2iL$=a0OgeI7xpn`W;*X7r}4f0yq!OfwSNY zI1NsLli&n!enrQ@G4KmG3VsGhz+rF*90Uizey|Vh1$)x=Z#Sb|U?+cK0`>FucPElsaZB>oUn4{ z6ZA`tld0xpsyUfzPNtfZspe#=IXUfbizidf$y9SP)tuaz<3=?nQ_aa#b28POOf@G{ z&B;`AGS!?+H7BS2ZSmxq+(r#h9ef9>fp5V#;A>D7Q~{MiB~THh{cZ8&@{GO$UxF_{ zIq*3s3(A1fpcE(xN`TKmaemk%xfr8Q!6%?7C;~nPAA!Q45cm*$0Nw`$!FvMto6X7Z zGI|FT0B?i*;4P33yb0a_uYpmN5#GPHjM{+KpcQBdQa}g#F!B;W@= zkZ6$6N={(3B{kpX3==ZWdV;PB0#tK=Y7S7%0jfEWM-M=NY7RJVH%m1KsOA9G9H5#5 zRC9o84p7YjsyRS42dL%%)f}Lj15|T>Y7S)P{0ThIUCRVAg6F`q;2Dqsqz6xfr$9Oo z32b1|N`VL+B|ip#gTKHd@F#c(9)SDc9=HqcfZO0!S}WaTbOT%m*T7Y91zZMyfZxF- za1s0lE`aj_(@N(UodsvWX>bah1Si0+;5ax2egQ|p&)`THZYv#TbO;;-2f%)?59|ed zz;3V$>;yZ&cCgKbv{E47lXO)Opqc||t3@>jsOA9G9B7yJN>p=zY7S7%0jfDbH3z8X z0M#6zngdjGfNBm<%>k-8Ks5&v)Ao;Q4tVwB6Yzj|5C>vG3lIaEgJvKaGzCpSWA-l) z#i$Wz2pWL;pdP3T>VVpy7N`kofa>5ofxCZ!YK*=G-+-?{RZs;~29-cXPyv(&Ux6>d z7h#0=FHnxr=b$Vo14@HZpd=^(J_E%;G4Lt)1Qc}<-oGM@J_a9w!k`fN5PSgM2L-`< z;9c+zC;;9z$Y=%fGwM7dA${#7wTo#mE1bYjjAnr!!Avj% zOb63IDwqnUfFHp3U^18loQY@x7!SsQv0w}s4Mu^HU<4QrhJm4A2pH_3L0}*l0Q!S| zpfBhHdV^k|C+GpXgKnT}+SAgBf9cZTANfI}ApIPqpM&&skbVxDewO_Unt~S4&q4Y* zNIwVZ=OFzYq@RQIbC7-x($7KqIY>VT>F1#KvttFdpsgVN9DGYZKEZt8P4EVI9pnXh zz-!=DkQ=-LURF54ml)*&FM^yP2gnXy0NFrRkOgE0&x1@LBXFKW&w^(_29O>+4W0t& zKqRn%1tJuI$KY@9SK9tPV)Q3?2p)j@;2yXO?tt6i7Ptv+fa~B|+WuW-bOl@ne}Lb? zC2$e^1}=c};2by$&VbW=8zFE?N5K-QRpko?p(p8YB?hVHAk`eCnuAnxkZKN6%|T}{ z$AoGQQq4iCIY>1JspcTn9Hg3qRCADO4pPlQsyRqC2dU;@SI*2}7w$)A&aUhmYSb{AW#en9Z8Hff= zK@-pzM1e-2A!q>VgL(q@6P93IMs+}KPz%%qH9&Rn9jFGr1>bVTuZ53< z`+=aJgY#mgP*`G@FSQBW`OAqng&wA zR4@hn0KNy4!6YydOaSA-I4~BBNqZu=^CW$W5TcnwG;@e%4$;gZ)6DWILWpV(xz#Mq z9HN;+G;@e%4$;gZnmI%>hiK*y%^aecLo{=UW)77x9|OkfXv`|kO^c2&w*#bGav&<51wZKLQgSD z2O@zDED)gxJ_dh-zrZ8#CwK@Rfct!k5WJ_OQ1#U2n=_0^DE8$1R>Kg@9HN;+G;@e% z4$;gZnmOc5=aA6MA(}ZvGlyvA5X~H-nL{*lh-MB=w?A(}ZvGlyvA(3rFnb2M)@ z3XB9Jz;G}O3I)Svu+>y@^ zLLGQnd(aNF1#LiU&?P|1BoC3c!3ARgE$ZiT7VeP95e&b zVT3PCLrobq0gXWvXapL92B1Eu2kL@4pf;!lYPtwNG0ypyE(-pUA2dp#nNw)y6q-4O zW=^4*Q_}uDND9rILNlk(%qcW;3eB8CGlw2?G->7#%^aecLo{=UW)9KJq5En3m)6X8 zd5?F%ZEy?R1UJBSa1C4qSHNZP2lzd0|1L4Q2z~<>zEoCRmVX>bah1Si0+;JCo- z-!VqNfTQ4Na0DC%hrmH_0PF|*z+SKi><+`-zg>)Wf*oKx*ao(OEnqX)1U7;VU_Dp| z*18Dq-x@}%!78v4tN_cwGO!dZ0gJ&Run;T&^9|&}be@hl;-ST3ay;twz8CR3ZX*g2q_d1h=_^`Dt1v3QW5D&M^wNLAyGkju6bR@KjR+nxVQWH z@a+AL;r-$M9b6;^XV!VHxsq*Ys%WBUthh;Wqv8fdBO7M^60g_Mb&6{h4HXR(^%d7B zu2x*7xKeS2;&MejMO_zuII)h7YAb3fE>qN0)KFZisII7{sH&)cTBrWA6E#)LFcTBrWA6E#)LFZhZ=iav_oie8F)756CaR@|lNskl>dhay1{Pxwg@9mOenD7q_dSKOw!Rnbk+RnbLp zi=wlllcJ--k5$Deq7@w!?G^15Z53@4tra&bS}9s8S}2+;nw30ao9d{EqOsy8#f^#^ z6pa+uE3Q*qt7xcbps267MlY0;rvDdi3jVjBaQYwl9~mZTGbd>?CuuV$X)!0c#T?9^ zHgl3TbCNc5k~VXaHgl3TbCNc5k~VXaHgl3TbCNc5k~VWvo-RF$+036db5hA>-l8|! ztoTf^N%5)T6UE1hjf#&HA1XdjyifQ^@9F4W#XE|(6&n<9Dc)4Pp;)h2r+8iQn&MT( zT800L>Se`CiZzNC6{{65D6$l*6e|@g6wfP`E1pvWXTLs){O#%8E*gii!$~OB5F?$}28Xlq3A)3w2ahQASZ(ae<ZS^P;pvuO7W}W7sbztpAVv1t2Vv-_Nk)lXeBqQ)al7KSl27ohI_jqAs_3G)MbTN&NzqXetB6rVD>^9JE86Kk zC3(?5>2*S~HgmEzbFwybvNm(F+swg}u~u{PkGd|}%*oo!$=b}x+RVwv^~T!F$=b}x z+RVw?%*oo!$=b}xY-TfmTFuFa^iMpfIH1_C*r)hP@ugy~Vvl0CVwYm4Vh7W$e2a5LMGSELAK~ELLPHGV~3#RSTRBBrIpsF4 zMv9hlik5PUmU4=ga*CF6ik5PUmU4=ga*CF6ik5OpG#|oG(N<2;R!(WB58qbNM$uYv zv!a!vrJ{wRxuTh(siKL(Z>+jWaiih}MI*)ait7~DDjF&pDC#S&QCzLKN^zy;FXajy zU9PC7sH>=>sI91_xJ*$~QA2U5qPn7*qN?UErHYO!D=H}}Dk>;0QCzGjueeB2PH~~4 ztfGvfwB|460v(l7L@7K)SP>$U&nx~?{HZvnIIH+W@w?(T6ZRWw$;CPtd zDW_;Dr})~+DcZ^@W-Hsjx+X9zI%uzgDGJj9$Xtv@> z#Vo}WipLd?DIQfkqIg*GkYc7{hGKfj{FVGUrs?;lDyAqVD<&yY6)B2jMUo;>F;Ou= zF}`H}#_4FRVvJ(6Vw7T}VuWJ2Vwhs6Vu)g};z7j&ChYvB+^?fSih+vz6ay6f75x-_ z6@3)F6}=SqD(+F-9YjO(#jupSbktLEr($ie2ObRV4J|6ys9Uxl^_%&n`M)wz;iz7r zQ+seX?!uk81GnQBxD7wYtyqBhn1{LO=MdSr1vleoxCuYSPw->hh#%pH_yN9;@8P>n z|I|Aiyp0?1EqoK-!1cHeU&q(*Ra}d&;LG?DuCe-|Q!jF`8ehOHT!kxf1wN0<@i|PvLBQ5@#9x;6e8U2an@p_$WSt z5932P6KCLb^l=(a#VI%$CzXk6X&?2e9Hd|}CSf8@#JyQBZ!Wd4(b|8`f4!5cyPH(q z-K6U7CRKMgspjs+K98m9<|ftG-A$_QZc=r3ld8L$RNdXAoYxN0-A#(_Zc=o2lcKwu z6y4pV=9TC=M$QDGn+QDE2G%DZVOsvinj;dlh>WyA`_>I~6+=+ZA6Z zwkbYWY*iE}@=drWyF4A`DsmLriYx$QGnE$>%^`fjd%zw%k^G{j^y2VM=El#R#aZ-a@ zoL~r3b%&FxJDgNsw>YV~#Yr8Yx7ICAs%~*ob&Hd#Tbxwg;-u;pCsnsNsk+5UwYNCI zhu0lWs_t-7@6<9#y+a>0K@qQrDB=`76x|iKD{fQVs_3TZs_3G)Mav+yvyM6`Ix1on zF^XtK2Ss~DJ4IVX8%1ly&5Bl92B|G|)I!l*(M-`)(L~W$ag*Xk#SMx^it82EDXukP zmqBVn9W_wYS6rjGT5*-)O2rk5%N6w$brp3KwH3932$n(WWjd;9zI%uzh;=Ffcir*t%1 z@uXsw;t9p$ipLa>DjrchtawNam+C`KzrDMl(rD26MBDTXTCvx4~$?peWvdsZ-EpB4Pz!@H*i z6Ygoj#6Z3OeTo5!{)&DI_pD&vtB+24D|#vJRotVv+lFu6?JgblRNSe!Ly@3}S40%< zS;72sdg#PGE0`1atYE@DE0}Q43MSmM!bU&5#XT*Uqv!vB*aQEe|CG=C+x(@g@u%XP z;;iD2lKJ~xN53hG6-A0OibBO{#VN(FieD5zD}GY^sQ95|{=V1INyQ1pam9CvZx!Dt zjw!xY990}q99A4s95mtP?|_c>EA}bAQhce{tJtI1t=Og5so0^|uJ}T+EeJb*pX+F= zqCku8{}F_6`d3v6|ssKMYN)WqP?P>qOGEhqP3P| z_RTtKrD&;Wp=hpXrf8~YqG+tRNpYj%21O&q^;(YE*Xih5MMFgcMSaCJimMe@DXvsp zp}1U8Pf=G<$An#u*|l|4OL3W^rlN-8Qblz|HAPiL6-8x5B}GL=g&>0En0<+kE>@IR zT%;(cxKL46QASZ(ae<Pt>Pt>Pt>eUhG6ELS|ISf*I2SfW_0$W&w~(iLfnMK1hs_Cg&!t5~3zub8KJMln}0NAa}c zDaCBXlZsi2CkQ|LaUDITcvSI-;$g)@ikXTTis_1y-8xMtQx#JblNJ6XRjMLIk*r8k zBq}BVzA;t#RH1_6@wH5756CyDEgNy zlXtTAZ!TXpc$qLZ^h;<_#UG~ET-M;XIpI(I;?OTqzXvbFga0cX6^aV2k8wmhIyl-p z+Bw=f+BjM}Zg#YCv~;v^GA1pixuc%JJX5T%>wa0sQQJ|=ahap0qlV*BM|DRvM^#4^M`cGPM@2^k z$0d%71N_kX^6r-xIm$UMbd+_Jag=sk;3(yYa(Irg!+j>#owvVQ_m|^O$2rGYi@)v< z_sicMzd4E>MUFF$LdR*xDaWslUmQO>escWi_`&hLtnNi*j(!Wc6MHO@AI1D zRmWP#D~^{PFFDpYUUaN>yx_=kta7Y$tZ+Qf>@0V`e9p1VvDC4|vDlI6$Z(`P(j1E% z3mwlo7C7cR<~g2m%rykFGspe%X~$EJ*^Vb2vm8%29(O$Ec+~NT<6*}`j+u@bj_D5H zF)hH%&Q$lyDUQjGNsd%UiX+*Py0Jm`49ald1bW1!J(h zi*;0_IHM?3oK~Dt{Hpjx@w4J5#gB>~6yGaOD*O|wICDBf4RN90uhPwWBTOY`PRf;PWS12x5)Kk<| z)G^U4_!eMJZ5`E8T&Ae0sG*pUb_`IBie=V&qKXffx!=j)B$ zRlK8kTd_g$mf}st8;bRcb&A&&uPI(ttW~_C=dPTWb@Y;Ajp9YcYQ+nREX69tO2rDr z^NQt)=M>9IW@o96mM9i0G8Gw$bVZtCkz%3ZS;Ydye8oJ)GbZd;sB`A(XpZ7(#Z!ve ziYFDb6i+A~S3IV8RPl)7VZ}p11Ya1{0is_1y$Hz3COjS%#Ojb-%q$*Mr$%-UJ zqK)9*dE0;Drr`hbp5Xua|9mA^n>p8PW;=hmTFkjx%(+_3xeauEbG4aswV89ZnRB(7 zbG4aswV89ZnRDyugK0D82Aeq;|6DERTrK8YE#};sn!j9a=G;s5Zq*gl6jc>f6qOZ~ z6crT}6qhJ2R+Lvdkx!TOR z+RVAy%(>dkx!TORi6#H&iTcz`P>ffMQ;b!NQH)lMQjAoLPz+ZLQw&uMDOpN`b@ZU( z0mc1_L5hKj`xFBd{T2NbeHDEay%oJmmeRdCx<_%h;x0u`#hr>f6bXuWMMM#&=%MJY zxZQ+ZO1Zb`=vGBHMOQ@^#Vv}?icX4-idaRAB3jWw(LRV^Ddo1)QCmeDMQg>)idKr2 ziWZ9Iie`$YiYAK2ikobhrIb7CA9Yip&77;voU6^8tIeFN&76CrWd5|7a}VhPX*1_) zGv{hE=V~+OYBT3*Gv{hE=V~+OYBT3*Gv{hE=k6$(zmm=Tg+BZ?#pjBxiULKxB2SU4 z$Wde~wkS3$J}a5OO*;Bi@rmMN#YV+PiVqbZDBf4Rr+8QKj^b^_1`}@n-qO*ViZ>MN z73&nQD_&E)s#vRdMe(xYCB+)Wi$U1=TdkuP6j_Q@ij|5Lisu!}70)S_DV8dhC>AR+ zZ3Od|p`&y~nqrY+q2gJ^0>ymAJjFALxr#Z8rxj1RC?C$9t)uUkNTglM80f>L_X}YAG&L)Kt_^T&k$9sHUh&_<2=yR9R6;QBhGraf#w$MR~dBtCfKNaT`XBB@aepmdaDE3uFiZhBr#c9PU#jlEA6hA9| zQv9g+LGiufq~b)$mFfJ}`%_B&Q~vu`GfLXcdCT~B&C_nq({9ewZq9SN*}Rvp-JGZ0 zoTuHKr`?>V-JGZ0oTuHKr`?>V-JGZ0oTuHKr`?>V-JHj64(H9*qap7}{i$auo=`ll zcueuA;t|EeiiZ?46*Cmm6(t{Znr=_>rt0^mC?+c=DN+?FieyESB2h6>F+nk2F-|d7 zw*?CnY3Kpowu7@+8{=%?tb=%eVZ z=%u($YTCNO*TH2pZ&^okeLhzr=8^_}~9E)RcG>*cNI0A>`FdT|Qa4`B05)a`0I0y&g zeK-L7V?XSReXuw7!h7)^yxZw7x{HIJcqiV02^fzNjKdz-9dF0m@K)@GU9pSR4=uWd zgU;9qJ7O%xU^I5X_Sg>FVjFCYH)AVo8R(nObqfxfV>4`uO|UWEgg4?1*a)x3>+o7^ zhz+p5(GMPM*Klw(UWHfU6?i$;!@5`pYhx|E3~OQyycDb3A1Gn|0M$6CidC>OR>F!n zF{_dJdfV8Z|DY#S-QVQt{w7cNH+j0h$lCjC zVV_W6)6uJnwTf31FDqVBtWmtESgm+Lk)>FrSgBZHBY1iD*FWj&ZTY&p$=BUYzV2@F zb$64myPN#GG=KT__Qt%#&ez>dzV2@Fb$64myPJI7-Q?@;CSP|q`MSHw*WFFN?r!pR zcayKXoBXbtzkGLlV?O*Xe17sfD>^AUDq?gSrD&;W zp=hpXrf8~YqG+tRNpYj%21O&q^(O56XX%OOR0sMQvNwN1^L>{`P$6++RXXd%=y~P`P$6+ zzFp11BSV`xUz<5!n>k;bIbWMOUz<5!n>k;bIbWMOUz<5!n>k;bIbWMOe?`esdS0KJ z<%;JN%M?o$OB9P0nTiZWx*|=nNU>1yY{^nupriSUd5UKga}{$GPb;2M%vL<9n5B3^ z@wno#lBM*hjvi4wtawNVv1t2Vv-`&gj-4}I!aa~DH0VE6%!QW z72_0R6=M{m6{8d*6(fSMOKG@{hADQ4k-33_9?zne5u&0 z*b{`Ezuh|8rP!(1q1dkYLa|NpxnirLK#{M=Q{*agYy|U{t)nf9&5F+yn-rfaK2dzE z*r@nO@uA`a#rul)TvQF`zspfUwg2x|+w6ZO8sh5+U*cZegS&AT?!+Cq9lyYB_&ILH z0?bE0kI2Ow%*HLa89&2K_$hvZALB;+2tULR@O`Jh=sgbJ#dq*++< z98AJgOu=MK!mqNr|HHnKU7)+00^Qvd=^AU5`ICf zj$#ziiVlkQigt>&iZ+VYiklU!6fG4k6wMWWGgVVX6GdaiO^O>8Hz*n@u2)>AxK`0n z(LhmOagDFKT5*-)O2rk5%N6w$brp3KwH37#mnmv0YA7x(s~Vrxb4#hE+t!3jmHMCG z#QL94t7*}0ain#?_Sg>FVjFCYH)AVoi7l`>Hp8aqHz67$-yuokJ0xj*ha`>fkfiY) zk~F?UlE!yP()bQZ8s8yF3%)~QzCn`4H%QX>21y#x{s6{}!ns~<|M#6d-@fS2IKSROCJa(E$@#WGkLFThe5gN@OwOoC-69ahu`8i zcnrVBqk39B!oguYga`2e?suleES z6mw13*UbfUbo8|1DaCBXlZsi2Clrq>9#cH3ctr8A;vvP%AnYyP3>{5Zlsqh^>13*6 ziej>2k|I@+qDWRGDH0VEZ3MS?pZ}A-ZnahSI$L$GvsL#xTO0E4zE$@+TkGpWZ@osp zr+b~Py4TsNd!4Pi*V(FjovrosUb@%Ws(YQSy4TsNd!4Pi*V(Fjovk%Ae_JorKd8E* znxd+rilVZjlA@xbg5naz#ftKZixlNFe_JoqQCUS9MQOzaic*Rwg{KHBLPWuN#b1g) z73WO2`8%tlKNP3Fdfs-UqmcKzCM!1 z*GJO$`bZjIA4%iuBWZknB#p0+r1ABUG`>EP7JPjqxYy>(BWZkjB#keRr19kuKaH=C zr1ABUv`2Wyhw&kti8F9I`Zx`z;uM^WlQ0!itma-jnS&%u#ECco$KyC0i(_y!j>3^R z0*B);92ywhYY*XIFg}P6;QcrV2jYD=0Q+Mpq^Y|C~e-h`Amqls3EK1{LQ5r9c(s)^v#>=8KUKXYC zvM7z0MQOpyqTn;dtD-bs6{Yd2D2-P|ei|=}(s)^v_C4=-5>Mc9{0_gxZ}1p?jYsha z9>zm>&}ydX00;YVAAW^j;$GZ?yKxup#2vUDzrbzyIc^OMrm28~e9XgK%)xBjf}8O( z+=QRvC-^aL#Ec35Tlglvf$MP{zK*ZqtGKpIR0sPYd4+?Q z@g-b?FXC!vdilTmrb_xa-fAq4!O=JhN8$(^j>B*$4#C0rAU=Tp{lp+--KDec(ph)u zth;p9T{`P7opqPax=Ux>r3dTI%uqVpE}d+w3g78_y%tdG~=)y80k(y!v+O1uIu$9h;7>tJoHg_mJXtbvzeb*zR} zc}7aF!a-%MgcY#@UV`JZrf+dSlk;EQ+NJN|O?Tri+=)AIJAQ%N@N?XX1(=U{n2YW& zmoyhMn*%moI-4$?O_$E5OJ~!iv+2^=bm?rmbT(aju<3$N5{oXKMVHQ^OJ~vf>1?`m zHeLD#-tjGb6W_q~xDH>(*YH(bi?86z_!6$Mnn7aIrLX2UUcf9|g)4CdK99@sIb4QI zaS1NQOw0%j1}U9`G+cxW@mXAe^Kl+NgL82XK8;V|YG8SStww!zkTGq%E(*aDkl zGi-`Yurc~K5jP^6E`v>%!KTY#(`B&fGT3w(Y`P3KT?U&jBiM9ihB8=m87#UC7F`C5 z&d*@eWw7Zo>hO-Wu@+v2HL(U>iq)|iR>dk<87pB$s~^g!z`-SWF_y=RupC~9Ww8vF z#tX0%Mxlpc3{ou9>K$UGCIV;K|Fx_aUXu=%;=Cc``*cNI0A>`FdT|QaB!d*q>KkScmVImK{yca!vWYI`(a<~gT1jA-i!C(-Ns;$GVbD_ zC*Fy7U;@Tt1mmy=cE{WCHoO(PVOQ)@Cd#)Dl3O_FjGeF}#$pVv^vpNHyN6ye|G(vk zs54O~qYg#wjLM1nFlv3&>Zm1A^P(P$ni4fGYH(Das7O?&s8&(eN7aj}5>>`K>;3F~ z?d|dMyp7(Q-WspUGH-$Rgg4Eb;0^KmdI??^ug#)v%^P0fPYX{74>f-|;T_?w;dbFB z;riiP;fmo4%wJ6SbLd#;%h1-)r=hp)AHjW7-uzL_5A+Uut*3T3X?|k2$tn9xnxEPo z3^P{_iyws%mx!oowWrae1OY_6KgKlAt%@6K2nYziO z`QhC`-f7bO0B@5iM@^a^+a2UMljcWv2N_%%^K-jRCeJZxerR`)bxoQd+-)++T)dX% zhj$0r&ZPNS-6j+BOq!p}9rpaziM>sCu*VZmm~7+H{F7U@c3H+`E1MG*nr!a!8k5a} zym|abCY!p9GuhbYxC16{a5>UsBb#H-nr!HDmPx;X>zbzP+Z?mnI>AGvl^5N~^kqRe_oA;eT_bptW}_Z4S>0t-lU0IjI`SQpm4i2K;&m|BzGX%8 zGxNhWNDYPO_p+5%cK{4kj7qz z;L?U%w=WEZTAZh!Hhs>v@3n7eesR|QM!Qc;+b7V*Uc0`g?UQI@uWgZO`^0H_u4((E zY1;fNw>ahAw~cw&w6IT}jlDMgP21M#WGkLFThe5h4#~7-Y?9r?We>nMEmJ5 z{^iay{zUt!G3UPhw3zsV->{z=^K1KQF>-H{!M#m}{S=vV?rk#cr^)=825;{@+`9KXYF@f$pbU*l0cf`{=C9>fE<-)f#U z_i^wQeu;Z=5AMcYxD$8acKiaj;pey&3ot)0c-GA0AQy8m8@J$Q{0ukYr}znej2rPI z{189D_l@>h^F0pU#dq*++<KWcEI-74%=cIY>hW#D{P4^usJrvrh#ULGMjMF7;nNG@dj*!*W-0~EjGjk zSRb#!tMMwl(iqH8<`o=Vj`grE*1_6X3opZ(SOYJ`>R1h{Vil~+3}sg0pdwblOYmYW zk7NIKhIa8*J8=hY$1iXjevVtQ0P`^qb1?_A(ceOBMwVPAOD>Zom&uaLWXWZ+vaRok)%keo}hD&h?F2+pEz;sLt3}$E%2Mh68T!8a&9zKI}aSlF> zPvLBQ5@+EP__)!|&|@4tijUyK_z=#-88{t%oQ6|z3QopJn2ITyp=1t{FcBx>1RRgM z|7M1~Xm_2wXm_2wXm_2wXm_2wXm_2wXm_2wXm_2wXm_2wXm_2wXm_2w=-@gW3Cz z%t3j)2+QGxSQg7*X}kbSVHA28#*j1fJpL6J%+Q}4oWryD2mX$~VKElr87#!pcnW{T zU+`!A$!KTjM-G0#@9`v_z~lHGev9AWG5i{j;t@QIhwz|g=l}=%aUXt#U*cY?7d`)P zXUJVAFWOxvFWOxvFWOxvFWOxvFWOxvFWOxvFWOxvFWOxvFWOxvFFLqR!3?>}DkdA4% z2p8hB_Y9(dY3m{1eaNS!c|EthfK& zAZ_AJKgCb*W88=z;fMGEzK`$WyZ8>ijT_K^i+B@RcQLHH7}i}3>n?_M7sI-XVco^B z?qXPXF~PbEK1po57`9yu+b)J}=f|+_Vpw-ED|yEi_&hGh=WrP=#U;2HGcg0xF%1`4 z%^)r0;8|RN^Kl+NgL82XK8;V|Y~-#~Vz0%9*Z}L}HFz~%g;(MgcsbU?x>yJO+C(j6)5WssV%c=DY`R!BT`Zd} zmQ5GSri*3M#Ri+s%upz<{Y&qWXLM)4AurywPr7#LT3}eU{ za~}V~Kdokl&T()S|G?kzH!Q{?JcEUJ8c*S`_zV7wKjDvo!3_Pt!S{F)PvCL<4!^~3 z@ECrLNAU zja!_t*Z=Jd&E>7;;M4dN&c-Kk7CwQG<74USazHr%aV&_$;FQ49mn8k9EBrs1P;exI24EA zV0;iC!27Mf7dwc9fp{Md!2Z||`(hvLjlJ+*ya(^byRawT8E9rG_6`mbFdicqhdr=6 z-j287t=J8_Vi&vxJ7XtfFhj8&If%s=jK&Vw9@}ACY=f=wW^9Emu?05AX57%lHszoR zHpZLqM!W%^$;#eR{_p;SC@;2%H$8)ecp6XPulNi8j6dOz_yc~AC-DUO$BFNdO&80i zi)GWrvgu;kbg^u@STkWi4|6fcY6dBrgDtojKf_JoxEM1r z1JijjicRBS5iZ1MaRJW9;(z^Q)FX7l&W_Q}j?vDJ(aw(1&W_Q}j?vDJ(aw(1&W_Q} zj?vDJ(aw(1&W_QJj?uTXW5Ujk(aw(1&W_Q}j?vDJ(aw(1&W_Q}j?vDJ(aw(1&W_Q} zj?vDJ(aw(1j!ut|f5Og=Ik2;1w6kNhvtzWgW3;nlw6kNhvtzWgW3;nlw6kNhvtzWg zW3;nlw6kNhqtn9=ov^cG4(#k0?d%xs>=^Cr813vB?d%xs>=^Cr813vB?d%xs>=^Cr z813vB?d%xs==dh=>=^Cr813vB?d%xs>=^Cr813vB?d%xs>=^Cr813vB?d%xs>=^Cr z7=zh~G6tjL2VrN&XlKW0XUAw~$7pBAXlKW0XUAw~$7pBAXlKW0XUAw~$7pBAXlKW0 zX2<>k%;=c^49XnX*)iJLG1}QN+SxJM*)h)J9gF_;4D||~ZXdjru^qO>HrN_(##Y!8 zTVQi+hE1^vHb(cqJU1WkMh!YlC#yxi%ZuE#-Ltb?_& z7G8!mu?Aj>)v+2@#VS}CD`7>eA39xugG=yYERPpqIlK_dVi_!r7hoxjLJz|j3iNx0 zPMvoLr~bk}@f@DTKk#?_4U4e|&tM^*##8t!{$ljagYA@E#KxcajUVv`{2ou@2|SM9 z;kWn=9>cHkC?3JX_J+=U;6of7!~?h=_u*I0(;c!7Zz=mXH*~$ch#L$q;s(QuxWVuu zZZN!v8w@Yv2E&WE!SEt(Fucf3_Ct9QHy2*S&4m|nbKynYTzC;T7hc47gW*NoV0aNX z7+%B;h8J;z;YHkFco8=kUc?QC7jc8(MciO`5jPiJ#La~ladY8C++27OHy2*S&4uSj z++cVSHyB>T4TcwSgW*NoV0aNX7+%B;h8J;z;YHkFco8=kUc}9X7jbjpMciC?5jPiJ z#La~ladY8&5jPlK#0`cQaf9JS++cVSHyB>T4TcwSgW*NoV0aNX7+%BF&1O2UgYMiAO77SE#XZUVB*$4#C0rAU=Ti;~*S}_XV0kiVWbOKla1E*av%KFT5A;!MpJ;?1^{c9hiXe z#$b>l5f0+82X@EX@ix2_yJ1)Cg14ZX3oqj4!i%`M@FH$5yoi|#J4lge-k}4w$9C8j z+u+iy-~RS{M!mfFDEFrE9)>Z*KjJ+8g@58XJd1ze@5r``u#?!&L}OWcclaJSVA(k>2m;tt%7U*Id4AN&DY{F0R z6Z{xA;z#%)et_@ed-yKCgKy&oe9LGD=}iva!1cHeU&q(*Ra}d&;LG?DuE7^^HNJpZ z_T`be0;@P!i7W7VT#nB<<4gU`%Ofv-7;iNchu~m*5Ffz%aS#r~`)~mE$9~us{XRr* zWYfj7>EhXR@oc(yHeEcME}l&n&!&rK)5Qmy&dg9ei!Po;7tf-LXVLlbY`Sj%IUGNs{jGeF}#$pUcV+U-H?X12R-D-V?C^kb+EQEn4$Pu99)Jqu?Aj>)v+2@#VS}C zD`7>ffS2IKSe_Y*zlei!cp;X>GFTdi|LqKY&RcE80?fxe%*7nc#x1xRKf_JEV+1=Ts%uIo+TI0l8a}_#Rp3+`24Wr;@NTW?6`P#oFC7Ui)YEj zzsftV#aHlUdoxEM1r1Jf}L7vVyD78l@r zoEI3(&@&v�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

sDz4$4im0TiV9+R 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

i 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 delta 97585 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

    q%`zt3dFjWtc0KZ%Wja_TsPR9d#xG+=w&WLU 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

-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%0D^%=HMT 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 n2owMNi2t Date: Wed, 27 Mar 2024 01:09:29 +0300 Subject: [PATCH 36/44] Test read me image relative path --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5cccd1..55710d9 100755 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ If you're upgrading from version 1.x to version 2.x of `muslim-data-ios`, please To run the example project, clone the repo, and run `pod install` from the Example directory first. - + ## Requirements From fec3ae08dd7d8cfcd8fa18dd304a62827a3420f7 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Wed, 27 Mar 2024 01:11:33 +0300 Subject: [PATCH 37/44] Update image path in the read me file --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 55710d9..b74fbf0 100755 --- a/README.md +++ b/README.md @@ -18,7 +18,12 @@ If you're upgrading from version 1.x to version 2.x of `muslim-data-ios`, please To run the example project, clone the repo, and run `pod install` from the Example directory first. - + + + + + + ## Requirements From 3baa1646ed0cde7934389d3ed9577ce612c7f40f Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Wed, 27 Mar 2024 01:12:49 +0300 Subject: [PATCH 38/44] Align screenshots in the read me file --- README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/README.md b/README.md index b74fbf0..dd59662 100755 --- a/README.md +++ b/README.md @@ -18,12 +18,7 @@ If you're upgrading from version 1.x to version 2.x of `muslim-data-ios`, please To run the example project, clone the repo, and run `pod install` from the Example directory first. - - - - - - + ## Requirements From 25643b0d9a69c543588e6f36cab7b197fb0dabfd Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Wed, 27 Mar 2024 01:14:53 +0300 Subject: [PATCH 39/44] Update readme file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dd59662..aca49a1 100755 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ If you're upgrading from version 1.x to version 2.x of `muslim-data-ios`, please ## Example -To run the example project, clone the repo, and run `pod install` from the Example directory first. +To run the example project, clone the repo, and run. From 7121d5b3f6fdeb728ada7812882e5985735ab599 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sat, 30 Mar 2024 13:04:54 +0300 Subject: [PATCH 40/44] Add all deployment targets to the podspec --- MuslimData.podspec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MuslimData.podspec b/MuslimData.podspec index dcdbb07..d24b231 100755 --- a/MuslimData.podspec +++ b/MuslimData.podspec @@ -32,6 +32,10 @@ Pod::Spec.new do |s| # s.social_media_url = 'https://twitter.com/' s.ios.deployment_target = '13.0' + s.osx.deployment_target = '12.0' + s.tvos.deployment_target = '13.0' + s.visionos.deployment_target = '1.0' + s.watchos.deployment_target = '6.0' s.source_files = 'Sources/MuslimData/**/*' From 2c4ed2340331205b709622b05aa846d462b66afc Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sat, 30 Mar 2024 15:16:47 +0300 Subject: [PATCH 41/44] Remove unused variable in AzkarItemsScreen --- .../MuslimDataExample/Azkars/AzkarItems/AzkarItemsScreen.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/Example/MuslimDataExample/Azkars/AzkarItems/AzkarItemsScreen.swift b/Example/MuslimDataExample/Azkars/AzkarItems/AzkarItemsScreen.swift index 03890a1..bfa5600 100644 --- a/Example/MuslimDataExample/Azkars/AzkarItems/AzkarItemsScreen.swift +++ b/Example/MuslimDataExample/Azkars/AzkarItems/AzkarItemsScreen.swift @@ -9,11 +9,9 @@ import SwiftUI /// Display the detail of the selected azkar chapter. struct AzkarItemsScreen: View { - var chapterId: Int var itemsViewModel: ItemViewModel init(chapterId: Int) { - self.chapterId = chapterId itemsViewModel = ItemViewModel(chapterId: chapterId) } From 78700d6443c102fe56fe59bbcc20a78e6424196f Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sat, 30 Mar 2024 15:22:50 +0300 Subject: [PATCH 42/44] Fix a typo in the documentation of toDBDate --- Sources/MuslimData/Extensions/DateExtensions.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MuslimData/Extensions/DateExtensions.swift b/Sources/MuslimData/Extensions/DateExtensions.swift index 40188af..1d0252e 100755 --- a/Sources/MuslimData/Extensions/DateExtensions.swift +++ b/Sources/MuslimData/Extensions/DateExtensions.swift @@ -9,7 +9,7 @@ import Foundation extension Date { - /// Format date to "MM-dd" pattern which will be used to get prayers fro this date in the prayer database. + /// Format date to "MM-dd" pattern which will be used to get prayers for this date in the prayer database. /// /// - Returns: Formatted date by "MM-dd" pattern. func toDBDate() -> String { From 16ab2441256f2853afa3d83e1965bcfe86ca83e0 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sat, 30 Mar 2024 15:23:57 +0300 Subject: [PATCH 43/44] Fix a typo in the file name of SequenceExtensions --- Sources/MuslimData/Extensions/SequenceExtensions.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MuslimData/Extensions/SequenceExtensions.swift b/Sources/MuslimData/Extensions/SequenceExtensions.swift index 8946350..5070397 100644 --- a/Sources/MuslimData/Extensions/SequenceExtensions.swift +++ b/Sources/MuslimData/Extensions/SequenceExtensions.swift @@ -1,5 +1,5 @@ // -// File.swift +// SequenceExtensions.swift // // // Created by Kosrat Ahmed on 24/03/2024. From e8b544b2260373cfa8e3d8c0a3259c1e94d5d509 Mon Sep 17 00:00:00 2001 From: "Kosrat D. Ahmed" Date: Sun, 31 Mar 2024 00:11:16 +0300 Subject: [PATCH 44/44] Add country_id and prayer_dependent_id indices for the location table --- Sources/MuslimData/Resources/CHANGELOG.md | 2 ++ .../MuslimData/Resources/muslim_db_v2.0.0.db | Bin 28770304 -> 28770304 bytes 2 files changed, 2 insertions(+) diff --git a/Sources/MuslimData/Resources/CHANGELOG.md b/Sources/MuslimData/Resources/CHANGELOG.md index 8b7e7eb..bd77383 100644 --- a/Sources/MuslimData/Resources/CHANGELOG.md +++ b/Sources/MuslimData/Resources/CHANGELOG.md @@ -22,6 +22,8 @@ Refactor database tables to improve table normalization and handle city mapper i - Database indices have been refactored as shown blow: - `country` table has `code_index` for indexing `code` column. - `location` table has has two indices as listed below: + - `location_country_id_index` for indexing `country_id` column. + - `location_prayer_dependent_id_index` for indexing `prayer_dependent_id` column. - `location_lat_long_index` for indexing `latitude` and `longitude` columns. - `location_name_index` for indexing `name` column. - `prayer_time` table has `prayer_index` for indexing `location_id`, `date` columns. diff --git a/Sources/MuslimData/Resources/muslim_db_v2.0.0.db b/Sources/MuslimData/Resources/muslim_db_v2.0.0.db index c655d2692385437231096d83a326062f6a704daf..843d913eb61287d28ddb97568c2a3ffd70505f9c 100644 GIT binary patch delta 2742125 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�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 Pt{s)L)rji4Gx0*N32#Dh3j33d=vWmE-J29-cX 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 <>#wkn>Q@#= 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

Va0 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�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 diff --git a/screenshots/3-names.png b/screenshots/3-names.png old mode 100755 new mode 100644 index a5973b6f853366dfa4ac561d45e704afc76d40bc..3ead5984752e62d5d30d1ad577c31e99920d1be4 GIT binary patch literal 335990 zcmeFZWmr|)*ES9aNQj^)2q>VGv~&wfcPSyMNOw0IR78>P21%ts8a5#U(%q?acWm;V zYvcJp&vSm~e_ijV=gWIOhxW1*n>nWCUWw}5}7;2#Rg zl@wHzE8u@r=(iNKzpkRkr(F5#GxjNT<8cof0Sbx;inQ31XD+B~lUHL12gmBSqo;Db zu^u*|J$Q)b|K@>CHsyn#O%jrGV+3nwUb^DqPsGG;75Utvhc2Z&y!S+DOvYMPGuvx7 zh(~rL@pbr`Tv+RA_wHKw>o)qjR)sL%bsQawdsISN;y*eLnnaIx!Tu zezKUZ)p1%IxnJ$H9^rX%&^iTopX>SjT3VWKLHT}MAPU+qthug4E&p5e55zwu(KUS{ z<~f&<`l^zVE*Hyg_sf@98nJV`LwGXiQb)bj(Tl0+vQF0{oBI@y8n}sVF;b|jmaD;% zqm~y@YChantPT=E#*pcmw`jUduWJ0M>l%-qH52avgP6r z0zD2VIr(gVi=93Tii4EuCC*ZfLLeDWXr_F;Yd)e29v~mz5{6dv zZRCp9rn1?Zc|yWrR1!cTtVYDDI~V7sstlf{RPkBOuhtzaHD|rY?-23S7e_n}@8r@L z6FdhED9>j;LcU%KgI4ZHMk4Td;x0R}DfyZo=wiil5x*hFwGnA6cxj$iya*gAG(l=$ zHASz+XF~n3x}{NSmJx6lQRH#FECp#!Gp&*_)NdjmppLDH&Qr{X6ZQqq^4v0*UBj?1 zXF&mrz{2inq#&|AiyKFC;lYMKKHwXU7AIS@2FpQm6(jhfoR;aZG4Xt(_GC)TYMZA#<9l$U!*uHJ=tDp%kEG~q$m&$1mV_m+228dvTT z(i$K|YlDHs?aSDF09poi1~-AvUSi74JmnfGr_yzDK@<1$*B^kesjEbOefOPjxJnV~ zN3p@E`OQdvZ=vrovISmZ%8^@(S3j&kGxw3jX71-p*Y#5M`A(i`sl80(P4%{@c-;G| zhcR>AdiC4I50T3U#YY6_7+P!LUC0{L+xlF&di^J3L5)R6FXxXxH*NXXdmiqG(j~db zl#~-#eU^l1_gW zdWiD5$f9u{c7rtXS{L?`tJ6&Va3Z630#Zi^uqZ_e=~1qILVioQap$qe9Uod_lh)hd zVJW(l22Y{QFytH&e8>cSF)>pmf)vEo$GSH5!P~2KhF!yRwm5OYU_4^tGfTZxI|t)$ z#k%XLA^D=Br_zAtU-U)11=n4)_4ikvvpXyijMgCVgJpX>p#D{%!A`fUUC#%1AN`S$ z2~cAH_w0tytdbM+y6&W3BRfdyh(Cn4(3m_1Zzmu_6}nh))v)dnx%4pVO@Z<%;D!rB zisPM-)RfYOawQJ1fUZ!zc4|Mf8X-O z!5^u)Tf{xPMM=?@0>k2^2dXKpvjZ6~L6($8E{UMK_sO_(4=d0+CBbjMMMb(>+;ok2 zbv*9koB4oYQfC7>i3t^#-~thTxZ=|-eDMq{f5Gc!PcMy%2b!Di&@RX2Xi>9(f5k^5 zTMPBP1!FJY9z9O*oHhjkhFOm0=C!bqV(aemGujPFXY+(hI+w z*+MPg5lyDfL8gh4l90}ertZAz`la>cCFU|=R9*G9j|b|q9&>(zRw6zV^rS5AGWZPS3! zyn4E=;kk0_J(%Z5g(IAH$kjhlX+L*3&C{AGPu3|cRHW^(P4g9oN5&l?=(;1JD-|MS zpyL&iUHNJdxFUvNt8KO&r*=PB;})J#NZ`E>xd4v|x}w8qWZUp~2DpUpX!lYwEXUM$ z#B$tij}N$9o`gNSJPovq9<8I~sAmdwuUlV%ZU&xiw`?w0e@aiMrdqQ5aU?+75}YNq zG2t2@BCgA!p)IE67%B+cw=+$r;*LNte3e&Oq3tef{nTYkM?nG_w|W7G^}M zMopeL0`2AT7gTnq7;pK34ewqBMsqea&c;D{G#;zyI{MJdR3 z%Hj~S+;wnQqfM#@n{GPjh=hop;%}}XBFJ=Ovnb_iu*I?)#y!jT5Pwr1u}~>3^7h6j zB4*CI@UG+wIA1KBRpW-Vz}|^jhD>yOAkP%F<=6xR@SND(hsDCwIS+adE{ zR^Q5nx-4&3o$j>Rb#e_i@7wyPTk4MZ>4y^s*#(U8+Rb6PF2vH!&osP!IVe&sUyE4K zH=U|6)HunQ^1k(GT=ujoeW!Z!|0R!yA*v6rMi zylk9`#wKiT?Mf6-&B<)=>%fdZJsh4wluwOyRVa=1-?a>Vp>$WUR~h}AaX0%|9aSm! z*ttrE3|SfuOUP~)quIe!TcSYpwx>WfB2jC2Rj-Cl2=mx^p@U>r(VaW-k$cwqc=@!+ zX7bKrGAzkHVgK;u*)blCdcOAd6z9q!9a#VPZ?g`tuTebiSjyPb|3R_<9OcJnd!IgB zQ7B>&{{5azK-WnVVgL9UM|iaLw9OlN3a=v{*R@mO51xp3CtoOV(j^N{46e*~r}fctJN2$Z{SWx@vaRN=G3(U5js+J(Z=97*@Tx@mfKR#7Y8;Wa9YP zx_~0vji*3^MlYl*AODcg-l+ASb4hqaM1%&{N4qrYl-(j`-I|9o8Oqm?ric(t__S~& z;cCmrnpQ#|eKfF7M2}lro1=S>w(?BNVV8ZSTHUKIh{~Ba7bBhlHN)38+>Z{U%u)FnoQMv%|(;1^d0y8++Gpka`{_-t8aa=vfu@ zyWZ+c9CfXP|M&doJ&V52?v5)1{8{bUFrP8YQsCOByX}+O?GL&=&nRS5{>8e}&f4BV z*_f|Weaa)eh-kz=j3m}Q>gH>A3DrO|Xz`-gsh*102u$UI%>7l2$ERBcvn@_n@yilu zTb_z6qI>@GU7UZ5KgCfey6S9P&Eh7}N3Mr(qe|PDbZ@oq7GibXUHC+u^Wm_!wZ1f~ zqWj4emgm{egy@9N;B2lt)V;XX=0mwr>FMjurxlVN*nN&Ban{rJPX6JW1fv*VXtU#+9P?A(RBVvHM!iKJV+xTn2TcMAJ2sh_ziHjz` ze-wzdXe@T?iEPx>1sAPh_rCP`oE}I9<9NfTo;h9uyJ!i-kKJqUx4fh8GZmU!8uP@#b0+(``q|*a z@Xw-t6?OMZpbdVjLS%Ewb1qU{cNgq~!SCyf4TYu4tr9z{pPjrB?0v`+!S1o&D`1RI z@%a0lS~ZS{NsCdi5sntS?ot@(0?l$iI?4ju!_P*1;h3tx3;uFpR`vWEHs?*sw9de8 z)3#hq4pqN_W$rOopIaBuiRt1_W#)U;Ob_OZV|DlTAi^Nz*RB>dzei5 z$E3Bo3$M?vS>GHO&xn2$d)!m^-0j2*)G9ikQBQ*<9W2=<*PI{MJGAE!nbhY=hwssK zBX)_~pQ}IrHr5nn$d8`=qLd-Zby>%>_SmeLjpQYL`+lvj+1AnQnK<3YG8sj|?GnN5 zAF66O8c`@{W9!=PM3>&@1ape>VjQ<+W;NN9^;zAS{o$)W+ga;g9~k+U6eD)#d1&|Z zDd*eOLtZuclZ6{Dax7vGE|Ue33o*DKZm{|JT8-^h^C2A4=S^6%=#o7o$URG7>6-6q zrU60_An+uZ&7F4Hni6i1ba7W69D9s)Cx$jBKgKzn=b~PjdbDY^Zl2clE8V$uh+J#M z?qq$vv$fZA)ipp7_$}M6+S=-j>-nx{`@=EiRPtJ`>$ktTY%4b3BkYo`UP%}pYy7H^ zxGLt}nl4WYPvSH+8*BPn0K9=hk?16X;rz4Cr3WwgOKW|S(A$j9j;A|cy80ZnukDD; zo7Dn@B5%S$6&~W>Q(2Z@m0b*w1)<4<Rht7yEHUxeNjEa4(>%vbY`y{wQ7N|)nst}7 zoXzCFEgDz+^l+Fj#=)u;EKbt!U|2k<$4SX!3cL17vRhn+((iGg!kbErB0iZEas}3)7 z+lMQ&&}h!QwZ0iWPZ?Zf8fJWC8tzqpn^jkE{gsy9)j0Gb5uZ2ruf~-;<=0m7lYNl^ zTrUk~BTY0caExU1$wcQ3;zR|@N(mKild|Y|6U_F@Khv zk6q8|OA<1M;YKjIJ~3nC#}V`EqOl9k9B3w0EJ+;GwJc|iWO8+i@a+ng^@l+k0}Ier zZmhI7)*4c!JF=RtO`GS>@pYbb3?6)CAB&lQmZ1@?S7OpD@|+{ukN@K&fRFm;(_GCD zb?8)67&$-hHOpuf;IichB%Ks zK~s1Ev-DG?=i}q!THWmuI5~Mrcjd5iHlpgu8{ysqvue-Q>Bi~S@}!m{07Tz{wfua8Ws*J>Q0cdu1|GVbSXWO{RAjLL7Nekh%*7_R*ec z_A3pu*3_%1QD&tS>DBDje0W*Z_M}(RQsRw$7DENvPQCWtosx-wl}zW%eka~YhkSay zzL#%n)14D{U+q|z*ZI|j6YEU$8NHFW;#0BJR$R9_+wE>=GIu%KcVvpbs-=FYk}yW}+&=QguLNtMjw5l){6A64ykJ3k&tcdqK!3dxio zlRwHz_L8gSoiShE$)0V^>l;+pvn-7<#HK6+OA6ftLmqi9-NLrfJ(S)u$?~3Bld!%M z!KlvCZsCXkMvZ~Pr~~_C!`koqJ@!Sz7gY`)5nl=#rQOQ;nAO|y)r9lv!gyNyYMpDNE=*s!)~hb(5tR?T)jW6ttv|^cgI*EBoFoBJ))Rioe7VV z)wID!{5eVTWIX3aU0H>u{j|MPlKh!kbUQU*G4~;k7AcloKi;GXKoq-aPDv|Rn+kiK zQqw>CqLebJ8oin*&TTmsb3As4L^ls75071k%hwT@|MBtL z6H+})QcnJh(=el8nnaUo|u;iO0Q+~F% z;RN+eHKWKF|Edmp_A~6d)z#oU4KnP-d(sBy&S)g-?LgEGvFI~1*^w3L3(9y0M?9lVf-eWU(qQW_$ zw|Ql)!_n4_X;np`d?EL+Tf1m`oBRIAEsBq0LuN&lU^DYv9%`yOb-3O30}Uvco47>5(ca3S4uqF9PN)~?8e)1) zdFuTs-Vm3c9a!_Kp!(WBQKd@8pbETI#q7Mmx+`WyIT^d`& zbnp8R*9n{nCoKVbCCa+o7o}}$^0yuqeodp32tNN_VS~`ymJhjSa&uFOG)EP-G)-n* zLmMn~@a~4varFGNo1{m_$E((cKSLUteK)fE(xv;Aio5r?&+R1;<-14Q5ps*`&DT!H z*EfG{&Q0gvW{ip_ZgC{nS6Kr{X4CndidxK*gY{C2x0tLCr1>|MlLTF9Xy!GlCiBo_ z!HGnNhNGySVI*BB{`e5anJy9z>vf~avYkCjr3$Q%O~e#WA#2i#t-*RPfGq%2FpGajp^F6 zJ{G6FQrNw-w_vMfvMph^4XK1xp9!HoU*B8ikmxSg3-~II#f`!4zp(Sob2n9!!H_1x z`#FjfnMR6;&xdi%!j%15H6O6=QP@)TuYDm*Ocr!y?^Izcm;=VP$Dv(R)8_QZc6qWo zYiX-mDLlw9Sr9?Sv9wnJnas*f?5JoM0mF#X$1)bB>MP8{2b&|I z5hmC2E%AlowcVF~XZ=fF>D3H|kQ>g&uZ( zx?p=`%wD?}&Vtz{*`j1UUe?LmdqF?n7KvX%(oQJmO+kfiM`?-)&X*w)-n;Ik1iBL9 zB9h!7m^B{5xYzzABFlGaBJJ#WpNp1E&+J+}nORWbhZnzYy{`5qS5)zUu+-pL5#~ND z^c7kXCjUg*Pjc`8afHts`7we-N~KK;5Jg~pF(sa+SJx6CU?;~>hKOc6edMVaeow&Z zC+vLpO$}mU=9*5X9AYd6eOt$XJhSq?d~FPOBM9p#?`_UU>#@`7uhA+B?FZbVSD{`v zs!<^DDIw&fmHK7^b$iAYwQDm8hWi6u#CfY}~ay+WPgOUC@Jf)J`v_I5%p!tCwNA zIQ0h8L^aP@;u0qrJpTL7&}0w`%6qerZ7{X3Kz@&Zf|lQd#gdd`L6!<-Po^h_idX3)0Kwe5Qu*dBdhF%`Pei0>z@qH@gE2V#Ys8+*3Z$_I0W zi?E#nitbs}`irufZB0=#Uud8NA5j($r3OamzM+kMf&t%q!FfmomFR5aqW%hg`+9kK zG`k^7N1+s)m)~ja4vFBAd{LZNqk7QPeZ}@*!<|9#)szNKJtgtYEsx{9WeqiET0`?{ zPx=U53xIEOY>>M|S`(8SFx8{~Vtb78QOTn>b!Zm_VhoevUxzvX>e>=9P|@ z#5%Sk+^Ze}gC?g%@r7=h5iL03k#e%1`8gLVN|lg!=4?(mIC0WzKNi(;m?z8klHhSLSR zGb(l>u~jr28!vpRMx3h{oIk%hb6Aa)Aov=Hm{m5_@)}YGb6}Amc0{IWz@J$Q<{Tou=J9%g#V@&H`2_Kr=${igqv&5?y%O+L@7^%kSBlWrVXg!%|mc$L# zFvd@A87&OUk%=Y1!l&6?oWYr{JR#O~2?fZo9x0bum{Yk!fo#OX`>I)9#@dD}Ay$bj zJ>F3VxesWfP=qCJuDbM*Le`zG9x+MRU{HeLfb&uDF+v+`naQL!5HcJqbmG1|UY@+< zydV{}k#%DJI4+qMPv3;^MN$;m>f8l<`r?754_as`-_Uxi1>$^t=sI@o+-7<^3w%$- zbST%?Re7QuFSrPbrJWee9Fs;cJZ~$;b9vK3ke-XlA ztYC0+=Sj1Nf-e&fVlMnfRJ-PquFnH;|Eltx0c0GGG6krwH)rmLHzFGom7QPjkCj&I zY}D*p#qwBx*0vSDttB($!71FSzB^3+u%yOCYV=!j;{3wi@;B$_j5<|vg3nl29Jj0w z!THwj#<75D#tK;)e_J#w1u<&l7pf*(ALHpxTW#rVqG_~J^J#r2zWw0Z6SJCEO?H(F zaps<^qHfxic9ru^{0TWSk$V*EMJ&_mqrt-GKPz7Bgt(qOn=XFx7Beo~X;oXYS58f+ zzT^}D?917o3F%(Y;N2~?9PcuF-eX8=Vm4Ld+q=QqXPMQwyq7IjW?|f-mo@$YBmZVk zew$l)0|+)&WKTW2jD-|>Ck>PM-yHGd>b>zZo+sI3ua}O5C= z?^h44I~y664+lSsPM5#9-ERnJ5Hj%I?(JE+0Ll^J#zjt%OlS9l7d!Zmvi(@UhQo07 z##>-yNs@X1f$Zf`thl+~E>&u#u2r_`M?s{;f?sB{{aZXL2RL9!h9M7z=FJUxEXN+6 z9Shkhq)10o2)Zb_?JY6TDI^H-t=MJt0}zqv(^eh-%((u^!Jg=l6VGYwZ35*rjQ zHaGP7(C;obk7D3*QR zeD?RI=gv-h!H=^?jEQq&&M%#SPu8rRe{n6jdOm7MC12YWin(6U((c(?7L<)g4>U#( zd<3xHo`wH~!JI$ov1H;IV=m#l)jSDN`D8DCcE<VDd-|rEQ$h`D z@f03F0Nig?NMm-+n02atR1j(}dDTA6eP6g-^@)XHb)0&iO^G#K_~NubVNS@g@lg_b z)tmHi#PZdv^hM}xk&MwAc$a{23kGk2Rvjv*Qi=WIb^Dlb)}C~&mEGBv;P}-yox{rq zXL-+4>qRPfahis-F_c=2 zGEDw%XUU1Nie>4+U%D@fshN*krgX*7exajyLd`Azj~b$1>{#k#u$Z zanveH#SGeR`P-pi-NNA=x(>C+fH|RodCi6D*A)d)lRhUicTef*6Sw=?;pb&4bSkH~ zz~Mtqso4M`);Os=ceTt?E3l{^|3&^T^FV8p``*&4F55Y+g^Q!_xEI^7*bUd*cI)2M zjDcKN`6{>NH(;g8#2RHuK@|Oy}9*Ar7xxH;ir_!*SYE=#)6)ae+or*g&4U z>WcX^;RRu(b?l~XPYO?Wk9 zZ@xWxI)Uf;>KC6P!}hMk%yh|MU3RZiF?w|tHc1?l>JrZ}g^Tp-wIZK&Yt;Tr3~{7o z0MXZWe9qN=9CYs_0~{_V6YA*KG5KR1{jRTzZ9X%KjN`GUFE!IKE?r45EMgLlw{^3yB;@mo^otW~;#nw>Ge{cC%v^6^?%ruv@y5d&C5s_be^ht^xiD*3|= zosMd_W@InC+L1uU(z>=Xc96wL7i_gLu?0@}_)(lagXz*&(t^gBdD?;J!S?ZZHfmL4 z$qE(k^@@&;6w=q+0H^rMq+#i0j92&8J~|?n#b13(mx;_~fBAhlOc>@9!jLk)d{C84 zrc!D)sPgtzZKdAXY96sa?A$d23R~E93ng~qPL1_Tj(;VdnH5UO-0ycY^DLcmYtSA4 zyx!}S0Vl{Oo*H}tq9c!~ov~g^D=6?eOT2O(h=0-i)%$v~*<_Vr{g^2}1s=JM>-_W7 z@Pj<<%I`51)?sVo<=u7^LN}PTE5umpYKrHNOK=TzYKJ7pK@e5J{%M^}%X8Rn=dH@w zpz(fg#{JSHeaDgb>yi%XipZGxOA9Po*?JRXUu1x6j!rZ$m76;@4>D+D> zsBdC^+c5rAfZdkn&Egjwz_?#}{Z0dA!{<%abZk$Quk)Bm`UTJ!IIy#dY zt5Xn#u(VahuV(M@AG7{6vR)xz05Q+|H!ny-Y-I~O6co<_cR*}5^S~@y8{r?qe}6>t z>W;rQAl1w{t&xa`EZ%YZ{qY=i=zXn*JFe%^FR59z%wO^g#H%}^)}QyISmAp$H3wrk zLyS}!FS4J}1LvdYHD~A)II#tcH%{H?vw_>>*e)hIlQnKn$se&T{HmhvI|vq@Qha~? zUYL}8Dl-&Lqr-4J+#s|ouqZ%X#-9#wBVP9H6M2GKzDW_>qP2;YM{KtL%6cpUcts>a zZn>Oh1Jvu;6|lTCqP=QF&^-Z_)oh;QugYofT^o2DU%q+V%NOUclu#fU&aLYHgv+!q zVw#YJe_=Gq<@fTU&NIF26*M37f;>Yxv_!3iu0%px%Tmc6;MtNk_Ko=^N&>I6`n#!9 z#d4;bME4gRqu|e+Ip4j$3bjfEld}@*SqQmS!`{28^RF}S?+@#d31uoE3fcyCS#+ve zXBsxQ8bausj;0X+a$$Gf`EgY6kV_0{4;gxL)Hl5wkKb-A`9z)^ZgxK!NknPF6Ci;ZFQ)c+&I&D`$|57(R7x)2O=gu1(%W_I ze>D5wuKNj`w1)t0m9u=08MiWQZ8Fs$;CNs0w=VE~Y+)ZJv>HGZI_%=4j`*#UB`_7A zpZd=24^MM0*shqA^3NFpY-Y|Mb7X6`TbRrJ!#zQl12Hmv)%GS3lpn&{xpsU18r`y` ztDeU;AL93??(;)bqOK|9^1K)OGOmbub@8{x=|6~%&JN`l5_FC+K3uA_f)8kIdP$y5 zt1Y@WO(vKiPA!`k-D#QABcR`w)&7R4kHYh5@?Kl+`g zJqt$j9QRiuQR(sz)|FF4p1971*0S5p880M=)y{`L1`d(b>iW3iV(H4jvK8Qm#@v{{ zph{0k)NSgO-q&?oHgsJpqN8!%n5bQQ>IDd(bs&b(7NeCD$=0HJeb&Ei%08b7yu*=f0N67PAS z^u2w7umj3%yo{49^^Y<3ua4a~F>p9deJ5*Say_C<&-_?c25yWoO0YUPtvINEaBn^| zBDLrZ#evT1vn`5urd#owoP8~`6U(Z#D|ea`iuVC{%@TMb-EC>+^xaUjJM*1D`u1oF z;L*gg%?gZ`n9g3DbH`G2@Yl%tSuabA(OqX%N&i5F_rVbnYZ>A7HCDj6>?N=0`Kf)i ztD&6V*li|_`Xha21FwpeAHOWe%Wz$|m^mDKP~Iq<=Ng(hPYJm@k=Y9*a#npL4*%Ws zi3~;~Mz_{4ExzAQ)EbYr2|oK+;#!t~*>%zWX&lnifzPIK9>LpRQhcc8kH4s9EeRR}=ROQjc1h|iapHD6 zRtovxALQ-I0gc|7Lf8!A>ir1xp5n@YSTv996ek8g`XiB!ceE+QA(?WqM!JGHmiT3t z@z_3q)!UI?g-Jyv}t?3C=*s5jJ;sV;TnV(cr}2Wwho;9 z18%fD2)!dHd=B_&c?qxIgD$ve&D896g&TFga3S*NsGtd5nL@~Od zXf|R=i3d9O`l2zvD2edD%~)Bu@QefstS5Q@|4`4oy&;lmiPa<~lKX~AjJ1S#(LMf$ z%D8q5WL#v?x8L1X;#Rt6-slR11UHeuW=4r`!d8?90ceh*8pIc|%fm`XG zwGu+NiU2p76`*rZ(V%aX*D>}^a~F}sUGVn*K>?QY0U-W^nIG;@=<@>yDjw%DBK8kK zP!%EwhSBJOCQwjYfvYoNuV`GkR_t$r)P)~D-bumxHMxt%e}<(1axLs+qCAjriJZ?^ z>8jLl{$$T3$?^)S5XGwNUrmQYO%KpmBb!!DF&`$k+l1@0AlBdHQ6QcKhU zQP6c>svn}ZQ@%$7x*I_*~SiXZ`;{Mt$i6 zVnZ^3Em3h2>NkCb^ByYtD=MX04~*T@oW+-ay59>yZg_@m$o@XUfSf*j!L1O$>P5K$ z_0#7e7KFN-pKV?h|3~^Nr9O_s>X0b8+tQ888A_$x+G_L+bd7Tp`%LYRY*%C^7mxzK z5eY(?P4FSi`~2ws%qUB7MXseaFz}|Xq%cUL;3|6Q*@-aA z;pA}3H%v}wkTxnJ-38!8O*{I{*tz%)l7k8qMFp$|8eClDJR}hHxW<#iPNmTl6htBZ ztBZoj6?s6Th`9AosmI)S1-@ zE!aFXemPBdPFpHWEzMSBrUNCEg7orD5g&4@&d`jz5<<(TNFTn%#ESs*sxdtjBvly@ z@G5Lxx^6W{ioKQB{KoEbzX6}86OsbhMD}6Cc&dx!Ot|9XsPbuY>eb4K(IOdiSUisfDZwseO>6(k8L2twYk*PyI+&^wsgNVokIaXzxgJh_X7@bijJKmE zgC4cTAmypmbUUooBjvV8s0d6qL=HHgaOU7vzQF5ecYqwFEKtuHo&kM;xCgI~wqDxp z%(ecodXxwC?*Z6j+yE_9)$O3BThLe{1fv@HI?95(D;5^;sqT`PC8qXJ%xA*QTx+<@#~+E5xJUxsa1P>PhU};|>)(?Xjt_cJAfZwH zJ$b>fgl`q8PXr%u!F=1=-uVJ@IDon5MFXc~;I*O8T8A-dS5PMCj6$%JjjssE07<{h zo}ho89l^LFM|0W07BCY#(pyOMe1`uoE-#ngkmqF%$Gg=r5nt%mWC*0ou$`q%6WrrF(qIB?VYc(Awju+`*{ZH**TJ4c6T+(J1=ui|1KEy=kQMH| zZ|}M@w@-wY2g#B^$^^&-+tbAqNjk27kGE>r>S?DKA&6T&>J<90#HS5^()< z@=cl=D$buBwGH$v^_qe$a;QbOA&R@j#8EsTf@+poO+El&iD)SJ0>azki{4|^&cS#2 zBbeyvTV81?%Yb34V=W2F@|UahrY=fv|85GbySeag%CIdW6qmI|3V4h9=gUriHm#Zm zfUwCZ8RvvNb-!auLH!EomvJyUg}c!JYH45Y&zc|js%i)LpSzozbr(@}=f{k5f};ee z=o57RcR5iT=J&Y%Bo*-i8Fh_@aa_*fr856nOng4MN#<;Lmp4KJy|kCmCmT7Sv<4-w z1Hh8Hyc^nKk)K=?!KK3>KIVUT?k-qpb9b0Ykc$65pPPa%!3`8Hvl{-}tH4WJAilkX zZ1dk=1+3p8v=ME_^uPM=y}RsZJsTKWP;VI9e{_*@MhIM*5?CmKOwE6d3i;{Zq5WMX z|IXUqwd7xg{GaAP|W6N z2c_~E!2)!MpWl6V4IADditQH__-tmp*QV=O_qUI>3B!1-$!A%UK|n+i5Yd=G2$kak z$!agqrQ*Jw_3Xc)I^PMTe(LvsRm}=uol}3`u+^Ojg6ZiFAOt&dGFsZWF1o#iomeHGI*$WYjDwVb%^_|?=PaU%+9=> zK3P`38m*Ex?8>JsQv|Za6oT17&_vIW`n@>)jK4FOrVEG`r2*fYfIpi?8$7-E4KVV%mI*^qFs`uUO~UUSiL~l zuHO&nRpM9te`Uhm58s!{g16?VuuR^OjV9;KhGJKgGYqH;7CQpk$MfaJ-BvrpdN2g@ zJjDM4XWU=d7E`BwoYqrf8`T9@eQ0s3fFQ+gnH2w&0epM@#;I3oCq;iMP646SLjbF( z1z>hQw1#s%>QvGFQzj4W3--^G)TBJEqX70iG+d#qA9t$v$Fd~66Cr$jV(sq*B`5^RtU~Edy;IhSU~ZP zOS>_X0yQuJ$cLnj%T;ZFhs`up{HLUxxev%-{+TXKn5SMma4Uw>^bK40jHwn^rs9P{ ziQk_hI1m6v`50iW7`)e^1aClQ=B|H1bcy5IRQ9;5W4@3l}}&*gz@CMx9;a8p3M_VtwJ0mvgQLrcj&4EL44jfSRlbjexUW^>qS8& zg@NG9sz?yF!U|#(ICdrb`40St5_UVEDYc3&A4a`F=e9;2x2moeNW6}^Aa;Cy!dGnE zO-@%#3l&ni1gd-E=(l!ex;77!6_?G&Sm+v|B@nl;%MD$6q41u71M2R9kRkEC{OK!khuz zC@3!Xa;+f~*+X4|51b?EPcpNg7s$D!&bPxtLAL!T8G)9dGj@h~C9J=6(OX0xD1nb9 z)3D&#UbynfcMDBaB4pz~66?>;P99{df=X)CpnAoP_0`P82iPd{9kKltPb4o2<15|v z8KAu5mzyou{}Kxd+5w~*{X2ka-v{Q3&-2(J#=RIB{1i#WS=!2zQUT1L~kJTN^VufSb8ib?ak)n&!mZB?-1q$Ev`#uJRH6>@&0Bvpw%V;}_=9aieGi@nTX93oN5^+tG7N27C?pA* zmYGgJKD!uUyb#<71?ED!=v7mPLHY$_lmFRnU25ZdsRzgBQ^khgEXGQDdAm<{y?8y2 z3P;m8K~@x0Z)X<9SO-!GUVz{}H3-G|G6!KiAbFYvj|H)N)3R*wPihcN@BQFYAy!tc z1647f>_VJZ2C}HNR0)QBUZ)k*G?vjIgCx#bW}v$om*pW1v5rINwyWpo2qsOHVx#%7 zO-;5WBol+$A4Ki3g43_3t@ftnbR^e}9DNR_`>s9lZ5-qRh`Bo~Q!h_@^2mcENwOiO z@1WFAyiX;dpxhCreDO0QT6aNXmJ20qKY*GGR5#ncQueG~$C3BvTx<9o{BSCCFh@P! zCsc&Yd}gMZ%$j|CJX2naV~faSTq!Cm{VvBC*W}iPno-A*0()G@h`QHemrjP}w}mh& z$si^Fk8Rv;0k!9DsbG(kRm*!p4`PG3l@owzZLaWT;)}9@>F5p-2iEPKuItt=fFA@n zNkJV6e2u&k{ecw3THhIpq(UDwyJzMv1+RkADW7T&p7J}cL;y;pVx~f(89J61XBX>g zfc|W6NL;>fUt1J29Vo#O`W}xg9u?Uzn-vMZzz3yr)5T`5rW` zJG=!95MH;9YhQ1^v`TMr0!1>uPsnz3-)Eti=Ut5OSy^r>JSKgh_9s* zo3-hT<vQJR*9yY`p7BtV_KbWqe|-{c+8E!fAZH?BY%jt1D284_~rDr7LETR3uYgfJxjEK*D_G zYAp*W*`iqfI1K}_OB@2&rr}fYlXpTSg|*3&0e4sm;0M{GpXk$ybBD|eQUJAveSvJ% z^15u%So5->+0lG-S_j3DY}6^iUc2)b$KEM?z!jv^sdnP2{Zby>x<1SGkp0yU$({9b zRq-p=-D=iA0*W!uTij#Old|!#czDX%PoAV5jiOhT*GSk$3QuTFX1EjhSKXgpxdssh z5J~0sJL@bu8&M!n_r2;pt#Z$k_0JIH*Rr#Jxr39}>tx-sk!4}jSdZ7(ZVROGnjJXc z(ox~@gZw($7WcpiR=wt>(mUtq+inV8hm$>Z1(8%Nk$Ok8z46Yu`zJGR4-F62Vq-gK&YhBlVM)D> zzujj2@rwk0b=!DUv6For?l*%VBe>sRQKvQ;76Rz32kp zE##}lwHGBki3j9T?@EAwY1*F|=^E6Fl72n0gmKyZsh_scUQb=%l)~-#ymHL<6S8gj z{2|?%P@OfwlLrCD%vxpq#^z_Jux)CK|pSnjy;VKPkD=vuq!t1b!yNw1ahRB^)IBq5Rvz}pe!cQ7G7 zP|DRu05@368ZHj<0-BV>awUay~QOEWS}Qk)`|V>Av3p;OZFdnOWS8q=aK?CVL*x zr}>H8OY>{z&x#YTMMW|@=)RZO>0^Ak>q0I>INtdfW0v*wRm-3BWtt#`$p&Op zbD!YFZZdI4N-81ZWF<#5-3nxie=*<;$9%Igly^@Jzu0EwaIar625tw{ z>FTm7v&ez}CgsXDK5+P!;~c|$8}~lpJ=)wS7WcS`*V9GyRtKwl@8XcH7sIuu%BQ`^ zlndB%bmfM1wb~P&32S!)i}PbrJiun0fOUNL-u<)CJNynGMg_*d;u->{`bo*vqr>TL zc|Bg)OV8kgJ@8w&?@_KNf?^LQ@phlQxS>j$Al098L9Y#DQkis>r#q+m8}?P-S&o#s zcfKIjHxq{$;Sl6kB7NmanuKSPQ_*@s7L=50ZQ;F+FniCxS1cWl`BMJW(pY@&tiQrm z$o~AA!0w<(|4f7RXsqFgt7*tGNTng&9TmKLP+K(i1om*!MwD5z#zi?dTOU)X%5jw` zSa2sLf!Fqd(f*c7gB$q=YR&yuU{i?irD8d)Jlf0u3JB-H>7;A3boI{Y!T}dTgHt1b zy57C5`~8@_c7I4Me`7FCH<;#+7YFEDv&tLehxcb&_5t}dKtYXvGh#?c*GIU*s6`@QvJu#1yq`{D%teRF%>UwpXtJU-7$x)C$ym@OwfB@I~~+t+P5 z%WXT<%WP3xwCnq2?6f!I?+4Q0Pxdaj!vq`aK1|VExL%Sxy
w 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⁣$3$Fy&u%xcM{*f+67#Sa=dtcUNb~y(#m*2uI;XY1BuiNAtF)n=n2z_))!7+@_*F`Vk_w4V{ zdv;Ppfz;`KyjfVFX|^#jrTfP#wmEtuKI2%Ip7CE-HX&?`s~O4v7Tr*+%E$n6q-d|| znJB>a0q2Mq!pXaIN@74G~U(}J%yss>j!7cDscjE;h$5H>RxrZ_JCb!7{ZvBl)< z_`d*qMMX%8B8`$u{<^X%4_6!tRsN*~}vrp=_1^-M>*$2_C)7ndHVpF$`ZI?Tz-3xWsJ$I#3