mirror of
https://github.com/rbock/sqlpp11.git
synced 2024-11-15 20:31:16 +08:00
Some README typos
This commit is contained in:
parent
e4bcc27463
commit
e95294d044
34
README.md
34
README.md
@ -10,15 +10,15 @@ SQL and C++ are both strongly typed languages. Still, most C/C++ interfaces to S
|
|||||||
|
|
||||||
sqlpp11 is a templated library representing an embedded domain specific language (EDSL) that allows you to
|
sqlpp11 is a templated library representing an embedded domain specific language (EDSL) that allows you to
|
||||||
|
|
||||||
* define types representing tables and columns,
|
* define types representing tables and columns,
|
||||||
* construct type safe queries checked at compile time for syntax errors, type errors, name errors and even some semantic errors,
|
* construct type safe queries checked at compile time for syntax errors, type errors, name errors and even some semantic errors,
|
||||||
* interpret results by iterating over query-specific structs with appropriately named and typed members.
|
* interpret results by iterating over query-specific structs with appropriately named and typed members.
|
||||||
|
|
||||||
This results in several benefits, e.g.
|
This results in several benefits, e.g.
|
||||||
|
|
||||||
* the library user operates comfortably on structs and functions,
|
* the library user operates comfortably on structs and functions,
|
||||||
* the compiler reports many kinds of errors long before the code enters unit testing or production,
|
* the compiler reports many kinds of errors long before the code enters unit testing or production,
|
||||||
* the library hides the gory details of string construction for queries and interpreting string based results returned by select calls.
|
* the library hides the gory details of string construction for queries and interpreting string based results returned by select calls.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
---------
|
---------
|
||||||
@ -26,9 +26,9 @@ For the examples, lets assume you have a table class representing something like
|
|||||||
|
|
||||||
```SQL
|
```SQL
|
||||||
CREATE TABLE foo (
|
CREATE TABLE foo (
|
||||||
id bigint,
|
id bigint,
|
||||||
name varchar(50),
|
name varchar(50),
|
||||||
hasFun bool
|
hasFun bool
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -41,23 +41,23 @@ Db db(/* some arguments*/);
|
|||||||
// selecting zero or more results, iterating over the results
|
// selecting zero or more results, iterating over the results
|
||||||
for (const auto& row: db.run(select(foo.name, foo.hasFun).from(foo).where(foo.id > 17 and foo.name.like("%bar%"))))
|
for (const auto& row: db.run(select(foo.name, foo.hasFun).from(foo).where(foo.id > 17 and foo.name.like("%bar%"))))
|
||||||
{
|
{
|
||||||
if (row.name.is_null())
|
if (row.name.is_null())
|
||||||
std::cerr << "name is null, will convert to empty string" << std::endl;
|
std::cerr << "name is null, will convert to empty string" << std::endl;
|
||||||
std::string name = row.name; // string-like fields are implicitly convertible to string
|
std::string name = row.name; // string-like fields are implicitly convertible to string
|
||||||
bool hasFun = hasFun; // bool fields are implicitly convertible to bool
|
bool hasFun = hasFun; // bool fields are implicitly convertible to bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// selecting ALL columns of a table
|
// selecting ALL columns of a table
|
||||||
for (const auto& row: db.run(select(all_of(foo)).from(foo).where(hasFun or foo.name == "joker")))
|
for (const auto& row: db.run(select(all_of(foo)).from(foo).where(foo.hasFun or foo.name == "joker")))
|
||||||
{
|
{
|
||||||
int64_t id = row.id; // numeric fields are implicitly convertible to numeric c++ types
|
int64_t id = row.id; // numeric fields are implicitly convertible to numeric c++ types
|
||||||
}
|
}
|
||||||
|
|
||||||
// selecting zero or one row, showing off with an alias:
|
// selecting zero or one row, showing off with an alias:
|
||||||
SQLPP_ALIAS_PROVIDER_GENERATOR(cheese);
|
SQLPP_ALIAS_PROVIDER_GENERATOR(cheese);
|
||||||
if (const auto& row = db.run(select(foo.name.as(cheese)).from(foo).where(foo.id == 17)))
|
if (const auto& row = db.run(select(foo.name.as(cheese)).from(foo).where(foo.id == 17)))
|
||||||
{
|
{
|
||||||
std::cerr << "found: " << row.cheese << std::endl;
|
std::cerr << "found: " << row.cheese << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// selecting exactly one row:
|
// selecting exactly one row:
|
||||||
@ -73,7 +73,7 @@ db.run(insert_into(foo).set(foo.id = 17, foo.name = "bar", foo.hasFun = true));
|
|||||||
db.run(update(foo).set(foo.hasFun = not foo.hasFun).where(foo.name != "nobody"));
|
db.run(update(foo).set(foo.hasFun = not foo.hasFun).where(foo.name != "nobody"));
|
||||||
|
|
||||||
// A sample delete
|
// A sample delete
|
||||||
db.run(remove_from(tab).where(not tab.hasFun));
|
db.run(remove_from(foo).where(not foo.hasFun));
|
||||||
```
|
```
|
||||||
|
|
||||||
Requirements:
|
Requirements:
|
||||||
|
Loading…
Reference in New Issue
Block a user