Comments (9)
See this commit: 7fa9a57
SQLite column names can, unfortunately, collide, so I removed the values
property on Statement
to keep bugs from sneaking in (during something as common as a JOIN
). Ideally, you use the typed query builder instead of raw SQL, which namespaces column names automatically, but you could add the behavior you relied on back using an extension:
extension Statement {
/// :returns: A dictionary of column name to row value.
public var values: [String: Binding?]? {
if let row = row {
var values = [String: Binding?]()
for idx in 0..<row.count { values[columnNames[idx]] = row[idx] }
return values
}
return nil
}
}
Is there any reason you're running raw SQL directly and not using Expression
and Query
objects?
from sqlite.swift.
Answer to your last question: It was the quickest route to get our up going, and many copy/pastes later we ended up with it all over the place.
Seems like the extension has an issue with columnNames, since it's internal to the class? I get "use of unresolved identifier" when using the extension. The code works fine if added to the Statement class directly.
from sqlite.swift.
@minorbug Ah, you know what, I can see the value in making Statement.columnNames
public. I'll try to get a commit in soon. In the meantime, feel free to mark it public
in your extension.
from sqlite.swift.
Reopening to track making Statement.columnNames
public.
from sqlite.swift.
@minorbug One last question, when you say "we ended up with it all over the place" are you referring to raw SQL? Or Expression structures? You should be able to manage your Expression structures in one place. That organizational detail is up to you, but here's an example:
struct User {
static let id = Expression<Int>("id")
static let email = Expression<String>("email")
// etc.
static var all: Query { /* return db["users"] */ }
}
// In practice:
let user = User.all.filter(User.id == 1).first!
// SELECT * FROM users WHERE id = 1 LIMIT 1
user[id] // 1
user[email] // "local@domain"
from sqlite.swift.
It's being used to port over an in-house Android app, which used raw sql, and for maintenance simplicity it was decided to make both versions look as close to each other as possible. We're not using any Expression structures right now, though I will use them in our the future Swift projects.
from sqlite.swift.
Thanks for the clarification! Good luck on your port 👍
from sqlite.swift.
raw SQL +1
from sqlite.swift.
Closed by c762538
from sqlite.swift.
Related Issues (20)
- Integrate SQLite code directly into project - Did a few renames - one last issue not sure what is causing it. - Help HOT 1
- SqlCipher support for Swift PM, Here's a solution
- Feature: Request visionOS Support HOT 2
- Windows support HOT 3
- can not get column info with join
- Subscrip to changes
- Problem with CSQLite HOT 1
- bug in optional support for decoding HOT 1
- Version 0.15.0 Not Applied in CocoaPods HOT 10
- Swift Compiler Error when project depend SQLite.swift and sqlite3_flutter_libs HOT 1
- ncorrect checksum for freed object HOT 1
- Double quotes when using ULID HOT 1
- Unable to decode optional custom type HOT 2
- Sqllite
- Symbol not found: _$s6SQLite10ConnectionC15TransactionModeO8deferredyA2EmFWC
- Error: use of @import in framework header is discouraged, requires -fmodules
- SQLite.swift and SQLCipher HOT 1
- SQLiteCipher and visionOS support
- New SQL Coders HOT 1
- PrivacyInfo.xcprivacy HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sqlite.swift.