{"action":"created","comment":{"url":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/comments/67431693","id":67431693,"diff_hunk":"@@ -0,0 +1,201 @@\n+//\n+// SQLite.swift\n+// https://github.com/stephencelis/SQLite.swift\n+// Copyright © 2014-2015 Stephen Celis.\n+//\n+// Permission is hereby granted, free of charge, to any person obtaining a copy\n+// of this software and associated documentation files (the \"Software\"), to deal\n+// in the Software without restriction, including without limitation the rights\n+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+// copies of the Software, and to permit persons to whom the Software is\n+// furnished to do so, subject to the following conditions:\n+//\n+// The above copyright notice and this permission notice shall be included in\n+// all copies or substantial portions of the Software.\n+//\n+// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n+// THE SOFTWARE.\n+//\n+\n+import Dispatch\n+import CSQLite\n+\n+\n+private let vfsName = \"unix-excl\"\n+\n+\n+// Connection pool for accessing an SQLite database\n+// with multiple readers & a single writer. Utilizes\n+// WAL mode.\n+public final class ConnectionPool {\n+\n+    private let location : DirectConnection.Location\n+    private var availableReadConnections = [DirectConnection]()\n+    private var unavailableReadConnections = [DirectConnection]()\n+    private let lockQueue : dispatch_queue_t\n+    private var writeConnection : DirectConnection!\n+    \n+    public var foreignKeys : Bool {\n+        get {\n+            return internalSetup[.ForeignKeys] != nil\n+        }\n+        set {\n+            internalSetup[.ForeignKeys] = newValue ? { try $0.execute(\"PRAGMA foreign_keys = ON;\") } : nil\n+        }\n+    }\n+    \n+    public typealias ConnectionProcessor = Connection throws -> Void\n+    public var setup = [ConnectionProcessor]()\n+    \n+    private enum InternalOption {\n+        case WriteAheadLogging\n+        case ForeignKeys\n+    }\n+    \n+    private var internalSetup = [InternalOption: ConnectionProcessor]()\n+    \n+    public init(_ location: DirectConnection.Location) throws {\n+        self.location = location\n+        self.lockQueue = dispatch_queue_create(\"SQLite.ConnectionPool.Lock\", DISPATCH_QUEUE_SERIAL)\n+        self.internalSetup[.WriteAheadLogging] = { try $0.execute(\"PRAGMA journal_mode = WAL;\") }\n+    }\n+    \n+    public var totalReadableConnectionCount : Int {\n+        return availableReadConnections.count + unavailableReadConnections.count\n+    }\n+    \n+    public var availableReadableConnectionCount : Int {\n+        return availableReadConnections.count\n+    }\n+    \n+    // Connection that automatically returns itself\n+    // to the pool when it goes out of scope\n+    private class BorrowedConnection : Connection, Equatable {\n+        \n+        let pool : ConnectionPool\n+        let connection : DirectConnection\n+        \n+        init(pool: ConnectionPool, connection: DirectConnection) {\n+            self.pool = pool\n+            self.connection = connection\n+        }\n+        \n+        deinit {\n+            dispatch_sync(pool.lockQueue) {\n+                if let index = self.pool.unavailableReadConnections.indexOf(self.connection) {\n+                    self.pool.unavailableReadConnections.removeAtIndex(index)\n+                }\n+                self.pool.availableReadConnections.append(self.connection)\n+            }\n+        }\n+\n+        var readonly : Bool { return connection.readonly }\n+        var lastInsertRowid : Int64? { return connection.lastInsertRowid }\n+        var changes : Int { return connection.changes }\n+        var totalChanges : Int { return connection.totalChanges }\n+        \n+        func execute(SQL: String) throws { return try connection.execute(SQL) }\n+        @warn_unused_result func prepare(statement: String, _ bindings: Binding?...) throws -> Statement { return try connection.prepare(statement, bindings) }\n+        @warn_unused_result func prepare(statement: String, _ bindings: [Binding?]) throws -> Statement { return try connection.prepare(statement, bindings) }\n+        @warn_unused_result func prepare(statement: String, _ bindings: [String: Binding?]) throws -> Statement { return try connection.prepare(statement, bindings) }\n+        \n+        func run(statement: String, _ bindings: Binding?...) throws -> Statement { return try connection.run(statement, bindings) }\n+        func run(statement: String, _ bindings: [Binding?]) throws -> Statement { return try connection.run(statement, bindings) }\n+        func run(statement: String, _ bindings: [String: Binding?]) throws -> Statement { return try connection.run(statement, bindings) }\n+        \n+        @warn_unused_result func scalar(statement: String, _ bindings: Binding?...) -> Binding? { return connection.scalar(statement, bindings) }\n+        @warn_unused_result func scalar(statement: String, _ bindings: [Binding?]) -> Binding? { return connection.scalar(statement, bindings) }\n+        @warn_unused_result func scalar(statement: String, _ bindings: [String: Binding?]) -> Binding? { return connection.scalar(statement, bindings) }\n+        \n+        func transaction(mode: TransactionMode, block: (Connection) throws -> Void) throws { return try connection.transaction(mode, block: block) }\n+        func savepoint(name: String, block: (Connection) throws -> Void) throws { return try connection.savepoint(name, block: block) }\n+\n+        func sync<T>(block: () throws -> T) rethrows -> T { return try connection.sync(block) }\n+        func check(resultCode: Int32, statement: Statement? = nil) throws -> Int32 { return try connection.check(resultCode, statement: statement) }\n+        \n+    }\n+    \n+    \n+    // Acquires a read/write connection to the database\n+    \n+    var writeConnectionInit = dispatch_once_t()\n+    \n+    public var writable : DirectConnection {\n+\n+        dispatch_once(&writeConnectionInit) {\n+        \n+            let flags = SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_WAL | SQLITE_OPEN_NOMUTEX\n+            self.writeConnection = try! DirectConnection(self.location, flags: flags, dispatcher: ReentrantDispatcher(\"SQLite.ConnectionPool.Write\"), vfsName: vfsName)\n+            self.writeConnection.busyTimeout = 2\n+            \n+            for setupProcessor in self.internalSetup.values {\n+                try! setupProcessor(self.writeConnection)\n+            }\n+            \n+            for setupProcessor in self.setup {\n+                try! setupProcessor(self.writeConnection)\n+            }\n+            \n+        }\n+        \n+        return writeConnection\n+    }\n+    \n+    // Acquires a read only connection to the database\n+    public var readable : Connection {\n+        \n+        var borrowed : BorrowedConnection!\n+        \n+        repeat {\n+            \n+            dispatch_sync(lockQueue) {\n+                \n+                // Ensure database is open\n+                self.writable\n+                \n+                let connection : DirectConnection\n+                \n+                if let availableConnection = self.availableReadConnections.popLast() {\n+                    connection = availableConnection\n+                }\n+                else {\n+        \n+                    let flags = SQLITE_OPEN_READONLY | SQLITE_OPEN_WAL | SQLITE_OPEN_NOMUTEX","path":"SQLite/Core/ConnectionPool.swift","position":168,"original_position":168,"commit_id":"b7a0eb1a58936071a6d171036f3e36f75af8f401","original_commit_id":"b7a0eb1a58936071a6d171036f3e36f75af8f401","user":{"login":"nickmshelley","id":419427,"avatar_url":"https://avatars.githubusercontent.com/u/419427?v=3","gravatar_id":"","url":"https://api.github.com/users/nickmshelley","html_url":"https://github.com/nickmshelley","followers_url":"https://api.github.com/users/nickmshelley/followers","following_url":"https://api.github.com/users/nickmshelley/following{/other_user}","gists_url":"https://api.github.com/users/nickmshelley/gists{/gist_id}","starred_url":"https://api.github.com/users/nickmshelley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickmshelley/subscriptions","organizations_url":"https://api.github.com/users/nickmshelley/orgs","repos_url":"https://api.github.com/users/nickmshelley/repos","events_url":"https://api.github.com/users/nickmshelley/events{/privacy}","received_events_url":"https://api.github.com/users/nickmshelley/received_events","type":"User","site_admin":false},"body":"I did this in https://github.com/stephencelis/SQLite.swift/pull/451/commits/960309eb02724ae0f18f721942fb22473bb4b602 and would appreciate any feedback.","created_at":"2016-06-16T21:56:30Z","updated_at":"2016-06-16T21:56:30Z","html_url":"https://github.com/stephencelis/SQLite.swift/pull/411#discussion_r67431693","pull_request_url":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/411","_links":{"self":{"href":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/comments/67431693"},"html":{"href":"https://github.com/stephencelis/SQLite.swift/pull/411#discussion_r67431693"},"pull_request":{"href":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/411"}}},"pull_request":{"url":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/411","id":66731714,"html_url":"https://github.com/stephencelis/SQLite.swift/pull/411","diff_url":"https://github.com/stephencelis/SQLite.swift/pull/411.diff","patch_url":"https://github.com/stephencelis/SQLite.swift/pull/411.patch","issue_url":"https://api.github.com/repos/stephencelis/SQLite.swift/issues/411","number":411,"state":"open","locked":false,"title":"Connection pool","user":{"login":"kdubb","id":787655,"avatar_url":"https://avatars.githubusercontent.com/u/787655?v=3","gravatar_id":"","url":"https://api.github.com/users/kdubb","html_url":"https://github.com/kdubb","followers_url":"https://api.github.com/users/kdubb/followers","following_url":"https://api.github.com/users/kdubb/following{/other_user}","gists_url":"https://api.github.com/users/kdubb/gists{/gist_id}","starred_url":"https://api.github.com/users/kdubb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kdubb/subscriptions","organizations_url":"https://api.github.com/users/kdubb/orgs","repos_url":"https://api.github.com/users/kdubb/repos","events_url":"https://api.github.com/users/kdubb/events{/privacy}","received_events_url":"https://api.github.com/users/kdubb/received_events","type":"User","site_admin":false},"body":"Implement simultaneous multi reader, single write connection pool.  Uses WAL and exclusive VFS mode to achieve concurrency.","created_at":"2016-04-16T08:18:08Z","updated_at":"2016-06-16T21:56:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"48aaca268dfd9aae9bc8dacb5059e1fc00dc9464","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/411/commits","review_comments_url":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/411/comments","review_comment_url":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/comments{/number}","comments_url":"https://api.github.com/repos/stephencelis/SQLite.swift/issues/411/comments","statuses_url":"https://api.github.com/repos/stephencelis/SQLite.swift/statuses/b7a0eb1a58936071a6d171036f3e36f75af8f401","head":{"label":"reTXT:connection_pool","ref":"connection_pool","sha":"b7a0eb1a58936071a6d171036f3e36f75af8f401","user":{"login":"reTXT","id":7282805,"avatar_url":"https://avatars.githubusercontent.com/u/7282805?v=3","gravatar_id":"","url":"https://api.github.com/users/reTXT","html_url":"https://github.com/reTXT","followers_url":"https://api.github.com/users/reTXT/followers","following_url":"https://api.github.com/users/reTXT/following{/other_user}","gists_url":"https://api.github.com/users/reTXT/gists{/gist_id}","starred_url":"https://api.github.com/users/reTXT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/reTXT/subscriptions","organizations_url":"https://api.github.com/users/reTXT/orgs","repos_url":"https://api.github.com/users/reTXT/repos","events_url":"https://api.github.com/users/reTXT/events{/privacy}","received_events_url":"https://api.github.com/users/reTXT/received_events","type":"Organization","site_admin":false},"repo":{"id":47034925,"name":"SQLite.swift","full_name":"reTXT/SQLite.swift","owner":{"login":"reTXT","id":7282805,"avatar_url":"https://avatars.githubusercontent.com/u/7282805?v=3","gravatar_id":"","url":"https://api.github.com/users/reTXT","html_url":"https://github.com/reTXT","followers_url":"https://api.github.com/users/reTXT/followers","following_url":"https://api.github.com/users/reTXT/following{/other_user}","gists_url":"https://api.github.com/users/reTXT/gists{/gist_id}","starred_url":"https://api.github.com/users/reTXT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/reTXT/subscriptions","organizations_url":"https://api.github.com/users/reTXT/orgs","repos_url":"https://api.github.com/users/reTXT/repos","events_url":"https://api.github.com/users/reTXT/events{/privacy}","received_events_url":"https://api.github.com/users/reTXT/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/reTXT/SQLite.swift","description":"A type-safe, Swift-language layer over SQLite3.","fork":true,"url":"https://api.github.com/repos/reTXT/SQLite.swift","forks_url":"https://api.github.com/repos/reTXT/SQLite.swift/forks","keys_url":"https://api.github.com/repos/reTXT/SQLite.swift/keys{/key_id}","collaborators_url":"https://api.github.com/repos/reTXT/SQLite.swift/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/reTXT/SQLite.swift/teams","hooks_url":"https://api.github.com/repos/reTXT/SQLite.swift/hooks","issue_events_url":"https://api.github.com/repos/reTXT/SQLite.swift/issues/events{/number}","events_url":"https://api.github.com/repos/reTXT/SQLite.swift/events","assignees_url":"https://api.github.com/repos/reTXT/SQLite.swift/assignees{/user}","branches_url":"https://api.github.com/repos/reTXT/SQLite.swift/branches{/branch}","tags_url":"https://api.github.com/repos/reTXT/SQLite.swift/tags","blobs_url":"https://api.github.com/repos/reTXT/SQLite.swift/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/reTXT/SQLite.swift/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/reTXT/SQLite.swift/git/refs{/sha}","trees_url":"https://api.github.com/repos/reTXT/SQLite.swift/git/trees{/sha}","statuses_url":"https://api.github.com/repos/reTXT/SQLite.swift/statuses/{sha}","languages_url":"https://api.github.com/repos/reTXT/SQLite.swift/languages","stargazers_url":"https://api.github.com/repos/reTXT/SQLite.swift/stargazers","contributors_url":"https://api.github.com/repos/reTXT/SQLite.swift/contributors","subscribers_url":"https://api.github.com/repos/reTXT/SQLite.swift/subscribers","subscription_url":"https://api.github.com/repos/reTXT/SQLite.swift/subscription","commits_url":"https://api.github.com/repos/reTXT/SQLite.swift/commits{/sha}","git_commits_url":"https://api.github.com/repos/reTXT/SQLite.swift/git/commits{/sha}","comments_url":"https://api.github.com/repos/reTXT/SQLite.swift/comments{/number}","issue_comment_url":"https://api.github.com/repos/reTXT/SQLite.swift/issues/comments{/number}","contents_url":"https://api.github.com/repos/reTXT/SQLite.swift/contents/{+path}","compare_url":"https://api.github.com/repos/reTXT/SQLite.swift/compare/{base}...{head}","merges_url":"https://api.github.com/repos/reTXT/SQLite.swift/merges","archive_url":"https://api.github.com/repos/reTXT/SQLite.swift/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/reTXT/SQLite.swift/downloads","issues_url":"https://api.github.com/repos/reTXT/SQLite.swift/issues{/number}","pulls_url":"https://api.github.com/repos/reTXT/SQLite.swift/pulls{/number}","milestones_url":"https://api.github.com/repos/reTXT/SQLite.swift/milestones{/number}","notifications_url":"https://api.github.com/repos/reTXT/SQLite.swift/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/reTXT/SQLite.swift/labels{/name}","releases_url":"https://api.github.com/repos/reTXT/SQLite.swift/releases{/id}","deployments_url":"https://api.github.com/repos/reTXT/SQLite.swift/deployments","created_at":"2015-11-28T18:26:04Z","updated_at":"2016-04-16T06:49:30Z","pushed_at":"2016-04-19T01:14:19Z","git_url":"git://github.com/reTXT/SQLite.swift.git","ssh_url":"git@github.com:reTXT/SQLite.swift.git","clone_url":"https://github.com/reTXT/SQLite.swift.git","svn_url":"https://github.com/reTXT/SQLite.swift","homepage":"","size":2308,"stargazers_count":0,"watchers_count":0,"language":"Swift","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"stephencelis:master","ref":"master","sha":"ccf43925aacf9fcc6130639247b3e7578a1c727a","user":{"login":"stephencelis","id":658,"avatar_url":"https://avatars.githubusercontent.com/u/658?v=3","gravatar_id":"","url":"https://api.github.com/users/stephencelis","html_url":"https://github.com/stephencelis","followers_url":"https://api.github.com/users/stephencelis/followers","following_url":"https://api.github.com/users/stephencelis/following{/other_user}","gists_url":"https://api.github.com/users/stephencelis/gists{/gist_id}","starred_url":"https://api.github.com/users/stephencelis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stephencelis/subscriptions","organizations_url":"https://api.github.com/users/stephencelis/orgs","repos_url":"https://api.github.com/users/stephencelis/repos","events_url":"https://api.github.com/users/stephencelis/events{/privacy}","received_events_url":"https://api.github.com/users/stephencelis/received_events","type":"User","site_admin":false},"repo":{"id":24797553,"name":"SQLite.swift","full_name":"stephencelis/SQLite.swift","owner":{"login":"stephencelis","id":658,"avatar_url":"https://avatars.githubusercontent.com/u/658?v=3","gravatar_id":"","url":"https://api.github.com/users/stephencelis","html_url":"https://github.com/stephencelis","followers_url":"https://api.github.com/users/stephencelis/followers","following_url":"https://api.github.com/users/stephencelis/following{/other_user}","gists_url":"https://api.github.com/users/stephencelis/gists{/gist_id}","starred_url":"https://api.github.com/users/stephencelis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stephencelis/subscriptions","organizations_url":"https://api.github.com/users/stephencelis/orgs","repos_url":"https://api.github.com/users/stephencelis/repos","events_url":"https://api.github.com/users/stephencelis/events{/privacy}","received_events_url":"https://api.github.com/users/stephencelis/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/stephencelis/SQLite.swift","description":"A type-safe, Swift-language layer over SQLite3.","fork":false,"url":"https://api.github.com/repos/stephencelis/SQLite.swift","forks_url":"https://api.github.com/repos/stephencelis/SQLite.swift/forks","keys_url":"https://api.github.com/repos/stephencelis/SQLite.swift/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stephencelis/SQLite.swift/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stephencelis/SQLite.swift/teams","hooks_url":"https://api.github.com/repos/stephencelis/SQLite.swift/hooks","issue_events_url":"https://api.github.com/repos/stephencelis/SQLite.swift/issues/events{/number}","events_url":"https://api.github.com/repos/stephencelis/SQLite.swift/events","assignees_url":"https://api.github.com/repos/stephencelis/SQLite.swift/assignees{/user}","branches_url":"https://api.github.com/repos/stephencelis/SQLite.swift/branches{/branch}","tags_url":"https://api.github.com/repos/stephencelis/SQLite.swift/tags","blobs_url":"https://api.github.com/repos/stephencelis/SQLite.swift/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stephencelis/SQLite.swift/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stephencelis/SQLite.swift/git/refs{/sha}","trees_url":"https://api.github.com/repos/stephencelis/SQLite.swift/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stephencelis/SQLite.swift/statuses/{sha}","languages_url":"https://api.github.com/repos/stephencelis/SQLite.swift/languages","stargazers_url":"https://api.github.com/repos/stephencelis/SQLite.swift/stargazers","contributors_url":"https://api.github.com/repos/stephencelis/SQLite.swift/contributors","subscribers_url":"https://api.github.com/repos/stephencelis/SQLite.swift/subscribers","subscription_url":"https://api.github.com/repos/stephencelis/SQLite.swift/subscription","commits_url":"https://api.github.com/repos/stephencelis/SQLite.swift/commits{/sha}","git_commits_url":"https://api.github.com/repos/stephencelis/SQLite.swift/git/commits{/sha}","comments_url":"https://api.github.com/repos/stephencelis/SQLite.swift/comments{/number}","issue_comment_url":"https://api.github.com/repos/stephencelis/SQLite.swift/issues/comments{/number}","contents_url":"https://api.github.com/repos/stephencelis/SQLite.swift/contents/{+path}","compare_url":"https://api.github.com/repos/stephencelis/SQLite.swift/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stephencelis/SQLite.swift/merges","archive_url":"https://api.github.com/repos/stephencelis/SQLite.swift/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stephencelis/SQLite.swift/downloads","issues_url":"https://api.github.com/repos/stephencelis/SQLite.swift/issues{/number}","pulls_url":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls{/number}","milestones_url":"https://api.github.com/repos/stephencelis/SQLite.swift/milestones{/number}","notifications_url":"https://api.github.com/repos/stephencelis/SQLite.swift/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stephencelis/SQLite.swift/labels{/name}","releases_url":"https://api.github.com/repos/stephencelis/SQLite.swift/releases{/id}","deployments_url":"https://api.github.com/repos/stephencelis/SQLite.swift/deployments","created_at":"2014-10-04T18:23:46Z","updated_at":"2016-06-16T16:43:06Z","pushed_at":"2016-06-16T21:51:30Z","git_url":"git://github.com/stephencelis/SQLite.swift.git","ssh_url":"git@github.com:stephencelis/SQLite.swift.git","clone_url":"https://github.com/stephencelis/SQLite.swift.git","svn_url":"https://github.com/stephencelis/SQLite.swift","homepage":"","size":5048,"stargazers_count":2996,"watchers_count":2996,"language":"Swift","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":515,"mirror_url":null,"open_issues_count":84,"forks":515,"open_issues":84,"watchers":2996,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/411"},"html":{"href":"https://github.com/stephencelis/SQLite.swift/pull/411"},"issue":{"href":"https://api.github.com/repos/stephencelis/SQLite.swift/issues/411"},"comments":{"href":"https://api.github.com/repos/stephencelis/SQLite.swift/issues/411/comments"},"review_comments":{"href":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/411/comments"},"review_comment":{"href":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/stephencelis/SQLite.swift/pulls/411/commits"},"statuses":{"href":"https://api.github.com/repos/stephencelis/SQLite.swift/statuses/b7a0eb1a58936071a6d171036f3e36f75af8f401"}}}}
{"actor":{"display_login":"nickmshelley"}}