Live data from Hacker News

Show HN: SwiftData – A SQLite library in Swift

github.com

11–19 of 19 posts

Re: Show HN: SwiftData – A SQLite library in Swift

#11
post #2

This is super slick. SQLite is so elegant, and this should stop people from reinventing the wheel over and over again.

I hope somebody reinvents this library.

I know it's hard to release something to the public, and easy to throw stones. But I'm going to do it anyway. I just don't see the “elegance” in this library and I see several problems with this library that make it unsuitable for production use. Examples:

This library provides access to a singleton database. Did you want to choose the location of your database? Sorry, it's going to be “SwiftData.sqlite” in your app's Documents folder (if sandbox) or the user's “Documents” folder (if not sandboxed). Did you want to use a SQLite3 database as your document storage format, and let the user have multiple documents open simultaneously? Sorry, not with this library.

This library doesn't use prepared statements. When you give it SQL with bind placeholders and substitution values, it creates a new string that embeds the values. Does your SQL statement have a string literal containing a `?`? Sorry, this library will treat it as a bind placeholder anyway. (Example: the ? here is not a placeholder: insert into x values ('?')) Did you want to use less error-prone named placeholders, which SQLite3 supports natively? Sorry, not with this library.

This library loads the entire result set of a query into an array and returns it to you. Did you want to reduce your memory footprint? Sorry, not with this library.

The library source code is full of copy-pasted code that should be unified.

Every enumeration case in the standard library (c.f. Bit, Character, FloatingPointClassification, ImplicitlyUnwrappedOptional, MirrorDisposition, Optional, QuickLookObject, UnicodeDecodingResult) starts with a capital letter. This library's enumeration cases (c.f. DataType, Flags) start with lower case letters.

Re: Show HN: SwiftData – A SQLite library in Swift

#13
post #5

Hello, Is there already a built-in package manager in Swift? Maybe CocoaPods will have support for Swift but, as a completely new environnement, I'm hoping that Apple will add a dependency manager for Swift.

With both iOS & OSX now supporting frameworks, CocoaPods has the potential of becoming much more elegant. See progress on this here: https://github.com/CocoaPods/CocoaPods/pull/2222

Re: Show HN: SwiftData – A SQLite library in Swift

#14
Have you guys seen YapDatabase [1]? It is an awesome Obj-C key/value/collection store (and more) built on top of SQLite, that I originally started using instead of Core Data for its easy SQLCipher support. It's built by the venerable Robbie Hanson [2] who is well known for his previous work: CocoaAsyncSocket, XMPPFramework, CocoaLumberjack, and CocoaHTTPServer.

If you're tired of Core Data, I highly recommend reading the wiki [3] and giving it a shot!

1. https://github.com/yaptv/YapDatabase 2. https://github.com/robbiehanson 3. https://github.com/yaptv/YapDatabase/wiki

Re: Show HN: SwiftData – A SQLite library in Swift

#16
post #9

What's the advantage of using something like this over CoreData - which is built in?

CoreData actually has the option of using SQLite as the underlying datastore. The other alternative is a proprietary binary store. I think there is also an XML store. CoreData is an abstraction level higher than SQLite. It's similar to an ORM or graph database where it manages the relationships between objects for you. So if you don't need all the features of CoreData, SQLite is lighter and simpler.

SQLite is the default storage engine for CoreData.

Re: Show HN: SwiftData – A SQLite library in Swift

#17

Have you guys seen YapDatabase [1]? It is an awesome Obj-C key/value/collection store (and more) built on top of SQLite, that I originally started using instead of Core Data for its easy SQLCipher support. It's built by the venerable Robbie Hanson [2] who is well known for his previous work: CocoaAsyncSocket, XMPPFramework, CocoaLumberjack, and CocoaHTTPServer. If you're tired of Core Data, I highly recommend reading…

I have a friend who uses it in production. He swears by and has tried to convert me. I'm still sticking to CoreData with some categories for syntax sugar, but I've been closely monitoring realm.io for the last couple of days...
Post reply on HN