Restructure

Restructure is a rewrite of my previous SQLite Swift library, Structure. The framework works on Swift 5 for iOS, macOS, and tvOS. It’s highly opinionated, because it does exactly what I wanted it to do, while also staying true to how SQLite behaves.

Restructure has the following features:

  • Easy type conversion for common Swift data types.
  • Simple handling of more complex data types, like arrays and dates.
  • Statements are Sequences, making data iteration a part of the language.
  • Statements are Encodable, making data structure transformation to SQLite statement simple.
  • Rows are Decodable, making SQLite results easily transformable to data structures.

Check out the code on GitHub. There you will find examples, tests, and installation instructions.

Version History

2.1.2 - 2023-09-07

Fixed

  • Closing a file-backed database no longer deletes the underlying file.
  • In WAL journal mode, closing the database causes a WAL checkpoint.

2.1.1 - 2023-09-07

Fixed

  • Storing a Statement no longer causes a crash when cleaning up.
  • The UPPER function properly handles memory management of strings.

2.1.0 – 2020-08-16

Added

  • sqliteVersion fetches the underlying SQLite version string.
  • Dynamic member lookup is enabled for Row, allowing for direct access to values via property notation.

Removed

  • JournalMode.off has been removed because of defensive configs.

2.0.0 – 2019-09-12

Added

  • AutoVacuum dictates the automatic vacuuming mode.
  • JournalMode dictates the journaling mode used by the database.
  • SecureDelete dictates the data deletion mode.
  • incrementalVacuum can be used with AutoVacuum.incremental to affect vacuuming.
  • vacuum causes a full database vacuum to occur.

Changed

  • Restructure is now a SwiftPM project. All legacy build tools have been removed.
  • The Restructure constructor takes a defaulted parameter for a journal mode.

1.0.0 – 2019-06-20

Added

  • Created the primary Restructure object for maintaining SQLite databases.
  • Created the Statement object for working with prepared SQLite statements.
  • Created the Row object for working with resultant rows from a Statement.
  • Created the RowDecoder and StatementEncoder for using Swift’s Decodable protocols.