
Sqlpp11 – A type safe SQL template library for C++ - paulkoer
https://github.com/rbock/sqlpp11
======
paulkoer
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!

~~~
boris
You should show the definition of 'foo'. That's where things get ugly.

~~~
enricosada
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/](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

------
couchand
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](https://github.com/couchand/just-
sql)

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

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

------
xtacy
A similar library for Scala: [http://squeryl.org/](http://squeryl.org/)

------
ExpiredLink
What has SQL done to deserve this?

------
_ZeD_
Is there a java equivalent?

~~~
batbomb
I wrote something similar a few years ago:

[http://GitHub.com/zerorm/zerorm](http://GitHub.com/zerorm/zerorm)

