Hacker News new | ask | show | jobs
Sqlpp11 – A type safe SQL template library for C++ (github.com)
28 points by paulkoer 4198 days ago
5 comments

This is a really awesome library to generate typesafe sql queries right from the C++ source code. Example usage:

  auto res = db(select(foo.name, foo.hasFun)
                .from(foo)
                .where(foo.id > 17 and foo.name.like("%bar%")));
If you're writing SQL queries in C++ code check it out!
You should show the definition of 'foo'. That's where things get ugly.
things usually get ugly with projection (one class = one select) or class reuse (mapping)

this is code -> sql string -> exec -> code (mapping results)

best approach (ihmo) is using:

sql string -> exec -> results

with type for input/output directly generated sql string (and check for types)

like F# sql type provider ( http://fsprojects.github.io/FSharp.Data.SqlClient/ )

    [<Literal>]
    let query = "
        SELECT TOP(@TopN) FirstName, LastName, SalesYTD 
        FROM Sales.vSalesPerson
        WHERE CountryRegionName = @regionName AND SalesYTD > @salesMoreThan 
        ORDER BY SalesYTD
    " 

    type SalesPersonQuery = SqlCommandProvider<query, connectionString>
    let cmd = new SalesPersonQuery()

    cmd.AsyncExecute(TopN = 3L, regionName = "United States", salesMoreThan = 1000000M) 
    |> Async.RunSynchronously

    //output
    //seq
    //    [("Pamela", "Ansman-Wolfe", 1352577.1325M);
    //     ("David", "Campbell", 1573012.9383M);
    //     ("Tete", "Mensa-Annan", 1576562.1966M)]
everything typed, but:

- without the need to define class for input / output

- without learn a new functions

- easy add database specific syntax

Just a few months ago I realized that you can hack CoffeeScript's syntax to embed DSLs directly. I wrote up a quick little proof-of-concept for SQL [0], HTML [1], and CSS [2]. Obviously the HTML one is inspired by the React syntax.

I've always hated how easy it is to push SQL bugs into production, since it's so often just a string literal stuck in your code. AFAIC you don't really need the typing help, you just need to know that you didn't forget a damn comma somewhere.

[0]: https://github.com/couchand/just-sql

[1]: https://github.com/couchand/just-html

[2]: https://github.com/couchand/just-css

A similar library for Scala: http://squeryl.org/
What has SQL done to deserve this?
Is there a java equivalent?
I wrote something similar a few years ago:

http://GitHub.com/zerorm/zerorm

after a search, I found http://www.querydsl.com/ -- seems reasonable and sound with the sql syntax
Any ORM?