public static T[] FetchCol <T>(this SqlBuilder sqlBuilder, BeanApi api, bool useCache = true, params object[] parameters) { var query = sqlBuilder.ToSql(); return(query.StartsWith("SELECT") ? api.Col <T>(useCache, query, parameters) : throw NotAnSqlQueryException.Create()); }
void GenericSqlQueries(BeanApi api) { /// ## Generic SQL Queries /// Often it's needed to execute queries which don't map to beans: /// aggregates, grouping, joins, selecting single column, etc. /// /// `BeanApi` provides methods for such tasks: /// { #if CODE // Load multiple rows var rows = api.Rows(@"SELECT author, COUNT(*) FROM book WHERE rating > {0} GROUP BY author", 7); // Load a single row var row = api.Row(@"SELECT author, COUNT(*) FROM book WHERE rating > {0} GROUP BY author ORDER BY COUNT(*) DESC LIMIT 1", 7); // Load a column var col = api.Col <string>("SELECT DISTINCT author FROM book ORDER BY author"); // Load a single value var count = api.Cell <int>("SELECT COUNT(*) FROM book"); #endif } /// For `Rows` and `Col`, there are unbuffered (memory-optimized) counterparts: { #if CODE foreach (var row in api.RowsIterator("SELECT...")) { // do something } foreach (var item in api.ColIterator("SELECT...")) { // do something } #endif } /// To execute a non-query SQL command, use the `Exec` method: #if CODE api.Exec("SET autocommit = 0"); #endif /// **NOTE:** all described functions accept parameters in the same form as [finder methods](#finding-beans-with-sql) do. }
void GenericSqlQueries(BeanApi api) { /// ## Generic SQL Queries /// Often it's needed to execute queries which don't map to beans: /// aggregates, grouping, joins, selecting single column, etc. /// /// `BeanApi` provides methods for such tasks: /// { #if CODE // Load multiple rows var rows = api.Rows(@"SELECT author, COUNT(*) FROM book WHERE rating > {0} GROUP BY author", 7); // Load a single row var row = api.Row(@"SELECT author, COUNT(*) FROM book WHERE rating > {0} GROUP BY author ORDER BY COUNT(*) DESC LIMIT 1", 7); // Load a column var col = api.Col<string>("SELECT DISTINCT author FROM book ORDER BY author"); // Load a single value var count = api.Cell<int>("SELECT COUNT(*) FROM book"); #endif } /// For `Rows` and `Col`, there are unbuffered (memory-optimized) counterparts: { #if CODE foreach(var row in api.RowsIterator("...")) { // do something } foreach(var item in api.ColIterator("...")) { // do something } #endif } /// To execute a non-query SQL command, use the `Exec` method: #if CODE api.Exec("SET autocommit = 0"); #endif /// **NOTE:** all described functions accept parameters in the same form as [finder methods](#finding-beans-with-sql) do. }