From 4b1900a7dc1c4f5965bef62bd28f62a014601a05 Mon Sep 17 00:00:00 2001 From: Tim Taplin Date: Tue, 6 Oct 2026 07:22:46 -0600 Subject: [PATCH 1/9] Depend on Perfect-CRUD from 3.0.0 Replaces the branch: "main" pin with the released version, so a version-pinned consumer can resolve this package. Package.resolved is gitignored; swift package resolve picks Perfect-CRUD 3.0.0. Co-Authored-By: Claude Opus 5.5 --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index f52f24e..54724ef 100644 --- a/Package.swift +++ b/Package.swift @@ -8,7 +8,7 @@ let package = Package( .library(name: "PerfectSQLite", targets: ["PerfectSQLite"]), ], dependencies: [ - .package(url: "https://github.com/PerfectlySoft/Perfect-CRUD.git", branch: "main"), + .package(url: "https://github.com/PerfectlySoft/Perfect-CRUD.git", from: "3.0.0"), ], targets: [ // System SQLite for Linux, which has no SQLite3 module like Apple's SDK. From 1017c8e6154f25424cd0fda30775ef625f33fe34 Mon Sep 17 00:00:00 2001 From: Tim Taplin Date: Tue, 6 Oct 2026 07:25:04 -0600 Subject: [PATCH 2/9] README: 6.0.0 install snippets and a Migrating from 5.x section Pins the install and Perfect-CRUD snippets to from: "6.0.0" / "3.0.0", notes the SQLite 3.29 floor, and lists the changes since 5.0.0: toolchain and platforms, Linux on the system libsqlite3, double-quoted strings off, reconcile reaching sub-tables (non-atomic, .shallow opt-out), reconcile keeping FOREIGN KEYs, quoted identifiers, and the Dynamic API's affectedRows (0) and insertedID (nil). Dynamic select works on this connector (nextDynamicRow is implemented); checked from a scratch consumer. Co-Authored-By: Claude Opus 5.5 --- README.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c32d5be..9cfb1d9 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,9 @@ This project provides a Swift wrapper around the SQLite 3 C library, plus a [Perfect-CRUD](https://github.com/PerfectlySoft/Perfect-CRUD) database driver built on top of it. -**Modernized for Swift 6.** Requires **swift-tools-version 6.2** and builds under full **Swift 6 language mode** (strict concurrency checking on for both the library and test targets). Supports **macOS 12+** and **iOS 15+** (`platforms: [.macOS(.v12), .iOS(.v15)]`) and **Linux** (tested with Swift 6.2.4, 6.3.2 and 6.4 on Ubuntu 24.04). CI runs the tests on Linux (Swift 6.2 and 6.4), macOS (Xcode 26.0.1 and 26.6) and the iOS Simulator. tvOS/watchOS/visionOS aren't declared or tested. +**Modernized for Swift 6.** Requires **swift-tools-version 6.2** and builds under full **Swift 6 language mode** (strict concurrency checking on for both the library and test targets). Supports **macOS 12+** and **iOS 15+** (`platforms: [.macOS(.v12), .iOS(.v15)]`) and **Linux** (tested with Swift 6.2.4, 6.3.2 and 6.4 on Ubuntu 24.04). It needs SQLite 3.29 or newer for every feature below (the macOS 12+/iOS 15+ SDKs and Ubuntu 24.04 have newer). CI runs the tests on Linux (Swift 6.2 and 6.4), macOS (Xcode 26.0.1 and 26.6) and the iOS Simulator. tvOS/watchOS/visionOS aren't declared or tested. -The pre-Swift-6 version of this package is preserved on the [`legacy`](../../tree/legacy) branch. +The pre-Swift-6 version of this package (5.0.0) is preserved on the [`legacy`](../../tree/legacy) branch. See [Migrating from 5.x](#migrating-from-5x) when upgrading. ## What's in this package @@ -33,7 +33,7 @@ This package has a single dependency: ```swift dependencies: [ - .package(url: "https://github.com/PerfectlySoft/Perfect-CRUD.git", branch: "main"), + .package(url: "https://github.com/PerfectlySoft/Perfect-CRUD.git", from: "3.0.0"), ], ``` @@ -51,7 +51,7 @@ Add this project as a dependency in your `Package.swift`: ```swift dependencies: [ - .package(url: "https://github.com/PerfectlySoft/Perfect-SQLite.git", branch: "main"), + .package(url: "https://github.com/PerfectlySoft/Perfect-SQLite.git", from: "6.0.0"), ], ``` @@ -74,6 +74,18 @@ Now `"..."` is always an identifier and an unknown one throws `no such column`. This stops misspelled names from failing silently. It doesn't make Dynamic field names safe to take from untrusted callers: a caller who picks both the field and the value can still match every row with real columns (`rowid > 0`, `name contains ""`), so checking which fields a caller may use is still the application's job. +## Migrating from 5.x + +6.0.0 is the Swift 6 rewrite of the package; 5.0.0 (2020) is on the `legacy` branch. The raw `SQLite`/`SQLiteStmt` API keeps its names and signatures, but these changes can affect you: + +- **Toolchain and platforms.** Swift tools 6.2 or newer; macOS 12+ (was 10.15+), iOS 15+ (newly declared). It depends on Perfect-CRUD 3.0.0, which has its own [breaking changes](https://github.com/PerfectlySoft/Perfect-CRUD/releases/tag/3.0.0). +- **Linux uses the system SQLite.** The Perfect-sqlite3-support dependency is gone; install `libsqlite3-dev` (the `PerfectCSQLite` target finds it with `pkg-config`). +- **Double-quoted strings are identifiers** (see above). Raw SQL that writes string literals as `"..."`, and views or triggers already stored that way, now fail with `no such column`. Switch to single quotes or bindings, or pass `doubleQuotedStrings: true`. +- **`.reconcileTable` reaches sub-tables.** Creating or reconciling a table now also creates and reconciles its sub-tables on every run, not only on the first create. A sub-table whose type has fewer properties than the table has columns loses those columns, and a rebuild drops that table's own indexes. Pass `.shallow` to leave sub-tables alone. The tables aren't reconciled in one transaction, so a failing step leaves earlier tables changed. `.dropTable` drops children before parents. +- **Reconcile rebuilds keep foreign keys.** Removing columns rebuilds the table with its FOREIGN KEYs and without cascading deletes into the tables that reference it. It throws if the result would violate a foreign key, or if it runs inside a transaction on a table another table references (`PRAGMA foreign_keys` can't be turned off there). An added `@ForeignKey` column gets a `REFERENCES` constraint, and a column whose name only changed case is renamed (SQLite 3.25+) instead of being dropped and re-added. +- **Generated SQL quotes every identifier**, escaping embedded `"`. Table and column names that are keywords (such as `order`) now work. +- **Dynamic API:** `select` and `execute` return rows, but `DynamicResult.affectedRows` is always 0 and `insertedID` is always nil on this connector. Use `SQLite.changes()` and `lastInsertRowID()` on the raw connection, or `Insert.lastInsertId()`, if you need them. + ## Usage Example — raw SQLite API Let's assume you'd like to host a blog in Swift. First we need tables. Opening `./db/database` creates the SQLite file if it doesn't exist (the `db` directory must already exist), so we simply need to connect and add the tables. From e4ba0cbaf55844599cb7c1b8afa7e2f91b853062 Mon Sep 17 00:00:00 2001 From: Tim Taplin Date: Tue, 6 Oct 2026 07:36:16 -0600 Subject: [PATCH 3/9] Refuse SQL with more than one statement instead of dropping the rest sqlite3_prepare_v2 stops after the first statement, so execute(DynamicSQL(..., allowsMultipleStatements: true)) and Database.sql ran the first statement and silently ignored the others. An SQLExeDelegate runs exactly one statement with one set of bindings and one row cursor, and CRUD documents DynamicSQL as a single statement whose multi-statement guard is best-effort, so the connector now throws an SQLiteCRUDError when another statement follows (even one that can't be prepared yet) rather than running them in turn. Trailing whitespace, ';' and comments are still accepted. The raw SQLite.prepare/execute API is unchanged. Adds DynamicAPITests: Dynamic select and execute return rows, and two INSERTs in one execute throw with neither run. The refusal test fails with 5 issues without the fix. Co-Authored-By: Claude Opus 5.5 --- Sources/PerfectSQLite/SQLiteCRUD.swift | 40 ++++++++++- .../PerfectSQLiteTests/DynamicAPITests.swift | 71 +++++++++++++++++++ 2 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 Tests/PerfectSQLiteTests/DynamicAPITests.swift diff --git a/Sources/PerfectSQLite/SQLiteCRUD.swift b/Sources/PerfectSQLite/SQLiteCRUD.swift index 01e51f7..be48570 100644 --- a/Sources/PerfectSQLite/SQLiteCRUD.swift +++ b/Sources/PerfectSQLite/SQLiteCRUD.swift @@ -661,12 +661,50 @@ func sqliteDynamicValue(_ statement: SQLiteStmt, position: Int) -> DynamicValue return .string(statement.columnText(position: position)) } +extension SQLite { + // Prepares the first statement of `sql` and throws if another statement follows it. + // An SQLExeDelegate runs exactly one statement, and sqlite3_prepare_v2 stops after the + // first one, so `execute(DynamicSQL(..., allowsMultipleStatements: true))` used to run + // the first statement and silently drop the rest. Trailing whitespace, `;` and comments + // are fine: preparing them yields no statement. + func prepareSingle(statement sql: String) throws -> SQLiteStmt { + let utf8 = Array(sql.utf8CString) + return try utf8.withUnsafeBufferPointer { buf -> SQLiteStmt in + guard let base = buf.baseAddress else { + throw SQLiteCRUDError("Empty SQL statement.") + } + let length = Int32(buf.count - 1) // without the NUL + var first: OpaquePointer? = nil + var tail: UnsafePointer? = nil + try checkRes(sqlite3_prepare_v2(sqlite3, base, length, &first, &tail)) + let stmt = SQLiteStmt(db: sqlite3, stat: first) + // Look for a statement after the first. Preparing the rest is the only reliable way + // to skip comments; a later statement that fails to prepare (it might name a table + // the first one creates) is still a second statement. + while let rest = tail, rest < base + Int(length) { + var next: OpaquePointer? = nil + var nextTail: UnsafePointer? = nil + let remaining = Int32(base + Int(length) - rest) + let res = sqlite3_prepare_v2(sqlite3, rest, remaining, &next, &nextTail) + if res != SQLITE_OK || next != nil { + sqlite3_finalize(next) + stmt.finalize() + throw SQLiteCRUDError("SQLite runs one statement at a time, but the SQL has more than one statement: \(sql)") + } + guard let nt = nextTail, nt > rest else { break } + tail = nt + } + return stmt + } + } +} + public struct SQLiteDatabaseConfiguration: DatabaseConfigurationProtocol { public var sqlGenDelegate: SQLGenDelegate { return SQLiteGenDelegate(sqlite) } public func sqlExeDelegate(forSQL sql: String) throws -> SQLExeDelegate { - let prep = try sqlite.prepare(statement: sql) + let prep = try sqlite.prepareSingle(statement: sql) return SQLiteExeDelegate(sqlite, stat: prep) } public let name: String diff --git a/Tests/PerfectSQLiteTests/DynamicAPITests.swift b/Tests/PerfectSQLiteTests/DynamicAPITests.swift new file mode 100644 index 0000000..24195d8 --- /dev/null +++ b/Tests/PerfectSQLiteTests/DynamicAPITests.swift @@ -0,0 +1,71 @@ +import Testing +import Foundation +import PerfectCRUD +@testable import PerfectSQLite + +// Perfect-CRUD's Dynamic API (select / mutate / execute) on this connector. +@Suite(.serialized) struct DynamicAPITests { + + let dbName = "/tmp/crud_sqlite_dynamic_test.db" + struct Count: Codable { let c: Int } + + func makeDB() throws -> Database { + unlink(dbName) + let db = Database(configuration: try SQLiteDatabaseConfiguration(dbName)) + try db.sql(#"CREATE TABLE "dyn" ("id" INTEGER PRIMARY KEY, "name" TEXT, "n" INTEGER)"#) + try db.sql(#"INSERT INTO "dyn" ("id", "name", "n") VALUES (1, 'a', 10), (2, 'b', 20), (3, 'c', NULL)"#) + return db + } + + func count(_ db: Database) throws -> Int { + try db.sql(#"SELECT COUNT(*) AS c FROM "dyn""#, Count.self)[0].c + } + + @Test func dynamicSelectReturnsRows() throws { + let db = try makeDB() + let all = try db.select(DynamicQuery(table: "dyn", orderings: [.init(field: "id")])) + #expect(all.rows.count == 3) + #expect(all.rows[0]["id"] == .int(1)) + #expect(all.rows[0]["name"] == .string("a")) + #expect(all.rows[2]["n"] == .null) + let some = try db.select(DynamicQuery( + table: "dyn", fields: ["name"], + predicates: [.init(field: "n", comparison: .greaterThan, value: .int(15))])) + #expect(some.rows == [DynamicRow(["name": .string("b")])]) + } + + @Test func dynamicExecuteReturnsRows() throws { + let db = try makeDB() + let result = try db.execute(DynamicSQL( + sql: #"SELECT "id", "name" FROM "dyn" WHERE "id" >= ? ORDER BY "id""#, + bindings: [.int(2)])) + #expect(result.rows.map { $0["id"] } == [.int(2), .int(3)]) + #expect(result.rows.map { $0["name"] } == [.string("b"), .string("c")]) + // A single statement with a trailing `;` and comment is still one statement. + let one = try db.execute(DynamicSQL(sql: "SELECT 1 AS x; -- done\n ", allowsMultipleStatements: true)) + #expect(one.rows == [DynamicRow(["x": .int(1)])]) + } + + // sqlite3_prepare_v2 stops after the first statement, so with + // allowsMultipleStatements the second INSERT used to be dropped silently. + @Test func dynamicExecuteRefusesMultipleStatements() throws { + let db = try makeDB() + let sql = #"INSERT INTO "dyn" ("id") VALUES (10); INSERT INTO "dyn" ("id") VALUES (11)"# + let error = #expect(throws: SQLiteCRUDError.self) { + try db.execute(DynamicSQL(sql: sql, allowsMultipleStatements: true)) + } + #expect(error?.description.contains("more than one statement") == true) + #expect(try count(db) == 3) // neither statement ran + // A second statement that can't be prepared yet (its table doesn't exist) is + // still refused rather than ignored. + #expect(throws: SQLiteCRUDError.self) { + try db.execute(DynamicSQL( + sql: #"CREATE TABLE "later" ("id" INTEGER); INSERT INTO "later" VALUES (1)"#, + allowsMultipleStatements: true)) + } + #expect(throws: SQLiteCRUDError.self) { + try db.sql(#"DELETE FROM "dyn" WHERE "id" = 1; /* c */ DELETE FROM "dyn""#) + } + #expect(try count(db) == 3) + } +} From b2a8e08f3dae292bf195fc0f7f61cb4008d4adfb Mon Sep 17 00:00:00 2001 From: Tim Taplin Date: Tue, 6 Oct 2026 07:37:36 -0600 Subject: [PATCH 4/9] Throw instead of trapping on unsigned values above Int64.max Binding .uinteger or .uinteger64 (Dynamic .uint, or a typed comparison with a UInt) did Int(i), which traps above Int64.max. They now go through Int64(exactly:) and throw an SQLiteCRUDError when the value doesn't fit SQLite's signed 64-bit INTEGER. Typed UInt/UInt64 properties on insert/update never reach this path: CRUD 3.0.0's encoder converts them with Int(value) itself and still traps there above Int.max. That needs a Perfect-CRUD fix. Co-Authored-By: Claude Opus 5.5 --- Sources/PerfectSQLite/SQLiteCRUD.swift | 12 +++++-- .../PerfectSQLiteTests/DynamicAPITests.swift | 33 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/Sources/PerfectSQLite/SQLiteCRUD.swift b/Sources/PerfectSQLite/SQLiteCRUD.swift index be48570..b774f56 100644 --- a/Sources/PerfectSQLite/SQLiteCRUD.swift +++ b/Sources/PerfectSQLite/SQLiteCRUD.swift @@ -623,11 +623,11 @@ class SQLiteExeDelegate: SQLExeDelegate, @unchecked Sendable { case .integer(let i): try statement.bind(position: position, i) case .uinteger(let i): - try statement.bind(position: position, Int(i)) + try statement.bind(position: position, try sqliteInteger(i)) case .integer64(let i): try statement.bind(position: position, Int(i)) case .uinteger64(let i): - try statement.bind(position: position, Int(i)) + try statement.bind(position: position, try sqliteInteger(i)) case .integer32(let i): try statement.bind(position: position, Int(i)) case .uinteger32(let i): @@ -648,6 +648,14 @@ class SQLiteExeDelegate: SQLExeDelegate, @unchecked Sendable { } } +// SQLite integers are signed 64-bit. `Int(i)` trapped on an unsigned value above Int64.max. +func sqliteInteger(_ value: U) throws -> Int64 { + guard let i = Int64(exactly: value) else { + throw SQLiteCRUDError("Unsigned value \(value) doesn't fit in SQLite's 64-bit signed INTEGER.") + } + return i +} + func sqliteDynamicValue(_ statement: SQLiteStmt, position: Int) -> DynamicValue { if statement.isNull(position: position) { return .null diff --git a/Tests/PerfectSQLiteTests/DynamicAPITests.swift b/Tests/PerfectSQLiteTests/DynamicAPITests.swift index 24195d8..4856fdb 100644 --- a/Tests/PerfectSQLiteTests/DynamicAPITests.swift +++ b/Tests/PerfectSQLiteTests/DynamicAPITests.swift @@ -68,4 +68,37 @@ import PerfectCRUD } #expect(try count(db) == 3) } + + // `.uint` binds as CRUD's `.uinteger64`; above Int64.max it used to trap in `Int(i)`. + @Test func unsignedValuesOutOfRangeThrow() throws { + let db = try makeDB() + let max = Int64.max + _ = try db.mutate(DynamicMutation(action: .insert, table: "dyn", + values: ["id": .int(4), "n": .uint(UInt64(max))])) + let row = try db.select(DynamicQuery( + table: "dyn", predicates: [.init(field: "id", comparison: .equal, value: .int(4))])) + #expect(row.rows.first?["n"] == .int(max)) + let error = #expect(throws: SQLiteCRUDError.self) { + try db.mutate(DynamicMutation(action: .insert, table: "dyn", + values: ["id": .int(5), "n": .uint(UInt64.max)])) + } + #expect(error?.description.contains("doesn't fit") == true) + #expect(throws: SQLiteCRUDError.self) { + try db.execute(DynamicSQL(sql: "SELECT ? AS x", bindings: [.uint(UInt64(max) + 1)])) + } + // A typed comparison with a UInt binds `.uinteger`, which trapped the same way. + struct Unsigned: Codable, TableNameProvider { + static let tableName = "dyn_unsigned" + let id: Int + let u: UInt + } + try db.sql(#"CREATE TABLE "dyn_unsigned" ("id" INTEGER PRIMARY KEY, "u" INTEGER)"#) + try db.sql(#"INSERT INTO "dyn_unsigned" VALUES (1, 5)"#) + #expect(try db.table(Unsigned.self).where(\Unsigned.u < UInt(6)).count() == 1) + #expect(throws: SQLiteCRUDError.self) { + try db.table(Unsigned.self).where(\Unsigned.u < UInt.max).count() + } + // Typed UInt/UInt64 properties don't reach this code: CRUD 3.0.0's encoder converts + // them to `.integer(Int(value))` itself (and traps there above Int.max). + } } From 85158f2e66a3fbb1101df7e22219ae7a1fc59008 Mon Sep 17 00:00:00 2001 From: Tim Taplin Date: Tue, 6 Oct 2026 07:38:29 -0600 Subject: [PATCH 5/9] Keep the first of duplicate result column names With two result columns of the same name (SELECT a.id, b.id, or 1 AS x, 2 AS x) the column map kept the last one, so Dynamic rows and the typed reader returned the second column's value. The first now wins, as in SQLite's own name lookup. Dynamic rows also fold names case-insensitively (first wins), matching DynamicRow's lowercased keys: SELECT 1 AS a, 2 AS A used to crash in CRUD 3.0.0's DynamicRow.init with duplicate keys. Tests cover execute with a join, exact and case-only duplicates, a Dynamic select with duplicate fields, and the typed reader. Without the fix they record 2 issues and then trap on the case-only duplicate. Co-Authored-By: Claude Opus 5.5 --- Sources/PerfectSQLite/SQLiteCRUD.swift | 18 +++++++++++++-- .../PerfectSQLiteTests/DynamicAPITests.swift | 22 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/Sources/PerfectSQLite/SQLiteCRUD.swift b/Sources/PerfectSQLite/SQLiteCRUD.swift index b774f56..e01a594 100644 --- a/Sources/PerfectSQLite/SQLiteCRUD.swift +++ b/Sources/PerfectSQLite/SQLiteCRUD.swift @@ -557,16 +557,30 @@ class SQLiteExeDelegate: SQLExeDelegate, @unchecked Sendable { let database: SQLite let statement: SQLiteStmt let columnMap: SQLiteColumnMap + // The columns a Dynamic row gets, in result order. + let dynamicColumns: [(name: String, position: Int)] init(_ db: SQLite, stat: SQLiteStmt) { database = db statement = stat + // When result columns share a name (`SELECT a.id, b.id`), the first one wins, as + // SQLite's own name lookup does. Dynamic rows are keyed case-insensitively + // (DynamicRow lowercases its keys, and CRUD 3.0.0 traps on keys that differ only in + // case), so there `id` and `ID` count as the same name too. var m = SQLiteColumnMap() + var dynamic: [(name: String, position: Int)] = [] + var dynamicSeen = Set() let count = statement.columnCount() for i in 0.. DynamicRow? { var values: [String: DynamicValue] = [:] - for (name, position) in columnMap { + for (name, position) in dynamicColumns { values[name] = sqliteDynamicValue(statement, position: position) } return DynamicRow(values) diff --git a/Tests/PerfectSQLiteTests/DynamicAPITests.swift b/Tests/PerfectSQLiteTests/DynamicAPITests.swift index 4856fdb..8d83737 100644 --- a/Tests/PerfectSQLiteTests/DynamicAPITests.swift +++ b/Tests/PerfectSQLiteTests/DynamicAPITests.swift @@ -101,4 +101,26 @@ import PerfectCRUD // Typed UInt/UInt64 properties don't reach this code: CRUD 3.0.0's encoder converts // them to `.integer(Int(value))` itself (and traps there above Int.max). } + + // Duplicate result column names used to keep the LAST column's value, and names that + // differ only in case reached CRUD 3.0.0's DynamicRow.init, which traps on them. + @Test func duplicateColumnNamesKeepTheFirst() throws { + let db = try makeDB() + try db.sql(#"CREATE TABLE "dyn_other" ("id" INTEGER PRIMARY KEY, "dynId" INTEGER)"#) + try db.sql(#"INSERT INTO "dyn_other" VALUES (100, 2)"#) + let joined = #"SELECT a."id", b."id" FROM "dyn" a JOIN "dyn_other" b ON b."dynId" = a."id""# + #expect(try db.execute(DynamicSQL(sql: joined)).rows == [DynamicRow(["id": .int(2)])]) + #expect(try db.execute(DynamicSQL(sql: "SELECT 1 AS x, 2 AS x")).rows + == [DynamicRow(["x": .int(1)])]) + #expect(try db.execute(DynamicSQL(sql: "SELECT 1 AS a, 2 AS A, 3 AS b")).rows + == [DynamicRow(["a": .int(1), "b": .int(3)])]) + // Dynamic select goes through the same reader. + let select = try db.select(DynamicQuery( + table: "dyn", fields: ["id", "ID", "name"], + predicates: [.init(field: "id", comparison: .equal, value: .int(1))])) + #expect(select.rows == [DynamicRow(["id": .int(1), "name": .string("a")])]) + // The typed reader also takes the first of two same-named columns. + struct X: Codable { let x: Int } + #expect(try db.sql("SELECT 1 AS x, 2 AS x", X.self).map(\.x) == [1]) + } } From b2e39e50f06f0528512a14d7fb35fee0f3d68242 Mon Sep 17 00:00:00 2001 From: Tim Taplin Date: Tue, 6 Oct 2026 07:40:00 -0600 Subject: [PATCH 6/9] README: correct the DQS, reconcile and Dynamic API notes; drop stale docs/ - DQS: a "..." string in a CHECK clause or partial-index WHERE makes every reconcile that removes columns fail (ALTER TABLE ... RENAME re-parses the schema); reconcile such databases with doubleQuotedStrings: true. Reproduced for both on macOS; DEFAULT values were unaffected. - Reconcile: the FK check also counts violations that already existed; the in-transaction refusal applies with foreign_keys on and includes self-referencing tables; a rebuild drops triggers as well as indexes. - Dynamic API: new through Perfect-CRUD 3 (5.0.0 had none), so drop the before/after comparison. lastInsertRowID()/Insert.lastInsertId() return the rowid, which isn't the key on CRUD's INT PRIMARY KEY tables. - Migrating: one statement per call, unsigned overflow throws, first duplicate column wins, columnText repairs invalid UTF-8 (5.0.0 gave ""). - Linux: libsqlite3-dev and pkg-config, as CI installs. - Delete docs/ (pre-5.0.0 jazzy output for the Swift 3 API, not served by GitHub Pages) and its .jazzy.yaml (Swift 3 toolchain); nothing else referenced them. Co-Authored-By: Claude Opus 5.5 --- .jazzy.yaml | 8 - README.md | 24 +- docs/Classes.html | 128 -- docs/Classes/SQLite.html | 760 -------- docs/Classes/SQLiteStmt.html | 1726 ----------------- docs/Enums.html | 100 - docs/Enums/SQLiteError.html | 106 - docs/css/highlight.css | 200 -- docs/css/jazzy.css | 332 ---- docs/docsets/.docset/Contents/Info.plist | 20 - .../Contents/Resources/Documents/Classes.html | 128 -- .../Resources/Documents/Classes/SQLite.html | 760 -------- .../Documents/Classes/SQLiteStmt.html | 1726 ----------------- .../Contents/Resources/Documents/Enums.html | 100 - .../Documents/Enums/SQLiteError.html | 106 - .../Resources/Documents/css/highlight.css | 200 -- .../Resources/Documents/css/jazzy.css | 332 ---- .../Resources/Documents/img/carat.png | Bin 274 -> 0 bytes .../Contents/Resources/Documents/img/dash.png | Bin 1338 -> 0 bytes .../Contents/Resources/Documents/img/gh.png | Bin 1571 -> 0 bytes .../Contents/Resources/Documents/index.html | 66 - .../Contents/Resources/Documents/js/jazzy.js | 40 - .../Resources/Documents/js/jquery.min.js | 4 - .../Resources/Documents/undocumented.json | 1 - .../.docset/Contents/Resources/docSet.dsidx | Bin 28672 -> 0 bytes docs/docsets/.tgz | Bin 50298 -> 0 bytes docs/img/carat.png | Bin 274 -> 0 bytes docs/img/dash.png | Bin 1338 -> 0 bytes docs/img/gh.png | Bin 1571 -> 0 bytes docs/index.html | 66 - docs/js/jazzy.js | 40 - docs/js/jquery.min.js | 4 - docs/undocumented.json | 1 - 33 files changed, 14 insertions(+), 6964 deletions(-) delete mode 100644 .jazzy.yaml delete mode 100644 docs/Classes.html delete mode 100644 docs/Classes/SQLite.html delete mode 100644 docs/Classes/SQLiteStmt.html delete mode 100644 docs/Enums.html delete mode 100644 docs/Enums/SQLiteError.html delete mode 100644 docs/css/highlight.css delete mode 100644 docs/css/jazzy.css delete mode 100644 docs/docsets/.docset/Contents/Info.plist delete mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Classes.html delete mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Classes/SQLite.html delete mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Classes/SQLiteStmt.html delete mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Enums.html delete mode 100644 docs/docsets/.docset/Contents/Resources/Documents/Enums/SQLiteError.html delete mode 100644 docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css delete mode 100644 docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css delete mode 100755 docs/docsets/.docset/Contents/Resources/Documents/img/carat.png delete mode 100755 docs/docsets/.docset/Contents/Resources/Documents/img/dash.png delete mode 100755 docs/docsets/.docset/Contents/Resources/Documents/img/gh.png delete mode 100644 docs/docsets/.docset/Contents/Resources/Documents/index.html delete mode 100755 docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js delete mode 100755 docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js delete mode 100644 docs/docsets/.docset/Contents/Resources/Documents/undocumented.json delete mode 100644 docs/docsets/.docset/Contents/Resources/docSet.dsidx delete mode 100644 docs/docsets/.tgz delete mode 100755 docs/img/carat.png delete mode 100755 docs/img/dash.png delete mode 100755 docs/img/gh.png delete mode 100644 docs/index.html delete mode 100755 docs/js/jazzy.js delete mode 100755 docs/js/jquery.min.js delete mode 100644 docs/undocumented.json diff --git a/.jazzy.yaml b/.jazzy.yaml deleted file mode 100644 index c7f6323..0000000 --- a/.jazzy.yaml +++ /dev/null @@ -1,8 +0,0 @@ -module: PerfectSQLite -author: PerfectlySoft -author_url: https://perfect.org -github_url: https://github.com/PerfectlySoft/Perfect-SQLite -copyright: '© 2016 PerfectlySoft Inc. and the Perfect project authors' -theme: fullwidth -xcodebuild_arguments: [-target, SQLite, -toolchain, org.swift.3020160620a] -clean: true diff --git a/README.md b/README.md index 9cfb1d9..bb19697 100644 --- a/README.md +++ b/README.md @@ -58,19 +58,19 @@ dependencies: [ and add `"PerfectSQLite"` to your target's `dependencies` array. You need the Swift 6.2 toolchain (or newer). - **macOS / iOS:** SQLite ships with the macOS 12+ and iOS 15+ SDKs; nothing else to install. If the build fails on `PerfectCSQLite` (`no such module 'PerfectCSQLite'` or `unable to resolve module dependency: 'PerfectCSQLite'`), the SDK's `SQLite3` module wasn't found: check the selected toolchain and SDK (`xcode-select -p`, `xcrun --show-sdk-path`). -- **Linux:** install the SQLite development package (`sqlite-devel` on Fedora/RHEL), e.g. on Debian/Ubuntu: +- **Linux:** install the SQLite development package (`sqlite-devel` on Fedora/RHEL) and `pkg-config`, which SwiftPM uses to find it (the official `swift` Docker images already have `pkg-config`), e.g. on Debian/Ubuntu: ```bash - apt-get install libsqlite3-dev + apt-get install libsqlite3-dev pkg-config ``` Without it the build fails with `'sqlite3.h' file not found`, and SwiftPM suggests the package to install. ## Double-quoted strings are identifiers -Every connection opened by `SQLite(...)` or `SQLiteDatabaseConfiguration(...)` turns off SQLite's [double-quoted string literal](https://www.sqlite.org/quirks.html#dblquote) fallback, which the macOS SDK and Ubuntu's `libsqlite3` both leave on. With the fallback on, a double-quoted name that matches no column silently becomes a string: `DELETE FROM t WHERE "nmae" = 'nmae'` deletes every row instead of failing. Perfect-CRUD's Dynamic API double-quotes caller-supplied field names, so a misspelled field name in a Dynamic delete or update hit every row (or silently none). +Every connection opened by `SQLite(...)` or `SQLiteDatabaseConfiguration(...)` turns off SQLite's [double-quoted string literal](https://www.sqlite.org/quirks.html#dblquote) fallback, which the macOS SDK and Ubuntu's `libsqlite3` both leave on. With the fallback on, a double-quoted name that matches no column silently becomes a string: `DELETE FROM t WHERE "nmae" = 'nmae'` deletes every row instead of failing. Perfect-CRUD's Dynamic API double-quotes caller-supplied field names, so with the fallback on, a misspelled field name in a Dynamic delete or update would hit every row (or silently none). -Now `"..."` is always an identifier and an unknown one throws `no such column`. Write string literals with single quotes (`WHERE name = 'bob'`), or better, bind them. This also affects views and triggers already stored in a database: one written with `"..."` strings now fails with `no such column` when it's used (an `INSERT` that fires such a trigger fails too). Table `DEFAULT`/`CHECK` clauses and partial-index `WHERE`s are still read leniently. For legacy SQL or schemas like that, opt back in per connection with `SQLite(path, doubleQuotedStrings: true)` or `SQLiteDatabaseConfiguration(path, doubleQuotedStrings: true)`; the generic `init(url:name:…)` always turns it off. SQLite older than 3.29 has no switch, so there the fallback stays on. +Now `"..."` is always an identifier and an unknown one throws `no such column`. Write string literals with single quotes (`WHERE name = 'bob'`), or better, bind them. This also affects views and triggers already stored in a database: one written with `"..."` strings now fails with `no such column` when it's used (an `INSERT` that fires such a trigger fails too). Table `DEFAULT` values and `CHECK` clauses and partial-index `WHERE`s are still read leniently in normal use, but not when the schema is re-parsed: a `"..."` string in a `CHECK` clause or a partial-index `WHERE` anywhere in the database makes every `.reconcileTable` that removes columns fail (the rebuild's `ALTER TABLE … RENAME` re-checks the whole schema), so reconcile such databases with `doubleQuotedStrings: true`. For legacy SQL or schemas like these, opt back in per connection with `SQLite(path, doubleQuotedStrings: true)` or `SQLiteDatabaseConfiguration(path, doubleQuotedStrings: true)`; the generic `init(url:name:…)` always turns it off. SQLite older than 3.29 has no switch, so there the fallback stays on. This stops misspelled names from failing silently. It doesn't make Dynamic field names safe to take from untrusted callers: a caller who picks both the field and the value can still match every row with real columns (`rowid > 0`, `name contains ""`), so checking which fields a caller may use is still the application's job. @@ -79,12 +79,16 @@ This stops misspelled names from failing silently. It doesn't make Dynamic field 6.0.0 is the Swift 6 rewrite of the package; 5.0.0 (2020) is on the `legacy` branch. The raw `SQLite`/`SQLiteStmt` API keeps its names and signatures, but these changes can affect you: - **Toolchain and platforms.** Swift tools 6.2 or newer; macOS 12+ (was 10.15+), iOS 15+ (newly declared). It depends on Perfect-CRUD 3.0.0, which has its own [breaking changes](https://github.com/PerfectlySoft/Perfect-CRUD/releases/tag/3.0.0). -- **Linux uses the system SQLite.** The Perfect-sqlite3-support dependency is gone; install `libsqlite3-dev` (the `PerfectCSQLite` target finds it with `pkg-config`). -- **Double-quoted strings are identifiers** (see above). Raw SQL that writes string literals as `"..."`, and views or triggers already stored that way, now fail with `no such column`. Switch to single quotes or bindings, or pass `doubleQuotedStrings: true`. -- **`.reconcileTable` reaches sub-tables.** Creating or reconciling a table now also creates and reconciles its sub-tables on every run, not only on the first create. A sub-table whose type has fewer properties than the table has columns loses those columns, and a rebuild drops that table's own indexes. Pass `.shallow` to leave sub-tables alone. The tables aren't reconciled in one transaction, so a failing step leaves earlier tables changed. `.dropTable` drops children before parents. -- **Reconcile rebuilds keep foreign keys.** Removing columns rebuilds the table with its FOREIGN KEYs and without cascading deletes into the tables that reference it. It throws if the result would violate a foreign key, or if it runs inside a transaction on a table another table references (`PRAGMA foreign_keys` can't be turned off there). An added `@ForeignKey` column gets a `REFERENCES` constraint, and a column whose name only changed case is renamed (SQLite 3.25+) instead of being dropped and re-added. +- **Linux uses the system SQLite.** The Perfect-sqlite3-support dependency is gone; install `libsqlite3-dev` and `pkg-config` (the `PerfectCSQLite` target finds SQLite with `pkg-config`). +- **Double-quoted strings are identifiers** (see above). Raw SQL that writes string literals as `"..."`, and views or triggers already stored that way, now fail with `no such column`. So does a reconcile that removes columns when a `CHECK` clause or partial-index `WHERE` uses one. Switch to single quotes or bindings, or pass `doubleQuotedStrings: true`. +- **`.reconcileTable` reaches sub-tables.** Creating or reconciling a table now also creates and reconciles its sub-tables on every run, not only on the first create. A sub-table whose type has fewer properties than the table has columns loses those columns, and a rebuild drops that table's own indexes and triggers. Pass `.shallow` to leave sub-tables alone. The tables aren't reconciled in one transaction, so a failing step leaves earlier tables changed. `.dropTable` drops children before parents. +- **Reconcile rebuilds keep foreign keys.** Removing columns rebuilds the table with its FOREIGN KEYs and without cascading deletes into the tables that reference it (indexes and triggers on the table are still dropped). With `foreign_keys` on (the default), the rebuild throws and rolls back if `PRAGMA foreign_key_check` then finds any violation in the table or the tables referencing it, including violations that were there before; and inside a transaction it throws for a table that any table, itself included, references (`PRAGMA foreign_keys` can't be turned off there). An added `@ForeignKey` column gets a `REFERENCES` constraint, and a column whose name only changed case is renamed (SQLite 3.25+) instead of being dropped and re-added. - **Generated SQL quotes every identifier**, escaping embedded `"`. Table and column names that are keywords (such as `order`) now work. -- **Dynamic API:** `select` and `execute` return rows, but `DynamicResult.affectedRows` is always 0 and `insertedID` is always nil on this connector. Use `SQLite.changes()` and `lastInsertRowID()` on the raw connection, or `Insert.lastInsertId()`, if you need them. +- **One statement per call.** `Database.sql` and Dynamic `execute`, even with `allowsMultipleStatements: true`, throw `SQLiteCRUDError` when the SQL has more than one statement; they used to run the first and silently drop the rest. Run each statement separately. +- **Unsigned values above `Int64.max`** throw `SQLiteCRUDError` when bound instead of trapping. +- **Duplicate result column names:** the first column wins (`SELECT a.id, b.id` reads `a.id`); 5.0.0's reader took the last. +- **`columnText` repairs invalid UTF-8** with U+FFFD replacement characters; 5.0.0 returned `""` for the whole value. +- **The Dynamic API is new** (from Perfect-CRUD 3). `select`, `mutate` and `execute` work, and Dynamic rows fold column names case-insensitively, first wins. `DynamicResult.affectedRows` is always 0 and `insertedID` always nil on this connector. If you need them, read `changes()` or `lastInsertRowID()` on the connection (`SQLiteDatabaseConfiguration.sqlite`) right after the call. `lastInsertRowID()` (and `Insert.lastInsertId()`) return the rowid, which equals your primary key only for an `INTEGER PRIMARY KEY` column; tables CRUD creates declare an integer key as `INT PRIMARY KEY`, so there the rowid is a separate value. ## Usage Example — raw SQLite API @@ -192,4 +196,4 @@ See `Sources/PerfectSQLite/SQLiteCRUD.swift` and the [Perfect-CRUD](https://gith ## Further Information -See `docs/` in this repository for the older generated API docs (raw `SQLite`/`SQLiteStmt` only), or the [Perfect-CRUD](https://github.com/PerfectlySoft/Perfect-CRUD) package for the ORM layer this package integrates with. +See the doc comments in `Sources/PerfectSQLite`, or the [Perfect-CRUD](https://github.com/PerfectlySoft/Perfect-CRUD) package for the ORM layer this package integrates with. diff --git a/docs/Classes.html b/docs/Classes.html deleted file mode 100644 index 556c54f..0000000 --- a/docs/Classes.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - Classes Reference - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

Classes

-

The following classes are available globally.

- -
-
-
-
    -
  • -
    - - - - SQLite - -
    -
    -
    -
    -
    -
    -

    A SQLite database

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class SQLite
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - SQLiteStmt - -
    -
    -
    -
    -
    -
    -

    A compiled SQLite statement

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class SQLiteStmt
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/Classes/SQLite.html b/docs/Classes/SQLite.html deleted file mode 100644 index c012ff2..0000000 --- a/docs/Classes/SQLite.html +++ /dev/null @@ -1,760 +0,0 @@ - - - - SQLite Class Reference - - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

SQLite

-
-
-
public class SQLite
- -
-
-

A SQLite database

- -
-
-
-
    -
  • -
    - - - - init(_:readOnly:) - -
    -
    -
    -
    -
    -
    -

    Create or open a SQLite database given a file path.

    - -
    -

    Throws

    - SQLiteError - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(_ path: String, readOnly: Bool = false) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - path - - -
    -

    String path to SQLite database

    - -
    -
    - - readOnly - - -
    -

    Optional, Bool flag for read/write setting, defaults to false

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - close() - -
    -
    -
    -
    -
    -
    -

    Close the SQLite database.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func close()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - prepare(statement:) - -
    -
    -
    -
    -
    -
    -

    Compile the SQL statement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func prepare(statement stat: String) throws -> SQLiteStmt
    - -
    -
    -
    -

    Return Value

    -

    A SQLiteStmt object representing the compiled statement.

    - -
    -
    -
    -
  • -
  • -
    - - - - lastInsertRowID() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_last_insert_rowid.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func lastInsertRowID() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int last inserted row ID

    - -
    -
    -
    -
  • -
  • -
    - - - - totalChanges() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_total_changes.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func totalChanges() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int total changes

    - -
    -
    -
    -
  • -
  • -
    - - - - changes() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_changes.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func changes() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int number of changes

    - -
    -
    -
    -
  • -
  • -
    - - - - errCode() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_errcode.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func errCode() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int error code

    - -
    -
    -
    -
  • -
  • -
    - - - - errMsg() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_errmsg.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func errMsg() -> String
    - -
    -
    -
    -

    Return Value

    -

    String error message

    - -
    -
    -
    -
  • -
  • -
    - - - - execute(statement:) - -
    -
    -
    -
    -
    -
    -

    Execute the given statement. Assumes there will be no parameter binding or resulting row data.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func execute(statement statement: String) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Execute the given statement. Calls the provided callback one time for parameter binding. Assumes there will be no resulting row data.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func execute(statement statement: String, doBindings: (SQLiteStmt) throws -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    - - doBindings - - -
    -

    Block used for bindings

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Execute the given statement count times. Calls the provided callback on each execution for parameter binding. Assumes there will be no resulting row data.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func execute(statement statement: String, count: Int, doBindings: (SQLiteStmt, Int) throws -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    - - count - - -
    -

    Int number of times to execute

    - -
    -
    - - doBindings - - -
    -

    Block to be executed for binding on each call

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - doWithTransaction(_:) - -
    -
    -
    -
    -
    -
    -

    Executes a BEGIN, calls the provided closure and executes a ROLLBACK if an exception occurs or a COMMIT if no exception occurs.

    - -
    -

    Throws

    - ErrorType - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func doWithTransaction(closure: () throws -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - closure - - -
    -

    Block to be executed inside transaction

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Executes the statement and calls the closure for each resulting row.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func forEachRow(statement statement: String, handleRow: (SQLiteStmt, Int) -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    - - handleRow - - -
    -

    Block to be executed for each row

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Executes the statement, calling doBindings to handle parameter bindings and calling handleRow for each resulting row.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func forEachRow(statement statement: String, doBindings: (SQLiteStmt) throws -> (), handleRow: (SQLiteStmt, Int) -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    - - doBindings - - -
    -

    Block to perform bindings on statement

    - -
    -
    - - handleRow - - -
    -

    Block to execute for each row

    - -
    -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/Classes/SQLiteStmt.html b/docs/Classes/SQLiteStmt.html deleted file mode 100644 index ab3061e..0000000 --- a/docs/Classes/SQLiteStmt.html +++ /dev/null @@ -1,1726 +0,0 @@ - - - - SQLiteStmt Class Reference - - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

SQLiteStmt

-
-
-
public class SQLiteStmt
- -
-
-

A compiled SQLite statement

- -
-
-
-
    -
  • -
    - - - - close() - -
    -
    -
    -
    -
    -
    -

    Close or finalize the statement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func close()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - finalize() - -
    -
    -
    -
    -
    -
    -

    Close the statement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func finalize()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - step() - -
    -
    -
    -
    -
    -
    -

    Advance to the next row.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func step() -> Int32
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Double value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ d: Double) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - d - - -
    -

    Double to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int32 value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ i: Int32) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - i - - -
    -

    Int32 to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ i: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - i - - -
    -

    Int to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int64 value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ i: Int64) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - i - - -
    -

    Int64 to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the String value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ s: String) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - s - - -
    -

    String to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the [Int8] blob value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ b: [Int8]) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - b - - -
    -

    [Int8] blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the [UInt8] blob value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ b: [UInt8]) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - b - - -
    -

    [UInt8] blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Bind a blob of count zero values to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindZeroBlob(position position: Int, count: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - count - - -
    -

    Int number of zero values in blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bindNull(position:) - -
    -
    -
    -
    -
    -
    -

    Bind a null to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindNull(position position: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Double value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ d: Double) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - d - - -
    -

    Double to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int32 value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ i: Int32) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - i - - -
    -

    Int32 to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ i: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - i - - -
    -

    Int to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int64 value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ i: Int64) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - i - - -
    -

    Int64 to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the String value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ s: String) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - s - - -
    -

    String to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the [Int8] blob value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ b: [Int8]) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - b - - -
    -

    [Int8] blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Bind a blob of count zero values to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindZeroBlob(name: String, count: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - count - - -
    -

    Int number of zero values in blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bindNull(name:) - -
    -
    -
    -
    -
    -
    -

    Bind a null to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindNull(name name: String) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the index for the named parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindParameterIndex(name name: String) throws -> Int
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    -
    -
    -

    Return Value

    -

    Int index of parameter

    - -
    -
    -
    -
  • -
  • -
    - - - - reset() - -
    -
    -
    -
    -
    -
    -

    Resets the SQL statement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func reset() throws -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int result

    - -
    -
    -
    -
  • -
  • -
    - - - - columnCount() - -
    -
    -
    -
    -
    -
    -

    Return the number of columns in mthe result set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnCount() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int count of columns in result set

    - -
    -
    -
    -
  • -
  • -
    - - - - columnName(position:) - -
    -
    -
    -
    -
    -
    -

    Returns the name for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnName(position position: Int) -> String
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - position - - -
    -

    Int position of column

    - -
    -
    -
    -
    -

    Return Value

    -

    String name of column

    - -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the name of the declared type for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnDeclType(position position: Int) -> String
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - position - - -
    -

    Int position of column

    - -
    -
    -
    -
    -

    Return Value

    -

    String name of declared type

    - -
    -
    -
    -
  • -
  • -
    - - - - columnBlob(position:) - -
    -
    -
    -
    -
    -
    -

    Returns the blob data for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnBlob(position position: Int) -> [Int8]
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - position - - -
    -

    Int position of column

    - -
    -
    -
    -
    -

    Return Value

    -

    [Int8] blob

    - -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the Double value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnDouble(position position: Int) -> Double
    - -
    -
    -
    -

    Return Value

    -

    Double value for column

    - -
    -
    -
    -
  • -
  • -
    - - - - columnInt(position:) - -
    -
    -
    -
    -
    -
    -

    Returns the Int value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnInt(position position: Int) -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int value for column

    - -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the Int32 value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnInt32(position position: Int) -> Int32
    - -
    -
    -
    -

    Return Value

    -

    Int32 value for column

    - -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the Int64 value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnInt64(position position: Int) -> Int64
    - -
    -
    -
    -

    Return Value

    -

    Int64 value for column

    - -
    -
    -
    -
  • -
  • -
    - - - - columnText(position:) - -
    -
    -
    -
    -
    -
    -

    Returns the String value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnText(position position: Int) -> String
    - -
    -
    -
    -

    Return Value

    -

    String value for column

    - -
    -
    -
    -
  • -
  • -
    - - - - columnType(_:) - -
    -
    -
    -
    -
    -
    -

    Returns the type for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnType(position: Int) -> Int32
    - -
    -
    -
    -

    Return Value

    -

    Int32

    - -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/Enums.html b/docs/Enums.html deleted file mode 100644 index 5c7058b..0000000 --- a/docs/Enums.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - Enums Reference - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

Enums

-

The following enums are available globally.

- -
-
-
-
    -
  • -
    - - - - SQLiteError - -
    -
    -
    -
    -
    -
    -

    This enum type indicates an exception when dealing with a SQLite database

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum SQLiteError : ErrorProtocol
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/Enums/SQLiteError.html b/docs/Enums/SQLiteError.html deleted file mode 100644 index d56dced..0000000 --- a/docs/Enums/SQLiteError.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - SQLiteError Enum Reference - - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

SQLiteError

-
-
-
public enum SQLiteError : ErrorProtocol
- -
-
-

This enum type indicates an exception when dealing with a SQLite database

- -
-
-
-
    -
  • -
    - - - - Error - -
    -
    -
    -
    -
    -
    -

    A SQLite error code and message.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case Error(code: Int, msg: String)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/css/highlight.css b/docs/css/highlight.css deleted file mode 100644 index d0db0e1..0000000 --- a/docs/css/highlight.css +++ /dev/null @@ -1,200 +0,0 @@ -/* Credit to https://gist.github.com/wataru420/2048287 */ -.highlight { - /* Comment */ - /* Error */ - /* Keyword */ - /* Operator */ - /* Comment.Multiline */ - /* Comment.Preproc */ - /* Comment.Single */ - /* Comment.Special */ - /* Generic.Deleted */ - /* Generic.Deleted.Specific */ - /* Generic.Emph */ - /* Generic.Error */ - /* Generic.Heading */ - /* Generic.Inserted */ - /* Generic.Inserted.Specific */ - /* Generic.Output */ - /* Generic.Prompt */ - /* Generic.Strong */ - /* Generic.Subheading */ - /* Generic.Traceback */ - /* Keyword.Constant */ - /* Keyword.Declaration */ - /* Keyword.Pseudo */ - /* Keyword.Reserved */ - /* Keyword.Type */ - /* Literal.Number */ - /* Literal.String */ - /* Name.Attribute */ - /* Name.Builtin */ - /* Name.Class */ - /* Name.Constant */ - /* Name.Entity */ - /* Name.Exception */ - /* Name.Function */ - /* Name.Namespace */ - /* Name.Tag */ - /* Name.Variable */ - /* Operator.Word */ - /* Text.Whitespace */ - /* Literal.Number.Float */ - /* Literal.Number.Hex */ - /* Literal.Number.Integer */ - /* Literal.Number.Oct */ - /* Literal.String.Backtick */ - /* Literal.String.Char */ - /* Literal.String.Doc */ - /* Literal.String.Double */ - /* Literal.String.Escape */ - /* Literal.String.Heredoc */ - /* Literal.String.Interpol */ - /* Literal.String.Other */ - /* Literal.String.Regex */ - /* Literal.String.Single */ - /* Literal.String.Symbol */ - /* Name.Builtin.Pseudo */ - /* Name.Variable.Class */ - /* Name.Variable.Global */ - /* Name.Variable.Instance */ - /* Literal.Number.Integer.Long */ } - .highlight .c { - color: #999988; - font-style: italic; } - .highlight .err { - color: #a61717; - background-color: #e3d2d2; } - .highlight .k { - color: #000000; - font-weight: bold; } - .highlight .o { - color: #000000; - font-weight: bold; } - .highlight .cm { - color: #999988; - font-style: italic; } - .highlight .cp { - color: #999999; - font-weight: bold; } - .highlight .c1 { - color: #999988; - font-style: italic; } - .highlight .cs { - color: #999999; - font-weight: bold; - font-style: italic; } - .highlight .gd { - color: #000000; - background-color: #ffdddd; } - .highlight .gd .x { - color: #000000; - background-color: #ffaaaa; } - .highlight .ge { - color: #000000; - font-style: italic; } - .highlight .gr { - color: #aa0000; } - .highlight .gh { - color: #999999; } - .highlight .gi { - color: #000000; - background-color: #ddffdd; } - .highlight .gi .x { - color: #000000; - background-color: #aaffaa; } - .highlight .go { - color: #888888; } - .highlight .gp { - color: #555555; } - .highlight .gs { - font-weight: bold; } - .highlight .gu { - color: #aaaaaa; } - .highlight .gt { - color: #aa0000; } - .highlight .kc { - color: #000000; - font-weight: bold; } - .highlight .kd { - color: #000000; - font-weight: bold; } - .highlight .kp { - color: #000000; - font-weight: bold; } - .highlight .kr { - color: #000000; - font-weight: bold; } - .highlight .kt { - color: #445588; } - .highlight .m { - color: #009999; } - .highlight .s { - color: #d14; } - .highlight .na { - color: #008080; } - .highlight .nb { - color: #0086B3; } - .highlight .nc { - color: #445588; - font-weight: bold; } - .highlight .no { - color: #008080; } - .highlight .ni { - color: #800080; } - .highlight .ne { - color: #990000; - font-weight: bold; } - .highlight .nf { - color: #990000; } - .highlight .nn { - color: #555555; } - .highlight .nt { - color: #000080; } - .highlight .nv { - color: #008080; } - .highlight .ow { - color: #000000; - font-weight: bold; } - .highlight .w { - color: #bbbbbb; } - .highlight .mf { - color: #009999; } - .highlight .mh { - color: #009999; } - .highlight .mi { - color: #009999; } - .highlight .mo { - color: #009999; } - .highlight .sb { - color: #d14; } - .highlight .sc { - color: #d14; } - .highlight .sd { - color: #d14; } - .highlight .s2 { - color: #d14; } - .highlight .se { - color: #d14; } - .highlight .sh { - color: #d14; } - .highlight .si { - color: #d14; } - .highlight .sx { - color: #d14; } - .highlight .sr { - color: #009926; } - .highlight .s1 { - color: #d14; } - .highlight .ss { - color: #990073; } - .highlight .bp { - color: #999999; } - .highlight .vc { - color: #008080; } - .highlight .vg { - color: #008080; } - .highlight .vi { - color: #008080; } - .highlight .il { - color: #009999; } diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css deleted file mode 100644 index d6d65b7..0000000 --- a/docs/css/jazzy.css +++ /dev/null @@ -1,332 +0,0 @@ -html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { - background: transparent; - border: 0; - margin: 0; - outline: 0; - padding: 0; - vertical-align: baseline; } - -body { - background-color: #f2f2f2; - font-family: Helvetica, freesans, Arial, sans-serif; - font-size: 14px; - -webkit-font-smoothing: subpixel-antialiased; - word-wrap: break-word; } - -h1, h2, h3 { - margin-top: 0.8em; - margin-bottom: 0.3em; - font-weight: 100; - color: black; } - -h1 { - font-size: 2.5em; } - -h2 { - font-size: 2em; - border-bottom: 1px solid #e2e2e2; } - -h4 { - font-size: 13px; - line-height: 1.5; - margin-top: 21px; } - -h5 { - font-size: 1.1em; } - -h6 { - font-size: 1.1em; - color: #777; } - -.section-name { - color: gray; - display: block; - font-family: Helvetica; - font-size: 22px; - font-weight: 100; - margin-bottom: 15px; } - -pre, code { - font: 0.95em Menlo, monospace; - color: #777; - word-wrap: normal; } - -p code, li code { - background-color: #eee; - padding: 2px 4px; - border-radius: 4px; } - -a { - color: #0088cc; - text-decoration: none; } - -ul { - padding-left: 15px; } - -li { - line-height: 1.8em; } - -img { - max-width: 100%; } - -blockquote { - margin-left: 0; - padding: 0 10px; - border-left: 4px solid #ccc; } - -.content-wrapper { - margin: 0 auto; - width: 980px; } - -header { - font-size: 0.85em; - line-height: 26px; - background-color: #414141; - position: fixed; - width: 100%; - z-index: 1; } - header img { - padding-right: 6px; - vertical-align: -4px; - height: 16px; } - header a { - color: #fff; } - header p { - float: left; - color: #999; } - header .header-right { - float: right; - margin-left: 16px; } - -#breadcrumbs { - background-color: #f2f2f2; - height: 27px; - padding-top: 17px; - position: fixed; - width: 100%; - z-index: 1; - margin-top: 26px; } - #breadcrumbs #carat { - height: 10px; - margin: 0 5px; } - -.sidebar { - background-color: #f9f9f9; - border: 1px solid #e2e2e2; - overflow-y: auto; - overflow-x: hidden; - position: fixed; - top: 70px; - bottom: 0; - width: 230px; - word-wrap: normal; } - -.nav-groups { - list-style-type: none; - background: #fff; - padding-left: 0; } - -.nav-group-name { - border-bottom: 1px solid #e2e2e2; - font-size: 1.1em; - font-weight: 100; - padding: 15px 0 15px 20px; } - .nav-group-name > a { - color: #333; } - -.nav-group-tasks { - margin-top: 5px; } - -.nav-group-task { - font-size: 0.9em; - list-style-type: none; - white-space: nowrap; } - .nav-group-task a { - color: #888; } - -.main-content { - background-color: #fff; - border: 1px solid #e2e2e2; - margin-left: 246px; - position: absolute; - overflow: hidden; - padding-bottom: 60px; - top: 70px; - width: 734px; } - .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { - margin-bottom: 1em; } - .main-content p { - line-height: 1.8em; } - .main-content section .section:first-child { - margin-top: 0; - padding-top: 0; } - .main-content section .task-group-section .task-group:first-of-type { - padding-top: 10px; } - .main-content section .task-group-section .task-group:first-of-type .section-name { - padding-top: 15px; } - -.section { - padding: 0 25px; } - -.highlight { - background-color: #eee; - padding: 10px 12px; - border: 1px solid #e2e2e2; - border-radius: 4px; - overflow-x: auto; } - -.declaration .highlight { - overflow-x: initial; - padding: 0 40px 40px 0; - margin-bottom: -25px; - background-color: transparent; - border: none; } - -.section-name { - margin: 0; - margin-left: 18px; } - -.task-group-section { - padding-left: 6px; - border-top: 1px solid #e2e2e2; } - -.task-group { - padding-top: 0px; } - -.task-name-container a[name]:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - -.item { - padding-top: 8px; - width: 100%; - list-style-type: none; } - .item a[name]:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - .item code { - background-color: transparent; - padding: 0; } - .item .token { - padding-left: 3px; - margin-left: 15px; - font-size: 11.9px; } - .item .declaration-note { - font-size: .85em; - color: gray; - font-style: italic; } - -.pointer-container { - border-bottom: 1px solid #e2e2e2; - left: -23px; - padding-bottom: 13px; - position: relative; - width: 110%; } - -.pointer { - background: #f9f9f9; - border-left: 1px solid #e2e2e2; - border-top: 1px solid #e2e2e2; - height: 12px; - left: 21px; - top: -7px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - position: absolute; - width: 12px; } - -.height-container { - display: none; - left: -25px; - padding: 0 25px; - position: relative; - width: 100%; - overflow: hidden; } - .height-container .section { - background: #f9f9f9; - border-bottom: 1px solid #e2e2e2; - left: -25px; - position: relative; - width: 100%; - padding-top: 10px; - padding-bottom: 5px; } - -.aside, .language { - padding: 6px 12px; - margin: 12px 0; - border-left: 5px solid #dddddd; - overflow-y: hidden; } - .aside .aside-title, .language .aside-title { - font-size: 9px; - letter-spacing: 2px; - text-transform: uppercase; - padding-bottom: 0; - margin: 0; - color: #aaa; - -webkit-user-select: none; } - .aside p:last-child, .language p:last-child { - margin-bottom: 0; } - -.language { - border-left: 5px solid #cde9f4; } - .language .aside-title { - color: #4b8afb; } - -.aside-warning { - border-left: 5px solid #ff6666; } - .aside-warning .aside-title { - color: #ff0000; } - -.graybox { - border-collapse: collapse; - width: 100%; } - .graybox p { - margin: 0; - word-break: break-word; - min-width: 50px; } - .graybox td { - border: 1px solid #e2e2e2; - padding: 5px 25px 5px 10px; - vertical-align: middle; } - .graybox tr td:first-of-type { - text-align: right; - padding: 7px; - vertical-align: top; - word-break: normal; - width: 40px; } - -.slightly-smaller { - font-size: 0.9em; } - -#footer { - position: absolute; - bottom: 10px; - margin-left: 25px; } - #footer p { - margin: 0; - color: #aaa; - font-size: 0.8em; } - -html.dash header, html.dash #breadcrumbs, html.dash .sidebar { - display: none; } -html.dash .main-content { - width: 980px; - margin-left: 0; - border: none; - width: 100%; - top: 0; - padding-bottom: 0; } -html.dash .height-container { - display: block; } -html.dash .item .token { - margin-left: 0; } -html.dash .content-wrapper { - width: auto; } -html.dash #footer { - position: static; } diff --git a/docs/docsets/.docset/Contents/Info.plist b/docs/docsets/.docset/Contents/Info.plist deleted file mode 100644 index 4fcbfbd..0000000 --- a/docs/docsets/.docset/Contents/Info.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - CFBundleIdentifier - com.jazzy. - CFBundleName - - DocSetPlatformFamily - jazzy - isDashDocset - - dashIndexFilePath - index.html - isJavaScriptEnabled - - DashDocSetFamily - dashtoc - - diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes.html deleted file mode 100644 index 556c54f..0000000 --- a/docs/docsets/.docset/Contents/Resources/Documents/Classes.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - Classes Reference - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

Classes

-

The following classes are available globally.

- -
-
-
-
    -
  • -
    - - - - SQLite - -
    -
    -
    -
    -
    -
    -

    A SQLite database

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class SQLite
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - SQLiteStmt - -
    -
    -
    -
    -
    -
    -

    A compiled SQLite statement

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class SQLiteStmt
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/SQLite.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/SQLite.html deleted file mode 100644 index c012ff2..0000000 --- a/docs/docsets/.docset/Contents/Resources/Documents/Classes/SQLite.html +++ /dev/null @@ -1,760 +0,0 @@ - - - - SQLite Class Reference - - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

SQLite

-
-
-
public class SQLite
- -
-
-

A SQLite database

- -
-
-
-
    -
  • -
    - - - - init(_:readOnly:) - -
    -
    -
    -
    -
    -
    -

    Create or open a SQLite database given a file path.

    - -
    -

    Throws

    - SQLiteError - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(_ path: String, readOnly: Bool = false) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - path - - -
    -

    String path to SQLite database

    - -
    -
    - - readOnly - - -
    -

    Optional, Bool flag for read/write setting, defaults to false

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - close() - -
    -
    -
    -
    -
    -
    -

    Close the SQLite database.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func close()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - prepare(statement:) - -
    -
    -
    -
    -
    -
    -

    Compile the SQL statement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func prepare(statement stat: String) throws -> SQLiteStmt
    - -
    -
    -
    -

    Return Value

    -

    A SQLiteStmt object representing the compiled statement.

    - -
    -
    -
    -
  • -
  • -
    - - - - lastInsertRowID() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_last_insert_rowid.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func lastInsertRowID() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int last inserted row ID

    - -
    -
    -
    -
  • -
  • -
    - - - - totalChanges() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_total_changes.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func totalChanges() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int total changes

    - -
    -
    -
    -
  • -
  • -
    - - - - changes() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_changes.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func changes() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int number of changes

    - -
    -
    -
    -
  • -
  • -
    - - - - errCode() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_errcode.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func errCode() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int error code

    - -
    -
    -
    -
  • -
  • -
    - - - - errMsg() - -
    -
    -
    -
    -
    -
    -

    Returns the value of sqlite3_errmsg.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func errMsg() -> String
    - -
    -
    -
    -

    Return Value

    -

    String error message

    - -
    -
    -
    -
  • -
  • -
    - - - - execute(statement:) - -
    -
    -
    -
    -
    -
    -

    Execute the given statement. Assumes there will be no parameter binding or resulting row data.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func execute(statement statement: String) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Execute the given statement. Calls the provided callback one time for parameter binding. Assumes there will be no resulting row data.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func execute(statement statement: String, doBindings: (SQLiteStmt) throws -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    - - doBindings - - -
    -

    Block used for bindings

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Execute the given statement count times. Calls the provided callback on each execution for parameter binding. Assumes there will be no resulting row data.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func execute(statement statement: String, count: Int, doBindings: (SQLiteStmt, Int) throws -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    - - count - - -
    -

    Int number of times to execute

    - -
    -
    - - doBindings - - -
    -

    Block to be executed for binding on each call

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - doWithTransaction(_:) - -
    -
    -
    -
    -
    -
    -

    Executes a BEGIN, calls the provided closure and executes a ROLLBACK if an exception occurs or a COMMIT if no exception occurs.

    - -
    -

    Throws

    - ErrorType - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func doWithTransaction(closure: () throws -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - closure - - -
    -

    Block to be executed inside transaction

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Executes the statement and calls the closure for each resulting row.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func forEachRow(statement statement: String, handleRow: (SQLiteStmt, Int) -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    - - handleRow - - -
    -

    Block to be executed for each row

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Executes the statement, calling doBindings to handle parameter bindings and calling handleRow for each resulting row.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func forEachRow(statement statement: String, doBindings: (SQLiteStmt) throws -> (), handleRow: (SQLiteStmt, Int) -> ()) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - -
    - - statement - - -
    -

    String statement to be executed

    - -
    -
    - - doBindings - - -
    -

    Block to perform bindings on statement

    - -
    -
    - - handleRow - - -
    -

    Block to execute for each row

    - -
    -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/SQLiteStmt.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/SQLiteStmt.html deleted file mode 100644 index ab3061e..0000000 --- a/docs/docsets/.docset/Contents/Resources/Documents/Classes/SQLiteStmt.html +++ /dev/null @@ -1,1726 +0,0 @@ - - - - SQLiteStmt Class Reference - - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

SQLiteStmt

-
-
-
public class SQLiteStmt
- -
-
-

A compiled SQLite statement

- -
-
-
-
    -
  • -
    - - - - close() - -
    -
    -
    -
    -
    -
    -

    Close or finalize the statement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func close()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - finalize() - -
    -
    -
    -
    -
    -
    -

    Close the statement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func finalize()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - step() - -
    -
    -
    -
    -
    -
    -

    Advance to the next row.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func step() -> Int32
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Double value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ d: Double) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - d - - -
    -

    Double to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int32 value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ i: Int32) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - i - - -
    -

    Int32 to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ i: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - i - - -
    -

    Int to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int64 value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ i: Int64) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - i - - -
    -

    Int64 to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the String value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ s: String) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - s - - -
    -

    String to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the [Int8] blob value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ b: [Int8]) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - b - - -
    -

    [Int8] blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(position:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the [UInt8] blob value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(position position: Int, _ b: [UInt8]) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - b - - -
    -

    [UInt8] blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Bind a blob of count zero values to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindZeroBlob(position position: Int, count: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    - - count - - -
    -

    Int number of zero values in blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bindNull(position:) - -
    -
    -
    -
    -
    -
    -

    Bind a null to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindNull(position position: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - position - - -
    -

    Int position of binding

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Double value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ d: Double) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - d - - -
    -

    Double to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int32 value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ i: Int32) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - i - - -
    -

    Int32 to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ i: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - i - - -
    -

    Int to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the Int64 value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ i: Int64) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - i - - -
    -

    Int64 to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the String value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ s: String) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - s - - -
    -

    String to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bind(name:_:) - -
    -
    -
    -
    -
    -
    -

    Bind the [Int8] blob value to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bind(name name: String, _ b: [Int8]) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - b - - -
    -

    [Int8] blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Bind a blob of count zero values to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindZeroBlob(name: String, count: Int) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    - - count - - -
    -

    Int number of zero values in blob to be bound

    - -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - bindNull(name:) - -
    -
    -
    -
    -
    -
    -

    Bind a null to the indicated parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindNull(name name: String) throws
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the index for the named parameter.

    - -
    -

    Throws

    - () - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func bindParameterIndex(name name: String) throws -> Int
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - name - - -
    -

    String name of binding

    - -
    -
    -
    -
    -

    Return Value

    -

    Int index of parameter

    - -
    -
    -
    -
  • -
  • -
    - - - - reset() - -
    -
    -
    -
    -
    -
    -

    Resets the SQL statement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func reset() throws -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int result

    - -
    -
    -
    -
  • -
  • -
    - - - - columnCount() - -
    -
    -
    -
    -
    -
    -

    Return the number of columns in mthe result set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnCount() -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int count of columns in result set

    - -
    -
    -
    -
  • -
  • -
    - - - - columnName(position:) - -
    -
    -
    -
    -
    -
    -

    Returns the name for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnName(position position: Int) -> String
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - position - - -
    -

    Int position of column

    - -
    -
    -
    -
    -

    Return Value

    -

    String name of column

    - -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the name of the declared type for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnDeclType(position position: Int) -> String
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - position - - -
    -

    Int position of column

    - -
    -
    -
    -
    -

    Return Value

    -

    String name of declared type

    - -
    -
    -
    -
  • -
  • -
    - - - - columnBlob(position:) - -
    -
    -
    -
    -
    -
    -

    Returns the blob data for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnBlob(position position: Int) -> [Int8]
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - position - - -
    -

    Int position of column

    - -
    -
    -
    -
    -

    Return Value

    -

    [Int8] blob

    - -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the Double value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnDouble(position position: Int) -> Double
    - -
    -
    -
    -

    Return Value

    -

    Double value for column

    - -
    -
    -
    -
  • -
  • -
    - - - - columnInt(position:) - -
    -
    -
    -
    -
    -
    -

    Returns the Int value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnInt(position position: Int) -> Int
    - -
    -
    -
    -

    Return Value

    -

    Int value for column

    - -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the Int32 value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnInt32(position position: Int) -> Int32
    - -
    -
    -
    -

    Return Value

    -

    Int32 value for column

    - -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the Int64 value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnInt64(position position: Int) -> Int64
    - -
    -
    -
    -

    Return Value

    -

    Int64 value for column

    - -
    -
    -
    -
  • -
  • -
    - - - - columnText(position:) - -
    -
    -
    -
    -
    -
    -

    Returns the String value for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnText(position position: Int) -> String
    - -
    -
    -
    -

    Return Value

    -

    String value for column

    - -
    -
    -
    -
  • -
  • -
    - - - - columnType(_:) - -
    -
    -
    -
    -
    -
    -

    Returns the type for the indicated column.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func columnType(position: Int) -> Int32
    - -
    -
    -
    -

    Return Value

    -

    Int32

    - -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/.docset/Contents/Resources/Documents/Enums.html deleted file mode 100644 index 5c7058b..0000000 --- a/docs/docsets/.docset/Contents/Resources/Documents/Enums.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - Enums Reference - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

Enums

-

The following enums are available globally.

- -
-
-
-
    -
  • -
    - - - - SQLiteError - -
    -
    -
    -
    -
    -
    -

    This enum type indicates an exception when dealing with a SQLite database

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum SQLiteError : ErrorProtocol
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Enums/SQLiteError.html b/docs/docsets/.docset/Contents/Resources/Documents/Enums/SQLiteError.html deleted file mode 100644 index d56dced..0000000 --- a/docs/docsets/.docset/Contents/Resources/Documents/Enums/SQLiteError.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - SQLiteError Enum Reference - - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
-

SQLiteError

-
-
-
public enum SQLiteError : ErrorProtocol
- -
-
-

This enum type indicates an exception when dealing with a SQLite database

- -
-
-
-
    -
  • -
    - - - - Error - -
    -
    -
    -
    -
    -
    -

    A SQLite error code and message.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case Error(code: Int, msg: String)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - - diff --git a/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css b/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css deleted file mode 100644 index d0db0e1..0000000 --- a/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css +++ /dev/null @@ -1,200 +0,0 @@ -/* Credit to https://gist.github.com/wataru420/2048287 */ -.highlight { - /* Comment */ - /* Error */ - /* Keyword */ - /* Operator */ - /* Comment.Multiline */ - /* Comment.Preproc */ - /* Comment.Single */ - /* Comment.Special */ - /* Generic.Deleted */ - /* Generic.Deleted.Specific */ - /* Generic.Emph */ - /* Generic.Error */ - /* Generic.Heading */ - /* Generic.Inserted */ - /* Generic.Inserted.Specific */ - /* Generic.Output */ - /* Generic.Prompt */ - /* Generic.Strong */ - /* Generic.Subheading */ - /* Generic.Traceback */ - /* Keyword.Constant */ - /* Keyword.Declaration */ - /* Keyword.Pseudo */ - /* Keyword.Reserved */ - /* Keyword.Type */ - /* Literal.Number */ - /* Literal.String */ - /* Name.Attribute */ - /* Name.Builtin */ - /* Name.Class */ - /* Name.Constant */ - /* Name.Entity */ - /* Name.Exception */ - /* Name.Function */ - /* Name.Namespace */ - /* Name.Tag */ - /* Name.Variable */ - /* Operator.Word */ - /* Text.Whitespace */ - /* Literal.Number.Float */ - /* Literal.Number.Hex */ - /* Literal.Number.Integer */ - /* Literal.Number.Oct */ - /* Literal.String.Backtick */ - /* Literal.String.Char */ - /* Literal.String.Doc */ - /* Literal.String.Double */ - /* Literal.String.Escape */ - /* Literal.String.Heredoc */ - /* Literal.String.Interpol */ - /* Literal.String.Other */ - /* Literal.String.Regex */ - /* Literal.String.Single */ - /* Literal.String.Symbol */ - /* Name.Builtin.Pseudo */ - /* Name.Variable.Class */ - /* Name.Variable.Global */ - /* Name.Variable.Instance */ - /* Literal.Number.Integer.Long */ } - .highlight .c { - color: #999988; - font-style: italic; } - .highlight .err { - color: #a61717; - background-color: #e3d2d2; } - .highlight .k { - color: #000000; - font-weight: bold; } - .highlight .o { - color: #000000; - font-weight: bold; } - .highlight .cm { - color: #999988; - font-style: italic; } - .highlight .cp { - color: #999999; - font-weight: bold; } - .highlight .c1 { - color: #999988; - font-style: italic; } - .highlight .cs { - color: #999999; - font-weight: bold; - font-style: italic; } - .highlight .gd { - color: #000000; - background-color: #ffdddd; } - .highlight .gd .x { - color: #000000; - background-color: #ffaaaa; } - .highlight .ge { - color: #000000; - font-style: italic; } - .highlight .gr { - color: #aa0000; } - .highlight .gh { - color: #999999; } - .highlight .gi { - color: #000000; - background-color: #ddffdd; } - .highlight .gi .x { - color: #000000; - background-color: #aaffaa; } - .highlight .go { - color: #888888; } - .highlight .gp { - color: #555555; } - .highlight .gs { - font-weight: bold; } - .highlight .gu { - color: #aaaaaa; } - .highlight .gt { - color: #aa0000; } - .highlight .kc { - color: #000000; - font-weight: bold; } - .highlight .kd { - color: #000000; - font-weight: bold; } - .highlight .kp { - color: #000000; - font-weight: bold; } - .highlight .kr { - color: #000000; - font-weight: bold; } - .highlight .kt { - color: #445588; } - .highlight .m { - color: #009999; } - .highlight .s { - color: #d14; } - .highlight .na { - color: #008080; } - .highlight .nb { - color: #0086B3; } - .highlight .nc { - color: #445588; - font-weight: bold; } - .highlight .no { - color: #008080; } - .highlight .ni { - color: #800080; } - .highlight .ne { - color: #990000; - font-weight: bold; } - .highlight .nf { - color: #990000; } - .highlight .nn { - color: #555555; } - .highlight .nt { - color: #000080; } - .highlight .nv { - color: #008080; } - .highlight .ow { - color: #000000; - font-weight: bold; } - .highlight .w { - color: #bbbbbb; } - .highlight .mf { - color: #009999; } - .highlight .mh { - color: #009999; } - .highlight .mi { - color: #009999; } - .highlight .mo { - color: #009999; } - .highlight .sb { - color: #d14; } - .highlight .sc { - color: #d14; } - .highlight .sd { - color: #d14; } - .highlight .s2 { - color: #d14; } - .highlight .se { - color: #d14; } - .highlight .sh { - color: #d14; } - .highlight .si { - color: #d14; } - .highlight .sx { - color: #d14; } - .highlight .sr { - color: #009926; } - .highlight .s1 { - color: #d14; } - .highlight .ss { - color: #990073; } - .highlight .bp { - color: #999999; } - .highlight .vc { - color: #008080; } - .highlight .vg { - color: #008080; } - .highlight .vi { - color: #008080; } - .highlight .il { - color: #009999; } diff --git a/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css deleted file mode 100644 index d6d65b7..0000000 --- a/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css +++ /dev/null @@ -1,332 +0,0 @@ -html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { - background: transparent; - border: 0; - margin: 0; - outline: 0; - padding: 0; - vertical-align: baseline; } - -body { - background-color: #f2f2f2; - font-family: Helvetica, freesans, Arial, sans-serif; - font-size: 14px; - -webkit-font-smoothing: subpixel-antialiased; - word-wrap: break-word; } - -h1, h2, h3 { - margin-top: 0.8em; - margin-bottom: 0.3em; - font-weight: 100; - color: black; } - -h1 { - font-size: 2.5em; } - -h2 { - font-size: 2em; - border-bottom: 1px solid #e2e2e2; } - -h4 { - font-size: 13px; - line-height: 1.5; - margin-top: 21px; } - -h5 { - font-size: 1.1em; } - -h6 { - font-size: 1.1em; - color: #777; } - -.section-name { - color: gray; - display: block; - font-family: Helvetica; - font-size: 22px; - font-weight: 100; - margin-bottom: 15px; } - -pre, code { - font: 0.95em Menlo, monospace; - color: #777; - word-wrap: normal; } - -p code, li code { - background-color: #eee; - padding: 2px 4px; - border-radius: 4px; } - -a { - color: #0088cc; - text-decoration: none; } - -ul { - padding-left: 15px; } - -li { - line-height: 1.8em; } - -img { - max-width: 100%; } - -blockquote { - margin-left: 0; - padding: 0 10px; - border-left: 4px solid #ccc; } - -.content-wrapper { - margin: 0 auto; - width: 980px; } - -header { - font-size: 0.85em; - line-height: 26px; - background-color: #414141; - position: fixed; - width: 100%; - z-index: 1; } - header img { - padding-right: 6px; - vertical-align: -4px; - height: 16px; } - header a { - color: #fff; } - header p { - float: left; - color: #999; } - header .header-right { - float: right; - margin-left: 16px; } - -#breadcrumbs { - background-color: #f2f2f2; - height: 27px; - padding-top: 17px; - position: fixed; - width: 100%; - z-index: 1; - margin-top: 26px; } - #breadcrumbs #carat { - height: 10px; - margin: 0 5px; } - -.sidebar { - background-color: #f9f9f9; - border: 1px solid #e2e2e2; - overflow-y: auto; - overflow-x: hidden; - position: fixed; - top: 70px; - bottom: 0; - width: 230px; - word-wrap: normal; } - -.nav-groups { - list-style-type: none; - background: #fff; - padding-left: 0; } - -.nav-group-name { - border-bottom: 1px solid #e2e2e2; - font-size: 1.1em; - font-weight: 100; - padding: 15px 0 15px 20px; } - .nav-group-name > a { - color: #333; } - -.nav-group-tasks { - margin-top: 5px; } - -.nav-group-task { - font-size: 0.9em; - list-style-type: none; - white-space: nowrap; } - .nav-group-task a { - color: #888; } - -.main-content { - background-color: #fff; - border: 1px solid #e2e2e2; - margin-left: 246px; - position: absolute; - overflow: hidden; - padding-bottom: 60px; - top: 70px; - width: 734px; } - .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { - margin-bottom: 1em; } - .main-content p { - line-height: 1.8em; } - .main-content section .section:first-child { - margin-top: 0; - padding-top: 0; } - .main-content section .task-group-section .task-group:first-of-type { - padding-top: 10px; } - .main-content section .task-group-section .task-group:first-of-type .section-name { - padding-top: 15px; } - -.section { - padding: 0 25px; } - -.highlight { - background-color: #eee; - padding: 10px 12px; - border: 1px solid #e2e2e2; - border-radius: 4px; - overflow-x: auto; } - -.declaration .highlight { - overflow-x: initial; - padding: 0 40px 40px 0; - margin-bottom: -25px; - background-color: transparent; - border: none; } - -.section-name { - margin: 0; - margin-left: 18px; } - -.task-group-section { - padding-left: 6px; - border-top: 1px solid #e2e2e2; } - -.task-group { - padding-top: 0px; } - -.task-name-container a[name]:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - -.item { - padding-top: 8px; - width: 100%; - list-style-type: none; } - .item a[name]:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - .item code { - background-color: transparent; - padding: 0; } - .item .token { - padding-left: 3px; - margin-left: 15px; - font-size: 11.9px; } - .item .declaration-note { - font-size: .85em; - color: gray; - font-style: italic; } - -.pointer-container { - border-bottom: 1px solid #e2e2e2; - left: -23px; - padding-bottom: 13px; - position: relative; - width: 110%; } - -.pointer { - background: #f9f9f9; - border-left: 1px solid #e2e2e2; - border-top: 1px solid #e2e2e2; - height: 12px; - left: 21px; - top: -7px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - position: absolute; - width: 12px; } - -.height-container { - display: none; - left: -25px; - padding: 0 25px; - position: relative; - width: 100%; - overflow: hidden; } - .height-container .section { - background: #f9f9f9; - border-bottom: 1px solid #e2e2e2; - left: -25px; - position: relative; - width: 100%; - padding-top: 10px; - padding-bottom: 5px; } - -.aside, .language { - padding: 6px 12px; - margin: 12px 0; - border-left: 5px solid #dddddd; - overflow-y: hidden; } - .aside .aside-title, .language .aside-title { - font-size: 9px; - letter-spacing: 2px; - text-transform: uppercase; - padding-bottom: 0; - margin: 0; - color: #aaa; - -webkit-user-select: none; } - .aside p:last-child, .language p:last-child { - margin-bottom: 0; } - -.language { - border-left: 5px solid #cde9f4; } - .language .aside-title { - color: #4b8afb; } - -.aside-warning { - border-left: 5px solid #ff6666; } - .aside-warning .aside-title { - color: #ff0000; } - -.graybox { - border-collapse: collapse; - width: 100%; } - .graybox p { - margin: 0; - word-break: break-word; - min-width: 50px; } - .graybox td { - border: 1px solid #e2e2e2; - padding: 5px 25px 5px 10px; - vertical-align: middle; } - .graybox tr td:first-of-type { - text-align: right; - padding: 7px; - vertical-align: top; - word-break: normal; - width: 40px; } - -.slightly-smaller { - font-size: 0.9em; } - -#footer { - position: absolute; - bottom: 10px; - margin-left: 25px; } - #footer p { - margin: 0; - color: #aaa; - font-size: 0.8em; } - -html.dash header, html.dash #breadcrumbs, html.dash .sidebar { - display: none; } -html.dash .main-content { - width: 980px; - margin-left: 0; - border: none; - width: 100%; - top: 0; - padding-bottom: 0; } -html.dash .height-container { - display: block; } -html.dash .item .token { - margin-left: 0; } -html.dash .content-wrapper { - width: auto; } -html.dash #footer { - position: static; } diff --git a/docs/docsets/.docset/Contents/Resources/Documents/img/carat.png b/docs/docsets/.docset/Contents/Resources/Documents/img/carat.png deleted file mode 100755 index 29d2f7fd4955fca6bc6fb740e0373a2c358c398e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF diff --git a/docs/docsets/.docset/Contents/Resources/Documents/img/dash.png b/docs/docsets/.docset/Contents/Resources/Documents/img/dash.png deleted file mode 100755 index 6f694c7a012b417908da3687a0a39aa182e91c74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338 zcmaJ>U2NM_6t){^r>#wcfL0VSTvuX@)$vd4#5N6WVkc|1rR}naMb)(7I5(};#!el# zbtCASsp?W-qE8zSJoFVdA%-T$WL8RI_B? zd+t5o`T5Q{p6=<|U$?VqCxRe#u}(PwSIl{LRKstfSbPYV7pzFiI$~t4QN;vEC}X4n z7RxDpAOV!j*w8ni4MAK3S~6v&;)g`l$axh<$7|>E5RD*h?RH*K2Y`j8L7%1v@%vZi za7@bt@uOUvisvQJuXPqpaHQCkREqd6M>0WG?6AwXR*T65ziuw$&~q$MS$o zfPyh>s<0l}mI@eh_hd(oB8*1tHZ@ojWl%QM;T+Jdm>k66jW?rZ#Atx!qns4-g&E4v z(=;FQ%W^avW?3J{L@2IeV>_(Ca)Lk1vm70uX*$9Rewm8!AxRF0BcZTNSFka?U@5u^ zDtpMY2lVtCmQm<8@|YxHuf`Qs(;a!QQ=g4=WngL}AQLr> z9JWrdsBIHKHXF!fSydodRsaOc@jgNkSU^x9kY&;UP<}3pZ{joC5f_Tevd>4eG~;)Y z=eZ~qp=5#aaUn*E3OES^BApKTU&mCAU>iEyt^S9?)&v0^j*SWDqjRZr20>6rTPSJ& zlzz0f);`}+^~w}lP1PK7Ew3f7ot#*uJ@>1Yo3J0TdsRKpA+*n9JnDXDrM~YvF`;uS|vAh|-QdmRf4AqG=`U z#v1n_Lxg8;&z#YCU2K`_W{-A zUf_|V)B9U(WZ~PP>)O(JZ|Vc-*qP&Q{c~BE~6izDPQq)#Nu*KOf(n^(VHY9;fiINM65``pc+9*v(mL$bwfCjbc%v9V{8r9iX|O%>Nr%pLD2qT{mty}c=LVleeamv znz3SOSm@kP8jThvOOq(56Yzh*fz(booe!uZij=BJC6+_lbvQ~B8nA2>kXdv_RDtRY z`5QXWWEySCe6vbTs^#f?J!WC*{1~RgVx!nJTJjQyO{dRANgx|FnymtGbD9%JmCh9^y)##j7{Dcqfn*1ta$rG89pJF6w-S7Z037$rr|y0;1Onp_ zGFJdT6Q!1C0AdVB0WOmpuV=AgAQ550Tn+-mivTtYPJmz*#75#_n9oV%!#rSOfmAfy zki%C~=fTp1{O#BLpJ|0jj#m6#|LRWit-vq3PE1z9ZqyvET4sX$-Icqy7t z<=aq5ff86AuBZBu6EjJsYWM0uejufWFTwPA7Su}0Bm$7KFb!q{Um_8~A{LUG#1l(l zSehUda@kU8LIRg9fkk2tZ;~ss5~R+mM<==F7hLHpxqLB>>PQS%Vc7b~?q!%T5+h8Q z4G=4Nzyi5WZ?^gkasJ{?Xhm`JC#WG6$1K2jb@=9&D3EgD#3UhGh#*21rJjulVXjCF zvp76q62jt0zzMG5C7DlfMgPl%C^3+~wf|}Lq=}jz|MmIcQjh1Ok6NjD$Em^Iv26D> z8tt_TnM9~^Tt8mflRGPOrrX|HtT3gG4LEuuk{g2Rn}QgJIa?gZo))!!=o_l9bvD%A zZ`aHajl8#~u?!4f7F#*b*->A=R2L)6!>saz?h>#wTXT-I(XmQ zx{84skS>k=i~i`(6k4C7;Zpfx%dCPVjPayMf8pugtGM=~s=Id1l#8MZJ1-73wV#Q3 zR3>v3%}jbQs1f_Z0xo;%=LILlA+nTpKI4ha%xWW}uqHrNao~&T4AY6m`P$_n-6h*g zhoX+e4n%~gl_lhe#s+AMb7d{5WzvYTa%6Q~si@@4{;s(0zU|H&P3fE+t{7X`S#Cj@ zC#vd}^4pcBD*77Ny5=j$h8EL2_t$O38$SQiJ6fPjJMimypr~MB2(&P0aI|h}$64<0 z>_~duqNjaT=DM^6+N{&B_lED;F2wrl?!4Lk*2((x!fmrcsw+=cI^qttuZ9C}-m~5E z-ryYVpL%^xR#&(0YI5hz<(}F7-p)?FPcyJO-zVO>%9ZDXJH8pnY;GJYFDQ>vd#j_* zRrd}L(r=!g+1#nQwsO?kpS`Qq8`NxE+Zy{gf7*_7J*U2V_|NpLo{iasj7VCg_V9&| ShohtYzipXxh2)4xTk - - - Reference - - - - - - - - - -
-
-

Docs (100% documented)

-
-
-
- -
-
- -
-
-
- -

Authors

- -
-
- -
-
- - - diff --git a/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js deleted file mode 100755 index 4ff9455..0000000 --- a/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js +++ /dev/null @@ -1,40 +0,0 @@ -window.jazzy = {'docset': false} -if (typeof window.dash != 'undefined') { - document.documentElement.className += ' dash' - window.jazzy.docset = true -} -if (navigator.userAgent.match(/xcode/i)) { - document.documentElement.className += ' xcode' - window.jazzy.docset = true -} - -// On doc load, toggle the URL hash discussion if present -$(document).ready(function() { - if (!window.jazzy.docset) { - var linkToHash = $('a[href="' + window.location.hash +'"]'); - linkToHash.trigger("click"); - } -}); - -// On token click, toggle its discussion and animate token.marginLeft -$(".token").click(function(event) { - if (window.jazzy.docset) { - return; - } - var link = $(this); - var animationDuration = 300; - var tokenOffset = "15px"; - var original = link.css('marginLeft') == tokenOffset; - link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); - $content = link.parent().parent().next(); - $content.slideToggle(animationDuration); - - // Keeps the document from jumping to the hash. - var href = $(this).attr('href'); - if (history.pushState) { - history.pushState({}, '', href); - } else { - location.hash = href; - } - event.preventDefault(); -}); diff --git a/docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js deleted file mode 100755 index ab28a24..0000000 --- a/docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; -if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("