Git Product home page Git Product logo

Comments (9)

stephencelis avatar stephencelis commented on June 18, 2024

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.

minorbug avatar minorbug commented on June 18, 2024

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.

stephencelis avatar stephencelis commented on June 18, 2024

@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.

stephencelis avatar stephencelis commented on June 18, 2024

Reopening to track making Statement.columnNames public.

from sqlite.swift.

stephencelis avatar stephencelis commented on June 18, 2024

@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.

minorbug avatar minorbug commented on June 18, 2024

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.

stephencelis avatar stephencelis commented on June 18, 2024

Thanks for the clarification! Good luck on your port 👍

from sqlite.swift.

ipeisong avatar ipeisong commented on June 18, 2024

raw SQL +1

from sqlite.swift.

stephencelis avatar stephencelis commented on June 18, 2024

Closed by c762538

from sqlite.swift.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.