DatabaseAPITests.swift 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678
  1. //
  2. // Copyright 2021 Google LLC
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. //
  16. // MARK: This file is used to evaluate the experience of using the Firebase Database APIs in Swift.
  17. import Foundation
  18. import FirebaseCore
  19. import FirebaseDatabase
  20. final class DatabaseAPITests {
  21. func usage() {
  22. // MARK: - Database
  23. var url = "url"
  24. let path = "path"
  25. let host = "host"
  26. let port = 0
  27. let yes = true
  28. // Retrieve Database Instance
  29. var database: Database = Database.database()
  30. database = Database.database(url: url)
  31. if let app = FirebaseApp.app() {
  32. database = Database.database(app: app, url: url)
  33. database = Database.database(app: app)
  34. }
  35. // Retrieve FirebaseApp
  36. let /* app */ _: FirebaseApp? = database.app
  37. // Retrieve DatabaseReference
  38. var databaseReference: DatabaseReference = database.reference()
  39. databaseReference = database.reference(withPath: path)
  40. databaseReference = database.reference(fromURL: url)
  41. // Instance methods
  42. database.purgeOutstandingWrites()
  43. database.goOffline()
  44. database.goOnline()
  45. database.useEmulator(withHost: host, port: port)
  46. // Instance members
  47. let /* isPersistenceEnabled */ _: Bool = database.isPersistenceEnabled
  48. let /* persistenceCacheSizeBytes */ _: UInt = database.persistenceCacheSizeBytes
  49. let /* callbackQueue */ _: DispatchQueue = database.callbackQueue
  50. // Class methods
  51. Database.setLoggingEnabled(yes)
  52. let /* sdkVersion */ _: String = Database.sdkVersion()
  53. // MARK: - DatabaseQuery
  54. let uint: UInt = 0
  55. let dataEventType: DataEventType = .value
  56. let child = "child"
  57. let childKey: String? = "key"
  58. let value: Any? = "value"
  59. let priority: Any? = "priority"
  60. var databaseHandle: DatabaseHandle = uint
  61. var databaseQuery: DatabaseQuery = DatabaseQuery()
  62. // Observe for data
  63. // observe(_ eventType:with block:)
  64. databaseHandle = databaseQuery.observe(dataEventType) { dataSnapshot in
  65. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  66. }
  67. // observe(_ eventType:andPreviousSiblingKeyWith block:)
  68. databaseHandle = databaseQuery.observe(dataEventType) { dataSnapshot, optionalString in
  69. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  70. let /* optionalString */ _: String? = optionalString
  71. }
  72. // observe(_ eventType:with block:withCancel cancelBlock:)
  73. databaseHandle = databaseQuery.observe(dataEventType) { dataSnapshot in
  74. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  75. } withCancel: { error in
  76. let /* error */ _: Error = error
  77. }
  78. // observe(_ eventType:andPreviousSiblingKeyWith block:withCancel cancelBlock:)
  79. databaseHandle = databaseQuery.observe(dataEventType) { dataSnapshot, optionalString in
  80. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  81. let /* optionalString */ _: String? = optionalString
  82. } withCancel: { error in
  83. let /* error */ _: Error = error
  84. }
  85. // Get data
  86. // getData(completion block:)
  87. databaseQuery.getData { optionalError, dataSnapshot in
  88. let /* optionalError */ _: Error? = optionalError
  89. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  90. }
  91. #if compiler(>=5.5) && canImport(_Concurrency)
  92. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  93. // async/await is a Swift 5.5+ feature available on iOS 15+
  94. Task {
  95. do {
  96. let /* dataSnapshot */ _: DataSnapshot = try await DatabaseQuery().getData()
  97. } catch {
  98. // ...
  99. }
  100. }
  101. }
  102. #endif // swift(>=5.5)
  103. // Observe Single Event
  104. // observeSingleEvent(of eventType:with block:)
  105. databaseQuery.observeSingleEvent(of: dataEventType) { dataSnapshot in
  106. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  107. }
  108. // observeSingleEvent(of eventType:andPreviousSiblingKeyWith block:)
  109. databaseQuery.observeSingleEvent(of: dataEventType) { dataSnapshot, optionalString in
  110. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  111. let /* optionalString */ _: String? = optionalString
  112. }
  113. #if compiler(>=5.5) && canImport(_Concurrency)
  114. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  115. // async/await is a Swift 5.5+ feature available on iOS 15+
  116. Task {
  117. // observeSingleEvent(of eventType:)
  118. let _: (DataSnapshot, String?) = await DatabaseQuery()
  119. .observeSingleEventAndPreviousSiblingKey(of: dataEventType)
  120. }
  121. }
  122. #endif // swift(>=5.5)
  123. // observeSingleEvent(of eventType:with block:withCancel cancelBlock:)
  124. databaseQuery.observeSingleEvent(of: dataEventType) { dataSnapshot in
  125. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  126. } withCancel: { error in
  127. let /* error */ _: Error = error
  128. }
  129. // observeSingleEvent(of eventType:andPreviousSiblingKeyWith block:withCancel cancelBlock:)
  130. databaseQuery.observeSingleEvent(of: dataEventType) { dataSnapshot, optionalString in
  131. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  132. let /* optionalString */ _: String? = optionalString
  133. } withCancel: { error in
  134. let /* error */ _: Error = error
  135. }
  136. // Remove Observers
  137. databaseQuery.removeObserver(withHandle: databaseHandle)
  138. databaseQuery.removeAllObservers()
  139. // Keep Synced
  140. databaseQuery.keepSynced(yes)
  141. // Limited Views of Data
  142. databaseQuery = databaseQuery.queryLimited(toFirst: databaseHandle)
  143. databaseQuery = databaseQuery.queryLimited(toLast: databaseHandle)
  144. databaseQuery = databaseQuery.queryOrdered(byChild: child)
  145. databaseQuery = databaseQuery.queryOrderedByKey()
  146. databaseQuery = databaseQuery.queryOrderedByValue()
  147. databaseQuery = databaseQuery.queryOrderedByPriority()
  148. databaseQuery = databaseQuery.queryStarting(atValue: value)
  149. databaseQuery = databaseQuery.queryStarting(atValue: value, childKey: childKey)
  150. databaseQuery = databaseQuery.queryStarting(afterValue: value)
  151. databaseQuery = databaseQuery.queryStarting(afterValue: value, childKey: childKey)
  152. databaseQuery = databaseQuery.queryEnding(atValue: value)
  153. databaseQuery = databaseQuery.queryEnding(beforeValue: value)
  154. databaseQuery = databaseQuery.queryEnding(beforeValue: value, childKey: childKey)
  155. databaseQuery = databaseQuery.queryEqual(toValue: value)
  156. databaseQuery = databaseQuery.queryEqual(toValue: value, childKey: childKey)
  157. // Retrieve DatabaseReference Instance
  158. databaseReference = databaseQuery.ref
  159. // MARK: - DatabaseReference
  160. let priorityAny: Any = "priority"
  161. let values = [AnyHashable: Any]()
  162. var transactionResult = TransactionResult()
  163. // Retreive Child DatabaseReference
  164. databaseReference = databaseReference.child(child)
  165. databaseReference = databaseReference.childByAutoId()
  166. // Set value
  167. databaseReference.setValue(value)
  168. // setValue(_ value:withCompletionBlock block:)
  169. databaseReference.setValue(value) { optionalError, databaseReference in
  170. let /* optionalError */ _: Error? = optionalError
  171. let /* databaseReference */ _: DatabaseReference = databaseReference
  172. }
  173. #if compiler(>=5.5) && canImport(_Concurrency)
  174. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  175. // async/await is a Swift 5.5+ feature available on iOS 15+
  176. Task {
  177. do {
  178. // setValue(_ value:)
  179. let /* ref */ _: DatabaseReference = try await DatabaseReference().setValue(value)
  180. } catch {
  181. // ...
  182. }
  183. }
  184. }
  185. #endif // swift(>=5.5)
  186. databaseReference.setValue(value, andPriority: priority)
  187. // setValue(_ value:andPriority priority:withCompletionBlock block:)
  188. databaseReference.setValue(value, andPriority: priority) { optionalError, databaseReference in
  189. let /* optionalError */ _: Error? = optionalError
  190. let /* databaseReference */ _: DatabaseReference = databaseReference
  191. }
  192. #if compiler(>=5.5) && canImport(_Concurrency)
  193. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  194. // async/await is a Swift 5.5+ feature available on iOS 15+
  195. Task {
  196. do {
  197. // setValue(_ value:andPriority priority:)
  198. let /* ref */ _: DatabaseReference = try await DatabaseReference()
  199. .setValue(value, andPriority: priority)
  200. } catch {
  201. // ...
  202. }
  203. }
  204. }
  205. #endif // swift(>=5.5)
  206. // Remove value
  207. databaseReference.removeValue()
  208. // removeValue(completionBlock block:)
  209. databaseReference.removeValue { optionalError, databaseReference in
  210. let /* optionalError */ _: Error? = optionalError
  211. let /* databaseReference */ _: DatabaseReference = databaseReference
  212. }
  213. #if compiler(>=5.5) && canImport(_Concurrency)
  214. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  215. // async/await is a Swift 5.5+ feature available on iOS 15+
  216. Task {
  217. do {
  218. let /* ref */ _: DatabaseReference = try await DatabaseReference().removeValue()
  219. } catch {
  220. // ...
  221. }
  222. }
  223. }
  224. #endif // swift(>=5.5)
  225. // Set priority
  226. databaseReference.setPriority(priority)
  227. // setPriority(_ priority:withCompletionBlock block:)
  228. databaseReference.setPriority(priority) { optionalError, databaseReference in
  229. let /* optionalError */ _: Error? = optionalError
  230. let /* databaseReference */ _: DatabaseReference = databaseReference
  231. }
  232. #if compiler(>=5.5) && canImport(_Concurrency)
  233. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  234. // async/await is a Swift 5.5+ feature available on iOS 15+
  235. Task {
  236. do {
  237. // setPriority(_ priority:)
  238. let /* ref */ _: DatabaseReference = try await DatabaseReference().setPriority(priority)
  239. } catch {
  240. // ...
  241. }
  242. }
  243. }
  244. #endif // swift(>=5.5)
  245. // Update child values
  246. databaseReference.updateChildValues(values)
  247. // updateChildValues(_ values:withCompletionBlock block:)
  248. databaseReference.updateChildValues(values) { optionalError, databaseReference in
  249. let /* optionalError */ _: Error? = optionalError
  250. let /* databaseReference */ _: DatabaseReference = databaseReference
  251. }
  252. #if compiler(>=5.5) && canImport(_Concurrency)
  253. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  254. // async/await is a Swift 5.5+ feature available on iOS 15+
  255. Task {
  256. do {
  257. // updateChildValues(_ values:)
  258. let /* ref */ _: DatabaseReference = try await DatabaseReference()
  259. .updateChildValues(values)
  260. } catch {
  261. // ...
  262. }
  263. }
  264. }
  265. #endif // swift(>=5.5)
  266. // Observe for data
  267. // observe(_ eventType:with block:)
  268. databaseHandle = databaseReference.observe(dataEventType) { dataSnapshot in
  269. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  270. }
  271. // observe(_ eventType:andPreviousSiblingKeyWith block:)
  272. databaseHandle = databaseReference.observe(dataEventType) { dataSnapshot, optionalString in
  273. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  274. let /* optionalString */ _: String? = optionalString
  275. }
  276. // observe(_ eventType:with block:withCancel cancelBlock:)
  277. databaseHandle = databaseReference.observe(dataEventType) { dataSnapshot in
  278. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  279. } withCancel: { error in
  280. let /* error */ _: Error = error
  281. }
  282. // observe(_ eventType:andPreviousSiblingKeyWith block:withCancel cancelBlock:)
  283. databaseHandle = databaseReference.observe(dataEventType) { dataSnapshot, optionalString in
  284. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  285. let /* optionalString */ _: String? = optionalString
  286. } withCancel: { error in
  287. let /* error */ _: Error = error
  288. }
  289. // Observe Single Event
  290. // observeSingleEvent(of eventType:with block:)
  291. databaseReference.observeSingleEvent(of: dataEventType) { dataSnapshot in
  292. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  293. }
  294. // observeSingleEvent(of eventType:andPreviousSiblingKeyWith block:)
  295. databaseReference.observeSingleEvent(of: dataEventType) { dataSnapshot, optionalString in
  296. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  297. let /* optionalString */ _: String? = optionalString
  298. }
  299. #if compiler(>=5.5) && canImport(_Concurrency)
  300. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  301. // async/await is a Swift 5.5+ feature available on iOS 15+
  302. Task {
  303. // observeSingleEvent(of eventType:)
  304. let _: (DataSnapshot, String?) = await DatabaseReference()
  305. .observeSingleEventAndPreviousSiblingKey(of: dataEventType)
  306. }
  307. }
  308. #endif // swift(>=5.5)
  309. // observeSingleEvent(of eventType:with block:withCancel cancelBlock:)
  310. databaseReference.observeSingleEvent(of: dataEventType) { dataSnapshot in
  311. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  312. } withCancel: { error in
  313. let /* error */ _: Error = error
  314. }
  315. // observeSingleEvent(of eventType:andPreviousSiblingKeyWith block:withCancel cancelBlock:)
  316. databaseReference.observeSingleEvent(of: dataEventType) { dataSnapshot, optionalString in
  317. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  318. let /* optionalString */ _: String? = optionalString
  319. } withCancel: { error in
  320. let /* error */ _: Error = error
  321. }
  322. // Get data
  323. // getData(completion block:)
  324. databaseReference.getData { optionalError, dataSnapshot in
  325. let /* optionalError */ _: Error? = optionalError
  326. let /* dataSnapshot */ _: DataSnapshot = dataSnapshot
  327. }
  328. #if compiler(>=5.5) && canImport(_Concurrency)
  329. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  330. // async/await is a Swift 5.5+ feature available on iOS 15+
  331. Task {
  332. do {
  333. let /* dataSnapshot */ _: DataSnapshot = try await DatabaseReference().getData()
  334. } catch {
  335. // ...
  336. }
  337. }
  338. }
  339. #endif // swift(>=5.5)
  340. // Remove Observers
  341. databaseReference.removeObserver(withHandle: databaseHandle)
  342. databaseReference.removeAllObservers()
  343. // Keep Synced
  344. databaseReference.keepSynced(yes)
  345. // Limited Views of Data
  346. databaseQuery = databaseReference.queryLimited(toFirst: databaseHandle)
  347. databaseQuery = databaseReference.queryLimited(toLast: databaseHandle)
  348. databaseQuery = databaseReference.queryOrdered(byChild: child)
  349. databaseQuery = databaseReference.queryOrderedByKey()
  350. databaseQuery = databaseReference.queryOrderedByPriority()
  351. databaseQuery = databaseReference.queryStarting(atValue: value)
  352. databaseQuery = databaseReference.queryStarting(atValue: value, childKey: childKey)
  353. databaseQuery = databaseReference.queryStarting(afterValue: value)
  354. databaseQuery = databaseReference.queryStarting(afterValue: value, childKey: childKey)
  355. databaseQuery = databaseReference.queryEnding(atValue: value)
  356. databaseQuery = databaseReference.queryEnding(atValue: value, childKey: childKey)
  357. databaseQuery = databaseReference.queryEqual(toValue: value)
  358. databaseQuery = databaseReference.queryEqual(toValue: value, childKey: childKey)
  359. // onDisconnectSetValue
  360. databaseReference.onDisconnectSetValue(value)
  361. // onDisconnectSetValue(_ value:withCompletionBlock block:)
  362. databaseReference.onDisconnectSetValue(value) { optionalError, databaseReference in
  363. let /* optionalError */ _: Error? = optionalError
  364. let /* databaseReference */ _: DatabaseReference = databaseReference
  365. }
  366. #if compiler(>=5.5) && canImport(_Concurrency)
  367. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  368. // async/await is a Swift 5.5+ feature available on iOS 15+
  369. Task {
  370. do {
  371. // onDisconnectSetValue(_ value:)
  372. let /* ref */ _: DatabaseReference = try await DatabaseReference()
  373. .onDisconnectSetValue(value)
  374. } catch {
  375. // ...
  376. }
  377. }
  378. }
  379. #endif // swift(>=5.5)
  380. databaseReference.onDisconnectSetValue(value, andPriority: priorityAny)
  381. // onDisconnectSetValue(_ value:andPriority priority:withCompletionBlock block:)
  382. databaseReference
  383. .onDisconnectSetValue(value, andPriority: priority) { optionalError, databaseReference in
  384. let /* optionalError */ _: Error? = optionalError
  385. let /* databaseReference */ _: DatabaseReference = databaseReference
  386. }
  387. #if compiler(>=5.5) && canImport(_Concurrency)
  388. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  389. // async/await is a Swift 5.5+ feature available on iOS 15+
  390. Task {
  391. do {
  392. // onDisconnectSetValue(_ value:andPriority priority:)
  393. let /* ref */ _: DatabaseReference = try await DatabaseReference().onDisconnectSetValue(
  394. value,
  395. andPriority: priority
  396. )
  397. } catch {
  398. // ...
  399. }
  400. }
  401. }
  402. #endif // swift(>=5.5)
  403. // onDisconnectRemoveValue
  404. databaseReference.onDisconnectRemoveValue()
  405. // onDisconnectRemoveValue(completionBlock block:)
  406. databaseReference.onDisconnectRemoveValue { optionalError, databaseReference in
  407. let /* optionalError */ _: Error? = optionalError
  408. let /* databaseReference */ _: DatabaseReference = databaseReference
  409. }
  410. #if compiler(>=5.5) && canImport(_Concurrency)
  411. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  412. // async/await is a Swift 5.5+ feature available on iOS 15+
  413. Task {
  414. do {
  415. let /* ref */ _: DatabaseReference = try await DatabaseReference()
  416. .onDisconnectRemoveValue()
  417. } catch {
  418. // ...
  419. }
  420. }
  421. }
  422. #endif // swift(>=5.5)
  423. // onDisconnectUpdateChildValues
  424. databaseReference.onDisconnectUpdateChildValues(values)
  425. // onDisconnectUpdateChildValues(_ values:withCompletionBlock block:)
  426. databaseReference.onDisconnectUpdateChildValues(values) { optionalError, databaseReference in
  427. let /* optionalError */ _: Error? = optionalError
  428. let /* databaseReference */ _: DatabaseReference = databaseReference
  429. }
  430. #if compiler(>=5.5) && canImport(_Concurrency)
  431. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  432. // async/await is a Swift 5.5+ feature available on iOS 15+
  433. Task {
  434. do {
  435. // onDisconnectUpdateChildValues(_ values:)
  436. let /* ref */ _: DatabaseReference = try await DatabaseReference()
  437. .onDisconnectUpdateChildValues(values)
  438. } catch {
  439. // ...
  440. }
  441. }
  442. }
  443. #endif // swift(>=5.5)
  444. // cancelDisconnectOperations
  445. databaseReference.cancelDisconnectOperations()
  446. // cancelDisconnectOperations(completionBlock block:)
  447. databaseReference.cancelDisconnectOperations { optionalError, databaseReference in
  448. let /* optionalError */ _: Error? = optionalError
  449. let /* databaseReference */ _: DatabaseReference = databaseReference
  450. }
  451. #if compiler(>=5.5) && canImport(_Concurrency)
  452. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  453. // async/await is a Swift 5.5+ feature available on iOS 15+
  454. Task {
  455. do {
  456. let /* ref */ _: DatabaseReference = try await DatabaseReference()
  457. .cancelDisconnectOperations()
  458. } catch {
  459. // ...
  460. }
  461. }
  462. }
  463. #endif // swift(>=5.5)
  464. // runTransactionBlock
  465. // runTransactionBlock(_ block:)
  466. databaseReference.runTransactionBlock { mutableData in
  467. let /* mutableData */ _: MutableData = mutableData
  468. return transactionResult
  469. }
  470. // runTransactionBlock(_ block:andCompletionBlock completionBlock:)
  471. databaseReference.runTransactionBlock { mutableData in
  472. let /* mutableData */ _: MutableData = mutableData
  473. return transactionResult
  474. } andCompletionBlock: { optionalError, bool, optionalDataSnapshot in
  475. let /* optionalError */ _: Error? = optionalError
  476. let /* bool */ _: Bool = bool
  477. let /* optionalDataSnapshot */ _: DataSnapshot? = optionalDataSnapshot
  478. }
  479. #if compiler(>=5.5) && canImport(_Concurrency)
  480. if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, *) {
  481. // async/await is a Swift 5.5+ feature available on iOS 15+
  482. Task {
  483. do {
  484. // runTransactionBlock(_ block:)
  485. let _: (Bool, DataSnapshot) = try await DatabaseReference()
  486. .runTransactionBlock { mutableData in
  487. let /* mutableData */ _: MutableData = mutableData
  488. return TransactionResult()
  489. }
  490. } catch {
  491. // ...
  492. }
  493. }
  494. }
  495. #endif // swift(>=5.5)
  496. // runTransactionBlock(_ block:andCompletionBlock completionBlock:withLocalEvents localEvents:)
  497. databaseReference.runTransactionBlock({ mutableData in
  498. let /* mutableData */ _: MutableData = mutableData
  499. return transactionResult
  500. }, andCompletionBlock: { optionalError, bool, optionalDataSnapshot in
  501. let /* optionalError */ _: Error? = optionalError
  502. let /* bool */ _: Bool = bool
  503. let /* optionalDataSnapshot */ _: DataSnapshot? = optionalDataSnapshot
  504. }, withLocalEvents: yes)
  505. // description
  506. let /* description */ _: String = databaseReference.description()
  507. // Class methods
  508. DatabaseReference.goOffline()
  509. DatabaseReference.goOnline()
  510. // Instance properties
  511. let /* parent */ _: DatabaseReference? = databaseReference.parent
  512. let /* childKey */ _: String? = databaseReference.key
  513. databaseReference = databaseReference.root
  514. url = databaseReference.url
  515. database = databaseReference.database
  516. // MARK: - DataEventType
  517. let optionalDataEventType = DataEventType(rawValue: 0)
  518. switch optionalDataEventType {
  519. case .childAdded:
  520. break
  521. case .childRemoved:
  522. break
  523. case .childChanged:
  524. break
  525. case .childMoved:
  526. break
  527. case .value:
  528. break
  529. case .none, .some:
  530. break
  531. }
  532. // MARK: - DataSnapshot
  533. var dataSnapshot = DataSnapshot()
  534. // Navigating and inspecting a snapshot
  535. dataSnapshot = dataSnapshot.childSnapshot(forPath: path)
  536. let /* hasChild */ _: Bool = dataSnapshot.hasChild(child)
  537. let /* hasChildren */ _: Bool = dataSnapshot.hasChildren()
  538. let /* exists */ _: Bool = dataSnapshot.exists()
  539. // Data export
  540. let /* value */ _: Any? = dataSnapshot.valueInExportFormat()
  541. // Properties
  542. databaseReference = dataSnapshot.ref
  543. let /* value */ _: Any? = dataSnapshot.value
  544. let /* uint */ _: UInt = dataSnapshot.childrenCount
  545. let /* child */ _: String? = dataSnapshot.key
  546. let /* children */ _: NSEnumerator = dataSnapshot.children
  547. let /* priority */ _: Any? = dataSnapshot.priority
  548. // MARK: - MutableData
  549. var mutableData = MutableData()
  550. // Inspecting and navigating the data
  551. let /* hasChildren */ _: Bool = mutableData.hasChildren()
  552. let /* hasChild */ _: Bool = mutableData.hasChild(atPath: path)
  553. mutableData = mutableData.childData(byAppendingPath: path)
  554. // Properties
  555. let /* value */ _: Any? = mutableData.value
  556. let /* priority */ _: Any? = mutableData.priority
  557. let /* uint */ _: UInt = mutableData.childrenCount
  558. let /* children */ _: NSEnumerator = mutableData.children
  559. let /* childKey */ _: String? = mutableData.key
  560. // MARK: - ServerValue
  561. let nsNumber: NSNumber = 0
  562. let /* values */ _: [AnyHashable: Any] = ServerValue.timestamp()
  563. let /* values */ _: [AnyHashable: Any] = ServerValue.increment(nsNumber)
  564. // MARK: - TransactionResult
  565. transactionResult = TransactionResult.success(withValue: mutableData)
  566. transactionResult = TransactionResult.abort()
  567. }
  568. }