Full Code of nreco/data for AI

master 580af84810ec cached
150 files
999.0 KB
287.8k tokens
830 symbols
1 requests
Download .txt
Showing preview only (1,055K chars total). Download the full file or copy to clipboard to get everything.
Repository: nreco/data
Branch: master
Commit: 580af84810ec
Files: 150
Total size: 999.0 KB

Directory structure:
gitextract_w3pu78qw/

├── .github/
│   └── workflows/
│       └── dotnet-test.yml
├── .gitignore
├── LICENSE
├── README.md
├── appveyor.yml
├── examples/
│   ├── DataSetGenericDataAdapter/
│   │   ├── DataSetGenericDataAdapter.csproj
│   │   ├── GenericDataAdapter.cs
│   │   └── Program.cs
│   ├── MySqlDemo.DbMetadata/
│   │   ├── Models/
│   │   │   ├── ColumnMetadata.cs
│   │   │   └── TableMetadata.cs
│   │   ├── MySqlDemo.DbMetadata.csproj
│   │   └── Program.cs
│   ├── NReco.Data.Examples.sln
│   ├── SqliteDemo.CommandBuilder/
│   │   ├── Program.cs
│   │   └── SqliteDemo.CommandBuilder.csproj
│   ├── SqliteDemo.DataAdapter/
│   │   ├── Program.cs
│   │   └── SqliteDemo.DataAdapter.csproj
│   ├── SqliteDemo.GraphQLApi/
│   │   ├── Controllers/
│   │   │   └── GraphQLController.cs
│   │   ├── Db/
│   │   │   ├── GraphQL/
│   │   │   │   ├── GraphQLQuery.cs
│   │   │   │   └── TableType.cs
│   │   │   └── Models/
│   │   │       ├── ColumnMetadata.cs
│   │   │       ├── DatabaseMetadata.cs
│   │   │       └── TableMetadata.cs
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── SqliteDemo.GraphQLAPI.csproj
│   │   ├── Startup.cs
│   │   ├── appsettings.json
│   │   ├── web.config
│   │   └── wwwroot/
│   │       └── index.html
│   ├── SqliteDemo.MVCApplication/
│   │   ├── .bowerrc
│   │   ├── .vscode/
│   │   │   ├── launch.json
│   │   │   └── tasks.json
│   │   ├── Controllers/
│   │   │   └── ArticleController.cs
│   │   ├── Db/
│   │   │   ├── Context/
│   │   │   │   └── DbContext.cs
│   │   │   ├── Interfaces/
│   │   │   │   └── IArticleRepository.cs
│   │   │   ├── Models/
│   │   │   │   ├── Article.cs
│   │   │   │   └── User.cs
│   │   │   ├── Repositories/
│   │   │   │   └── ArticleRepository.cs
│   │   │   └── Views/
│   │   │       └── ArticleView.cs
│   │   ├── Program.cs
│   │   ├── Project_Readme.html
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── SqliteDemo.MVCApplication.csproj
│   │   ├── Startup.cs
│   │   ├── Views/
│   │   │   ├── Article/
│   │   │   │   ├── Add.cshtml
│   │   │   │   ├── ArticleItem.cshtml
│   │   │   │   ├── Edit.cshtml
│   │   │   │   └── List.cshtml
│   │   │   ├── Shared/
│   │   │   │   ├── Error.cshtml
│   │   │   │   └── _Layout.cshtml
│   │   │   ├── _ViewImports.cshtml
│   │   │   └── _ViewStart.cshtml
│   │   ├── appsettings.json
│   │   ├── bower.json
│   │   ├── bundleconfig.json
│   │   ├── web.config
│   │   └── wwwroot/
│   │       ├── _references.js
│   │       ├── css/
│   │       │   └── site.css
│   │       ├── js/
│   │       │   └── site.js
│   │       └── lib/
│   │           ├── bootstrap/
│   │           │   ├── .bower.json
│   │           │   ├── LICENSE
│   │           │   └── dist/
│   │           │       ├── css/
│   │           │       │   ├── bootstrap-theme.css
│   │           │       │   └── bootstrap.css
│   │           │       └── js/
│   │           │           ├── bootstrap.js
│   │           │           └── npm.js
│   │           ├── jquery/
│   │           │   ├── .bower.json
│   │           │   ├── LICENSE.txt
│   │           │   └── dist/
│   │           │       └── jquery.js
│   │           ├── jquery-validation/
│   │           │   ├── .bower.json
│   │           │   ├── LICENSE.md
│   │           │   └── dist/
│   │           │       ├── additional-methods.js
│   │           │       └── jquery.validate.js
│   │           └── jquery-validation-unobtrusive/
│   │               ├── .bower.json
│   │               └── jquery.validate.unobtrusive.js
│   ├── SqliteDemo.SqlLogging/
│   │   ├── LoggingDbFactory.cs
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   └── SqliteDemo.SqlLogging.csproj
│   └── SqliteDemo.WebApi/
│       ├── Controllers/
│       │   └── DataApiController.cs
│       ├── Data/
│       │   └── NRecoDataServiceCollectionsExt.cs
│       ├── Program.cs
│       ├── Properties/
│       │   └── launchSettings.json
│       ├── SqliteDemo.WebApi.csproj
│       ├── Startup.cs
│       ├── appsettings.json
│       ├── web.config
│       └── wwwroot/
│           └── index.html
└── src/
    ├── NReco.Data/
    │   ├── DataHelper.cs
    │   ├── DataMapper.cs
    │   ├── DbBatchCommandBuilder.cs
    │   ├── DbCommandBuilder.cs
    │   ├── DbCommandBuilderExtensions.cs
    │   ├── DbDataAdapter.cs
    │   ├── DbDataView.cs
    │   ├── DbFactory.cs
    │   ├── DbSqlExpressionBuilder.cs
    │   ├── ExecuteDbCommandException.cs
    │   ├── IDbCommandBuilder.cs
    │   ├── IDbFactory.cs
    │   ├── IRecordSetAdapter.cs
    │   ├── ISqlExpressionBuilder.cs
    │   ├── Internal/
    │   │   ├── DataReaderAsyncExt.cs
    │   │   ├── DataReaderResult.cs
    │   │   ├── DbCommandAsyncExt.cs
    │   │   ├── DbConnectionAsyncExt.cs
    │   │   ├── DbDataAdapter.MapperContext.cs
    │   │   ├── DbDataAdapter.RawSqlString.cs
    │   │   ├── DbDataAdapter.SelectQuery.cs
    │   │   ├── OffsetCountDataReaderWrapper.cs
    │   │   └── RecordSetAdapter.cs
    │   ├── NReco.Data.csproj
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── Query/
    │   │   ├── IQueryValue.cs
    │   │   ├── QAggregateField.cs
    │   │   ├── QConditionNode.cs
    │   │   ├── QConst.cs
    │   │   ├── QField.cs
    │   │   ├── QGroupNode.cs
    │   │   ├── QNegationNode.cs
    │   │   ├── QNode.cs
    │   │   ├── QRawSql.cs
    │   │   ├── QRawSqlNode.cs
    │   │   ├── QSort.cs
    │   │   ├── QTable.cs
    │   │   ├── QVar.cs
    │   │   └── Query.cs
    │   ├── RecordSet.cs
    │   ├── RecordSetReader.cs
    │   ├── Relex/
    │   │   ├── RelexBuilder.cs
    │   │   └── RelexParser.cs
    │   ├── Result/
    │   │   ├── DataReaderMapperContext.cs
    │   │   ├── DataReaderResult.cs
    │   │   ├── IQueryDataTableResult.cs
    │   │   ├── IQueryDictionaryResult.cs
    │   │   ├── IQueryModelResult.cs
    │   │   └── IQueryRecordSetResult.cs
    │   ├── SqlExpressionBuilder.cs
    │   └── StringTemplate.cs
    ├── NReco.Data.Tests/
    │   ├── DataReaderResultTests.cs
    │   ├── DbBatchCommandBuilderTests.cs
    │   ├── DbCommandBuilderTests.cs
    │   ├── DbDataAdapterTests.cs
    │   ├── NReco.Data.Tests.csproj
    │   ├── QueryTests.cs
    │   ├── RecordSetTests.cs
    │   ├── RelexTests.cs
    │   ├── SqliteDbFixture.cs
    │   └── StringTemplateTests.cs
    └── NReco.Data.sln

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/dotnet-test.yml
================================================
name: .NET

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Setup .NET
      uses: actions/setup-dotnet@v2
      with:
        dotnet-version: 8.0.x
    - name: Restore dependencies
      run: dotnet restore src
    - name: Build Lib
      run: dotnet build src/NReco.Data -property:TargetFrameworks=netstandard2.0 --no-restore
    - name: Build Tests
      run: dotnet build src/NReco.Data.Tests --no-restore      
    - name: Test
      run: dotnet test src/NReco.Data.Tests --no-build --verbosity normal


================================================
FILE: .gitignore
================================================
App_Data/
packages/
bin/
obj/
*.user
*.suo
.vs
*.nuget.targets
*.lock.json
examples/*/northwind.db

================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2016 Vitalii Fedorchenko

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# NReco.Data
Lightweight high-performance data access components for generating SQL commands, mapping results to strongly typed POCO models or dictionaries, schema-less CRUD-operations with RecordSet. 

NuGet | Windows x64 | Ubuntu
--- | --- | ---
[![NuGet Release](https://img.shields.io/nuget/v/NReco.Data.svg)](https://www.nuget.org/packages/NReco.Data/) | [![AppVeyor](https://img.shields.io/appveyor/ci/nreco/data/master.svg)](https://ci.appveyor.com/project/nreco/data) | ![Tests](https://github.com/nreco/data/actions/workflows/dotnet-test.yml/badge.svg) 

* very fast: NReco.Data shows almost the same performance as Dapper but offers more features
* abstract DB-independent [Query structure](https://github.com/nreco/data/wiki/Query): no need to compose raw SQL in the code + query can be constructed dynamically (at run-time)
* automated CRUD commands generation
* generate several SQL statements into one IDbCommand (batch inserts, updates, selects for multiple recordsets: *DbBatchCommandBuilder*)
* supports mapping to annotated POCO models (EF Core entity models), allows customized mapping of query result 
* API for schema-less data access (dictionaries, RecordSet, DataTable)
* can handle results returned by stored procedure, including multiple record sets
* application-level data views (for complex SQL queries) that accessed like simple read-only tables (DbDataView)
* parser for compact string query representation: [relex](https://github.com/nreco/data/wiki/Relex) expressions
* can be used with any existing ADO.NET data provider (SQL Server, PostgreSql, Sqlite, MySql, Oracle etc)
* supports .NET Framework 4.5+, .NET Core 2.x / 3.x (netstandard2.0)

## Quick reference
Class | Dependencies | Purpose
--- | --- | ---
`DbFactory` | | incapsulates DB-specific functions and conventions 
`DbCommandBuilder` | *IDbFactory* | composes *IDbCommand* and SQL text for SELECT/UPDATE/DELETE/INSERT, handles app-level dataviews
`DbDataAdapter` | *IDbCommandBuilder*, *IDbConnection* | CRUD operations for model, dictionary, *DataTable* or *[RecordSet](https://github.com/nreco/data/wiki/RecordSet)*: Insert/Update/Delete/Select. Async versions are supported for all methods.
`Query` | | Represents abstract query to database; used as parameter in *DbCommandBuilder*, *DbDataAdapter*
`RelexParser` | | Parsers query string expression ([Relex](https://github.com/nreco/data/wiki/Relex)) into *Query* structure
`RecordSet` | | [RecordSet model](https://github.com/nreco/data/wiki/RecordSet) represents in-memory data records, this is lightweight and efficient replacement for classic *DataTable*/*DataRow*
`DataReaderResult` | *IDataReader* | reads data from any data reader implementation and efficiently maps it to models, dictionaries, *DataTable* or *RecordSet*

NReco.Data documentation:
* [Getting started and HowTos](https://github.com/nreco/data/wiki)
* [Full API Reference](http://www.nrecosite.com/doc/NReco.Data/)
* something is still not clear? Feel free to [ask a question on StackOverflow](http://stackoverflow.com/questions/ask?tags=nreco,c%23) 

## How to use
Generic implementation of `DbFactory` can be used with any ADO.NET connector. 

**DbFactory initialization for SqlClient**:
```
var dbFactory = new DbFactory(System.Data.SqlClient.SqlClientFactory.Instance) {
	LastInsertIdSelectText = "SELECT @@IDENTITY" };
```
**DbFactory initialization for Mysql**:
```
var dbFactory = new DbFactory(MySql.Data.MySqlClient.MySqlClientFactory.Instance) {
	LastInsertIdSelectText = "SELECT LAST_INSERT_ID()" };
```
**DbFactory initialization for Postgresql**:
```
var dbFactory = new DbFactory(Npgsql.NpgsqlFactory.Instance) {
	LastInsertIdSelectText = "SELECT lastval()" };
```
**DbFactory initialization for Sqlite**:
```
var dbFactory = new DbFactory(Microsoft.Data.Sqlite.SqliteFactory.Instance) {
	LastInsertIdSelectText = "SELECT last_insert_rowid()" };
```

**DbCommandBuilder** generates SQL commands by [Query](https://github.com/nreco/data/wiki/Query):
```
var dbCmdBuilder = new DbCommandBuilder(dbFactory);
var selectCmd = dbCmdBuilder.GetSelectCommand( 
	new Query("Employees", (QField)"BirthDate" > new QConst(new DateTime(1960,1,1)) ) );
var selectGroupByCmd = dbCmdBuilder.GetSelectCommand( 
	new Query("Employees").Select("company_id", new QAggregateField("avg_age", "AVG", "age") ) );
var insertCmd = dbCmdBuilder.GetInsertCommand(
	"Employees", new { Name = "John Smith", BirthDate = new DateTime(1980,1,1) } );
var deleteCmd = dbCmdBuilder.GetDeleteCommand(
	new Query("Employees", (QField)"Name" == (QConst)"John Smith" ) );
```

**DbDataAdapter** - provides simple API for CRUD-operations:
```
var dbConnection = dbFactory.CreateConnection();
dbConnection.ConnectionString = "<db_connection_string>";
var dbAdapter = new DbDataAdapter(dbConnection, dbCmdBuilder);
// map select results to POCO models
var employeeModelsList = dbAdapter.Select( new Query("Employees") ).ToList<Employee>();
// read select result to dictionary
var employeeDictionary = dbAdapter.Select( 
    new Query("Employees", (QField)"EmployeeID"==(QConst)newEmployee.EmployeeID ).Select("FirstName","LastName") 
  ).ToDictionary();
// update by dictionary
dbAdapter.Update( 
	new Query("Employees", (QField)"EmployeeID"==(QConst)1001 ),
	new Dictionary<string,object>() {
		{"FirstName", "Bruce" },
		{"LastName", "Wayne" }
	});
// insert by model
dbAdapter.Insert( "Employees", new { FirstName = "John", LastName = "Smith" } );  
```
**[RecordSet](https://github.com/nreco/data/wiki/RecordSet)** - efficient replacement for DataTable/DataRow with very similar API:
```
var rs = dbAdapter.Select(new Query("Employees")).ToRecordSet();
rs.SetPrimaryKey("EmployeeID");
foreach (var row in rs) {
	Console.WriteLine("ID={0}", row["EmployeeID"]);
	if ("Canada".Equals(row["Country"]))
		row.Delete();
}
dbAdapter.Update(rs);
var rsReader = new RecordSetReader(rs); // DbDataReader for in-memory rows
```
**[Relex](https://github.com/nreco/data/wiki/Relex)** - compact relational query expressions:
```
var relex = @"Employees(BirthDate>""1960-01-01"":datetime)[Name,BirthDate]"
var relexParser = new NReco.Data.Relex.RelexParser();
Query q = relexParser.Parse(relex);
```

## More examples
* [Command Builder](https://github.com/nreco/data/tree/master/examples/SqliteDemo.CommandBuilder/Program.cs): illustrates SQL commands generation, command batching (inserts)
* [Data Adapter](https://github.com/nreco/data/tree/master/examples/SqliteDemo.DataAdapter/Program.cs): CRUD operations with dictionaries, POCO, RecordSet
* [DataSet GenericDataAdapter](https://github.com/nreco/data/blob/master/examples/DataSetGenericDataAdapter/Program.cs): how to implement generic DataSet DataAdapter (Fill/Update) for any ADO.NET provider 
* [SQL logging](https://github.com/nreco/data/tree/master/examples/SqliteDemo.SqlLogging): how to extend `DbFactory` and add wrapper for `DbCommand` that logs SQL commands produced by `DbDataAdapter`
* [DB WebApi](https://github.com/nreco/data/tree/master/examples/SqliteDemo.WebApi): configures NReco.Data services in MVC Core app, simple REST API for database tables
* [MVC Core CRUD](https://github.com/nreco/data/tree/master/examples/SqliteDemo.MVCApplication): full-functional CRUD (list, add/edit forms) that uses NReco.Data as data layer in combination with EF Core
* [DB Metadata](https://github.com/nreco/data/tree/master/examples/MySqlDemo.DbMetadata): extract database metadata (list of tables, columns) with information_schema queries
* [GraphQL API for SQL database](https://github.com/nreco/data/tree/master/examples/SqliteDemo.GraphQLApi): provides simple GraphQL API by existing database schema (simple queries only, no mutations yet)

## Who is using this?
NReco.Data is in production use at [SeekTable.com](https://www.seektable.com/) and [PivotData microservice](https://www.nrecosite.com/pivotdata_service.aspx).

## License
Copyright 2016-2025 Vitaliy Fedorchenko and contributors

Distributed under the MIT license


================================================
FILE: appveyor.yml
================================================
version: 1.0.{build}
os: Visual Studio 2022
configuration: Release
platform: Any CPU

branches:
  only:
  - master

skip_tags: true

install:
- cmd: dotnet restore src\NReco.Data.sln

build_script:
- cmd: dotnet build src\NReco.Data --configuration Release
- cmd: dotnet build src\NReco.Data.Tests --configuration Release

test_script:
- cmd: dotnet test src\NReco.Data.Tests\NReco.Data.Tests.csproj --configuration Release

================================================
FILE: examples/DataSetGenericDataAdapter/DataSetGenericDataAdapter.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.*" />
    <PackageReference Include="NReco.Data" Version="1.2.*" />
    <PackageReference Include="MySqlConnector" Version="2.4.0" />
  </ItemGroup>  
  

  <ItemGroup>  
    <MySourceFiles Include="$(MSBuildProjectDirectory)/../DemoData/northwind.db"/>  
  </ItemGroup>
  <Target Name="CopySqliteDbFile" BeforeTargets="Build">
	<Copy SourceFiles="@(MySourceFiles)"  
          DestinationFolder="$(MSBuildProjectDirectory)"/>  
  </Target>    
  
</Project>


================================================
FILE: examples/DataSetGenericDataAdapter/GenericDataAdapter.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Common;
using System.Data;

using NReco.Data;

namespace DataSetGenericDataAdapter
{

	/// <summary>
	/// Generic implementation of <see cref="IDbDataAdapter"/>.
	/// </summary>
	/// <remarks>Note: this implementation ignores tables and columns mapping. You may enhance the code if you need this feature.</remarks>
    public class GenericDataAdapter : System.Data.Common.DbDataAdapter {

		IDbCommandBuilder CmdBuilder;
		DbConnection Conn;

		public GenericDataAdapter(IDbCommandBuilder cmdBuilder, DbCommand selectCmd) {
			CmdBuilder = cmdBuilder;
			SelectCommand = selectCmd;
		}

		public GenericDataAdapter(IDbCommandBuilder cmdBuilder, DbConnection conn) {
			CmdBuilder = cmdBuilder;
			Conn = conn;
		}

		IEnumerable<KeyValuePair<string,IQueryValue>> GetChangeset(DataTable t) {
			var res = new List<KeyValuePair<string, IQueryValue>>(t.Columns.Count);
			foreach (DataColumn col in t.Columns)
				if (!col.AutoIncrement && !col.ReadOnly) {
					res.Add(new KeyValuePair<string, IQueryValue>(col.ColumnName, new QVar(col.ColumnName).Set(null) ));
				}
			return res.ToArray();
		}

		const string OriginalSuffix = "__ORIGINAL";

		void InitDbCmd(DbCommand cmd, DataTable t) {
			foreach (DbParameter p in cmd.Parameters) {
				if (p.SourceColumn != null) {
					if (p.SourceColumn.EndsWith(OriginalSuffix)) {
						p.SourceColumn = p.SourceColumn.Substring(0, p.SourceColumn.Length - OriginalSuffix.Length);
						p.SourceVersion = DataRowVersion.Original;
					} else {
						p.SourceVersion = DataRowVersion.Current;
					}
					var col = t.Columns[p.SourceColumn];
					// you may use column metadata to initialize DbParameter in a special way if needed
				}
			}
			if (SelectCommand != null && SelectCommand.Connection != null) { 
				cmd.Connection = SelectCommand.Connection;
			} else {
				cmd.Connection = Conn;
			}
		}

		QNode ComposePkCondition(DataTable t) {
			var pkCondition = new QGroupNode(QGroupType.And);
			foreach (DataColumn col in t.PrimaryKey) {
				pkCondition.Nodes.Add(
					(QField)col.ColumnName == new QVar(col.ColumnName+OriginalSuffix).Set(null) );
			}
			return pkCondition;
		}

		protected override int Update(DataRow[] dataRows, DataTableMapping tableMapping) {
			// generate commands by first row table schema
			if (dataRows.Length>0) {
				var tbl = dataRows[0].Table;
				var changeset = GetChangeset(tbl);
				InsertCommand = (DbCommand)CmdBuilder.GetInsertCommand(tbl.TableName, changeset);
				InitDbCmd(InsertCommand, tbl);

				if (tbl.PrimaryKey!=null && tbl.PrimaryKey.Length>0) {
					var pkQuery = new Query(tbl.TableName, ComposePkCondition(tbl) );
					UpdateCommand = (DbCommand)CmdBuilder.GetUpdateCommand(pkQuery, changeset);
					InitDbCmd(UpdateCommand, tbl);

					DeleteCommand = (DbCommand)CmdBuilder.GetDeleteCommand(pkQuery);
					InitDbCmd(DeleteCommand, tbl);
				}
			}
			

			return base.Update(dataRows, tableMapping);
		}


	}

}


================================================
FILE: examples/DataSetGenericDataAdapter/Program.cs
================================================
using System;
using System.IO;
using System.Data;
using System.Data.Common;

using NReco.Data;

namespace DataSetGenericDataAdapter
{
	class Program {
		static void Main(string[] args) {

			GenericDataAdapterForSqlite();

			GenericDataAdapterForMySql();
		}

		static void GenericDataAdapterForSqlite() {
			Console.WriteLine("Sqlite database (northwind.db)");

			var dbFactory = new DbFactory(Microsoft.Data.Sqlite.SqliteFactory.Instance) {
				LastInsertIdSelectText = "SELECT last_insert_rowid()",
				IdentifierFormat = "\"{0}\""
			};
			var dbCmdBuilder = new NReco.Data.DbCommandBuilder(dbFactory);

			var sqliteDbPath = Path.Combine(Directory.GetCurrentDirectory(), "northwind.db");
			var sqliteConnStr = String.Format("Data Source={0}", sqliteDbPath);

			using (var conn = dbFactory.CreateConnection()) {
				conn.ConnectionString = sqliteConnStr;

				var selectCmd = dbCmdBuilder.GetSelectCommand(new Query("Employees"));
				selectCmd.Connection = conn;

				var dsDataAdapter = new GenericDataAdapter(dbCmdBuilder, (DbCommand)selectCmd);
				var ds = new DataSet();
				dsDataAdapter.Fill(ds, "Employees");

				Console.WriteLine("Fill: loaded {0} rows", ds.Tables["Employees"].Rows.Count);

				// lets set PK
				ds.Tables["Employees"].PrimaryKey = new[] { ds.Tables["Employees"].Columns["EmployeeID"] };
				ds.Tables["Employees"].Columns["Deleted"].ReadOnly = true;  // do not insert/update this column

				// and modify some rows
				ds.Tables["Employees"].Rows.Find(1)["FirstName"] = "Nancy1";
				var newRow = ds.Tables["Employees"].NewRow();
				newRow["EmployeeID"] = 10;
				newRow["FirstName"] = "John";
				newRow["LastName"] = "Smith";
				newRow["ReportsTo"] = 2;
				newRow["Deleted"] = 1;  // this will be ignored 
				ds.Tables["Employees"].Rows.Add(newRow);

				Console.WriteLine("Update (insert+update): affected {0} rows", dsDataAdapter.Update(ds.Tables["Employees"]));

				ds.Tables["Employees"].Rows.Find(10).Delete();
				Console.WriteLine("Update (delete): affected {0} rows", dsDataAdapter.Update(ds.Tables["Employees"]));

			}
			Console.WriteLine();
		}

		static void GenericDataAdapterForMySql() {
			Console.WriteLine("Mysql database (sample server, may respond slowly)");

			var dbFactory = new DbFactory(MySqlConnector.MySqlConnectorFactory.Instance) {
				LastInsertIdSelectText = "SELECT LAST_INSERT_ID()",
				IdentifierFormat = "`{0}`"
			};
			var dbCmdBuilder = new NReco.Data.DbCommandBuilder(dbFactory);

			var mysqlConnStr = "Server=db4free.net;Database=nreco_sampledb;Uid=nreco_sampledb;Pwd=HRt5UbVD;";
			using (var conn = dbFactory.CreateConnection()) {
				conn.ConnectionString = mysqlConnStr;

				var selectCmd = dbCmdBuilder.GetSelectCommand(new Query("orders"));
				selectCmd.Connection = conn;

				var dsDataAdapter = new GenericDataAdapter(dbCmdBuilder, (DbCommand)selectCmd);
				var ds = new DataSet();
				dsDataAdapter.Fill(ds, "orders");

				Console.WriteLine("Fill: loaded {0} rows", ds.Tables["orders"].Rows.Count);
			}
		}
	}
}


================================================
FILE: examples/MySqlDemo.DbMetadata/Models/ColumnMetadata.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace MySqlDemo.DbMetadata.Models {

	public class ColumnMetadata {

		[Column("column_name")]
		public string ColumnName {
			get; set;
		}

		[Column("data_type")]
		public string DataType {
			get; set;
		}

		[Column("is_nullable")]
		public string IsNullable {
			get; set;
		}

	}
}


================================================
FILE: examples/MySqlDemo.DbMetadata/Models/TableMetadata.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations.Schema;

namespace MySqlDemo.DbMetadata.Models {
	
	public class TableMetadata {

		[Column("table_name")]
		public string TableName { get; set; }

		[Column("create_time")]
		public DateTime? CreateTime { get; set; }

		public List<ColumnMetadata> Columns { get; set; }

	}
}


================================================
FILE: examples/MySqlDemo.DbMetadata/MySqlDemo.DbMetadata.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AssemblyName>MySqlDemo.DbMetadata</AssemblyName>
    <OutputType>Exe</OutputType>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="MySqlConnector" Version="2.4.0" />
    <PackageReference Include="NReco.Data" Version="1.2.*" />
    <PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
  </ItemGroup>

</Project>


================================================
FILE: examples/MySqlDemo.DbMetadata/Program.cs
================================================
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;

using MySqlConnector;

using NReco.Data;

using MySqlDemo.DbMetadata.Models;

namespace MySqlDemo.DbMetadata {

	/// <summary>
	/// This example illustrates how to use NReco.Data for getting database metadata (list of tables / table columns)
	/// by querying 'information_schema' views (part of SQL-92, https://en.wikipedia.org/wiki/Information_schema).
	/// </summary>
	/// <remarks>
	/// Note that 'information_schema' views are not supported by some databases (like Oracle, SQLite).
	/// </remarks>
	public class Program {

		private static DbDataAdapter _dbAdapter;
		protected static DbDataAdapter dbAdapter {
			get {
				if (_dbAdapter == null) {
					var sqlDbPath = "Server=db4free.net;Database=nreco_sampledb;Uid=nreco_sampledb;Pwd=HRt5UbVD;";

					var dbFactory = new DbFactory(MySqlConnector.MySqlConnectorFactory.Instance) {
						LastInsertIdSelectText = "SELECT LAST_INSERT_ID()"
					};
					var dbConnection = dbFactory.CreateConnection();
					dbConnection.ConnectionString = sqlDbPath;

					var dbCmdBuilder = new DbCommandBuilder(dbFactory);
					_dbAdapter = new DbDataAdapter(dbConnection, dbCmdBuilder);
				}
				return _dbAdapter;
			}
		}

		public static void Main(string[] args) {

			Console.WriteLine("Fetch 'orders' table columns (database 'nreco_sampledb', may respond slowly):");
			var tbl = FetchTableMetaData("orders");
			Console.Write("Table added: {0}", tbl.CreateTime);
			Console.WriteLine();
			Console.WriteLine();
			foreach (var col in tbl.Columns) {
				Console.WriteLine("Column name: {0}; Data type: {1}; IsNullable: {2}", col.ColumnName, col.DataType, col.IsNullable);
			}
			Console.WriteLine("Press any key to continue...");
			Console.ReadKey();
		}

		protected static TableMetadata FetchTableMetaData(string tableName) {
			var query = new Query(
				new QTable("INFORMATION_SCHEMA.tables", null),
				(QField)"table_name" == (QConst)tableName).Select("table_name", "create_time"
			);
			var table = dbAdapter.Select(query).Single<TableMetadata>();
			GetColumnsMetadata(table);
			return table;
		}

		protected static void GetColumnsMetadata(TableMetadata table) {
			var query = new Query(
				new QTable("INFORMATION_SCHEMA.columns", null),
				(QField)"TABLE_NAME" == (QConst)table.TableName).Select("column_name", "data_type", "is_nullable"
			);
			var tableColumns = dbAdapter.Select(query).ToList<ColumnMetadata>();

			table.Columns = tableColumns;
		}
	}
}


================================================
FILE: examples/NReco.Data.Examples.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.16
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SqliteDemo.CommandBuilder", "SqliteDemo.CommandBuilder\SqliteDemo.CommandBuilder.csproj", "{E138270B-84B3-4A0C-82E6-CE283F9D53EA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SqliteDemo.DataAdapter", "SqliteDemo.DataAdapter\SqliteDemo.DataAdapter.csproj", "{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SqliteDemo.WebApi", "SqliteDemo.WebApi\SqliteDemo.WebApi.csproj", "{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SqliteDemo.MVCApplication", "SqliteDemo.MVCApplication\SqliteDemo.MVCApplication.csproj", "{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MySqlDemo.DbMetadata", "MySqlDemo.DbMetadata\MySqlDemo.DbMetadata.csproj", "{2B8EB4B6-4896-4970-B5EA-6D324824A541}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SqliteDemo.GraphQLAPI", "SqliteDemo.GraphQLApi\SqliteDemo.GraphQLAPI.csproj", "{F79B488D-8779-4FE9-B27D-617F9A431739}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SqliteDemo.SqlLogging", "SqliteDemo.SqlLogging\SqliteDemo.SqlLogging.csproj", "{B9C42268-CBEF-46CF-A44B-ADC01737F67E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataSetGenericDataAdapter", "DataSetGenericDataAdapter\DataSetGenericDataAdapter.csproj", "{B48FD072-C587-4387-9625-6F67B328C42E}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Debug|x64 = Debug|x64
		Debug|x86 = Debug|x86
		Release|Any CPU = Release|Any CPU
		Release|x64 = Release|x64
		Release|x86 = Release|x86
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Debug|x64.ActiveCfg = Debug|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Debug|x64.Build.0 = Debug|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Debug|x86.ActiveCfg = Debug|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Debug|x86.Build.0 = Debug|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Release|Any CPU.Build.0 = Release|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Release|x64.ActiveCfg = Release|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Release|x64.Build.0 = Release|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Release|x86.ActiveCfg = Release|Any CPU
		{E138270B-84B3-4A0C-82E6-CE283F9D53EA}.Release|x86.Build.0 = Release|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Debug|x64.ActiveCfg = Debug|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Debug|x64.Build.0 = Debug|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Debug|x86.ActiveCfg = Debug|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Debug|x86.Build.0 = Debug|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Release|Any CPU.Build.0 = Release|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Release|x64.ActiveCfg = Release|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Release|x64.Build.0 = Release|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Release|x86.ActiveCfg = Release|Any CPU
		{424DF75E-B560-41A7-ACEF-ABFDB620F8EA}.Release|x86.Build.0 = Release|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Debug|x64.ActiveCfg = Debug|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Debug|x64.Build.0 = Debug|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Debug|x86.ActiveCfg = Debug|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Debug|x86.Build.0 = Debug|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Release|Any CPU.Build.0 = Release|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Release|x64.ActiveCfg = Release|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Release|x64.Build.0 = Release|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Release|x86.ActiveCfg = Release|Any CPU
		{B71A1BCB-9BCD-4385-9D12-2710DE030A2C}.Release|x86.Build.0 = Release|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Debug|x64.ActiveCfg = Debug|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Debug|x64.Build.0 = Debug|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Debug|x86.ActiveCfg = Debug|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Debug|x86.Build.0 = Debug|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Release|Any CPU.Build.0 = Release|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Release|x64.ActiveCfg = Release|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Release|x64.Build.0 = Release|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Release|x86.ActiveCfg = Release|Any CPU
		{C26E59A1-E085-45DF-8AD2-E7C2810AC1D8}.Release|x86.Build.0 = Release|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Debug|x64.ActiveCfg = Debug|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Debug|x64.Build.0 = Debug|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Debug|x86.ActiveCfg = Debug|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Debug|x86.Build.0 = Debug|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Release|Any CPU.Build.0 = Release|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Release|x64.ActiveCfg = Release|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Release|x64.Build.0 = Release|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Release|x86.ActiveCfg = Release|Any CPU
		{2B8EB4B6-4896-4970-B5EA-6D324824A541}.Release|x86.Build.0 = Release|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Debug|x64.ActiveCfg = Debug|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Debug|x64.Build.0 = Debug|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Debug|x86.ActiveCfg = Debug|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Debug|x86.Build.0 = Debug|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Release|Any CPU.Build.0 = Release|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Release|x64.ActiveCfg = Release|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Release|x64.Build.0 = Release|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Release|x86.ActiveCfg = Release|Any CPU
		{F79B488D-8779-4FE9-B27D-617F9A431739}.Release|x86.Build.0 = Release|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Debug|x64.ActiveCfg = Debug|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Debug|x64.Build.0 = Debug|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Debug|x86.ActiveCfg = Debug|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Debug|x86.Build.0 = Debug|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Release|Any CPU.Build.0 = Release|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Release|x64.ActiveCfg = Release|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Release|x64.Build.0 = Release|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Release|x86.ActiveCfg = Release|Any CPU
		{B9C42268-CBEF-46CF-A44B-ADC01737F67E}.Release|x86.Build.0 = Release|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Debug|x64.ActiveCfg = Debug|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Debug|x64.Build.0 = Debug|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Debug|x86.ActiveCfg = Debug|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Debug|x86.Build.0 = Debug|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Release|Any CPU.Build.0 = Release|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Release|x64.ActiveCfg = Release|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Release|x64.Build.0 = Release|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Release|x86.ActiveCfg = Release|Any CPU
		{B48FD072-C587-4387-9625-6F67B328C42E}.Release|x86.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {53B4C967-C2C7-4D78-AD74-EF496B12AA94}
	EndGlobalSection
EndGlobal


================================================
FILE: examples/SqliteDemo.CommandBuilder/Program.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO;

using System.Data;
using System.Diagnostics;

using NReco.Data;

namespace SqliteDemo.CommandBuilder
{
	/// <summary>
	/// Example illustrates how to use DbCommandBuilder for generating SQL commands by Query structure.
	/// </summary>
	/// <remarks>
	/// This approach is useful if you really need to have full control over low-level ADO.NET components.
	/// In most cases it is much easier to use DbDataAdapter which provides simple interface for CRUD-operations (see SqliteDemo.DataAdapter example).
	/// </remarks>
    public class Program
    {
        public static void Main(string[] args)
        {
			// configure ADO.NET and NReco.Data components
			var dbFactory = new DbFactory(Microsoft.Data.Sqlite.SqliteFactory.Instance) {
				LastInsertIdSelectText = "SELECT last_insert_rowid()"
			};
			var dbCmdBuilder = new DbCommandBuilder(dbFactory);
			var sqliteDbPath = Path.Combine( Directory.GetCurrentDirectory(), "northwind.db");

			using (var conn = dbFactory.CreateConnection()) {
				conn.ConnectionString = String.Format("Data Source={0}", sqliteDbPath);

				// simple helper class that holds DB context.
				var dbContext = new DbContext() {
					CommandBuilder = dbCmdBuilder,
					Connection = conn,
					DbFactory = dbFactory
				};

				conn.Open();
				try {
					RunSelect(dbContext);

					// lets run insert / update in transaction
					using (var tr = conn.BeginTransaction()) {
						dbContext.Transaction = tr;
						try {
							RunInsert(dbContext);
							RunUpdate(dbContext);
							tr.Commit();
						} catch {
							tr.Rollback();
							throw;
						}
					}
					dbContext.Transaction = null;

					// batch inserts: several SQL statements in one DbCommand
					RunBatchInserts(dbContext);

					RunDelete(dbContext);


				} finally {
					conn.Close();
				}

				// multiple result sets example
				RunSelectMultipleResultSet(dbContext);
			}


        }

		static void RunSelect(DbContext dbContext) {
			var selectCmd = dbContext.CommandBuilder.GetSelectCommand(new Query("Employees", (QField)"BirthDate" > new QConst(new DateTime(1960,1,1)) ));
			dbContext.InitCommand(selectCmd);

			Console.WriteLine("Selecting 'Employees' with BirthDay > 1960");
			Console.WriteLine("Generated SQL: {0}", selectCmd.CommandText);
			using (var rdr = selectCmd.ExecuteReader()) {
				while (rdr.Read()) {
					Console.WriteLine("#{0}: {1} {2}", rdr["EmployeeID"], rdr["FirstName"], rdr["LastName"]);
				}

			}
			Console.WriteLine();
		}

		static void RunInsert(DbContext dbContext) {
			var newEmployee = new Dictionary<string,object>() {
				{ "EmployeeID", 1000 },
				{ "FirstName", "John" },
				{ "LastName", "Smith" },
				{ "BirthDate", new DateTime(1980, 1, 1) }
			};
			var insertCmd = dbContext.CommandBuilder.GetInsertCommand("Employees", newEmployee );
			dbContext.InitCommand(insertCmd);

			Console.WriteLine("Inserting new record to 'Employees' table");
			Console.WriteLine($"Generated SQL: {insertCmd.CommandText}");
			var affected = insertCmd.ExecuteNonQuery();
			Console.WriteLine($"Done, affected: {affected}");
			Console.WriteLine();
		}

		static void RunUpdate(DbContext dbContext) {
			var changeset = new Dictionary<string,object>() {
				{ "FirstName", "Mike" }
			};
			var updateCmd = dbContext.CommandBuilder.GetUpdateCommand(
				new Query("Employees", (QField)"EmployeeID" == (QConst)1000 ), changeset );
			dbContext.InitCommand(updateCmd);

			Console.WriteLine("Updating just inserted record in 'Employees' table");
			Console.WriteLine($"Generated SQL: {updateCmd.CommandText}");
			var affected = updateCmd.ExecuteNonQuery();
			Console.WriteLine($"Done, affected: {affected}");
			Console.WriteLine();
		}

		static void RunDelete(DbContext dbContext) {
			var deleteCmd = dbContext.CommandBuilder.GetDeleteCommand(
				new Query("Employees", (QField)"EmployeeID" >= (QConst)1000 ) );
			dbContext.InitCommand(deleteCmd);

			Console.WriteLine("Deleting all records with EmployeeID >=100 from 'Employees' table");
			Console.WriteLine("Generated SQL: {0}", deleteCmd.CommandText);
			var affected = deleteCmd.ExecuteNonQuery();
			Console.WriteLine($"Done, affected: {affected}");
			Console.WriteLine();
		}

		static void RunBatchInserts(DbContext dbContext) {
			// about SQL statements batches: https://msdn.microsoft.com/en-us/library/ms712553%28v=vs.85%29.aspx
			// note that depending on database/ADO.NET connector, executing SQL statements in batch may not lead to performance boost
			// (for example, for SQLite)
			// usually batches are efficient for inserting/updating many records in cloud DB 
			// (like Azure SQL: https://azure.microsoft.com/en-us/documentation/articles/sql-database-use-batching-to-improve-performance/ )

			var sw = new Stopwatch();
			var batchCmdBuilder = new DbBatchCommandBuilder(dbContext.DbFactory);

			// lets create 10,000 records to insert
			var insertsCount = 10000;
			var insertRecords = new List<Dictionary<string,object>>();
			for (int i=0; i<insertsCount; i++) {
				insertRecords.Add( new Dictionary<string, object>() {
					{ "EmployeeID", 1001+i },
					{ "FirstName", "First"+i.ToString() },
					{ "LastName", "Last"+i.ToString() }
				} );
			}

			sw.Start();

			// insert in batch (10-per-command)
			var batchSize = 10;
			var startIdx = 0;

			using (var tr = dbContext.Connection.BeginTransaction()) {

				while (startIdx<insertRecords.Count) {
					batchCmdBuilder.BeginBatch();
					for (var i=0; i<batchSize && (i+startIdx)<insertRecords.Count; i++) {
						batchCmdBuilder.GetInsertCommand("Employees", insertRecords[startIdx+i] );
					}
					var cmd = batchCmdBuilder.EndBatch();
					cmd.Connection = dbContext.Connection;
					cmd.Transaction = tr;
					cmd.ExecuteNonQuery();
					startIdx += batchSize;

					if ( (startIdx%1000)==0 )
						Console.WriteLine($"Inserted {startIdx} records...");
				}
				tr.Commit();
			}

			sw.Stop();

			Console.WriteLine($"Inserted {insertsCount} records in {sw.Elapsed}");
			
			// ensure that records are really inserted
			var employeesCountCmd = dbContext.CommandBuilder.GetSelectCommand(new Query("Employees").Select(QField.Count) );
			employeesCountCmd.Connection = dbContext.Connection;
			Console.WriteLine("Number of records in 'Employees' table: {0}", employeesCountCmd.ExecuteScalar() );
		}


		public static void RunSelectMultipleResultSet(DbContext dbContext) {
			// lets generate several selects in one command
			var batchCmdBuilder = new DbBatchCommandBuilder(dbContext.DbFactory);

			Console.WriteLine("Composing 2 selects in one DbCommand (multiple result sets)");
			batchCmdBuilder.BeginBatch();

			batchCmdBuilder.GetSelectCommand(new Query("Customers", (QField)"Country" == (QConst)"Germany" ));
			batchCmdBuilder.GetSelectCommand(new Query("Orders",
				new QConditionNode((QField)"CustomerID", Conditions.In,
					new Query("Customers.c", (QField)"c.Country" == (QConst)"Germany" ).Select("c.CustomerID")
				)
			));

			var multiSelectCmd = batchCmdBuilder.EndBatch();
			multiSelectCmd.Connection = dbContext.Connection;

			RecordSet customerRS = null;
			RecordSet orderRS = null;
			dbContext.Connection.Open();
			try {
				using (var rdr = multiSelectCmd.ExecuteReader()) {
					customerRS = RecordSet.FromReader(rdr);
					if (rdr.NextResult())
						orderRS = RecordSet.FromReader(rdr);
				}
			} finally {
				dbContext.Connection.Close();
			}

			Console.WriteLine($"Loaded {customerRS.Count} customers and {orderRS.Count} their orders from one data reader");
		}


		public class DbContext {
			public IDbConnection Connection { get; set; }
			public IDbCommandBuilder CommandBuilder { get; set; }
			public IDbTransaction Transaction { get; set; }
			public IDbFactory DbFactory { get; set; }

			public void InitCommand(IDbCommand cmd) {
				cmd.Connection = Connection;
				if (Transaction!=null)
					cmd.Transaction = Transaction;
			}
		}

    }
}


================================================
FILE: examples/SqliteDemo.CommandBuilder/SqliteDemo.CommandBuilder.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AssemblyName>SqliteDemo.CommandBuilder</AssemblyName>
    <OutputType>Exe</OutputType>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NReco.Data" Version="1.2.*" />
    <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.*" />
  </ItemGroup>

  <ItemGroup>  
    <MySourceFiles Include="$(MSBuildProjectDirectory)/../DemoData/northwind.db"/>  
  </ItemGroup>
  <Target Name="CopySqliteDbFile" BeforeTargets="Build">
	<Copy SourceFiles="@(MySourceFiles)"  
          DestinationFolder="$(MSBuildProjectDirectory)"/>  
  </Target>    
  
</Project>


================================================
FILE: examples/SqliteDemo.DataAdapter/Program.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

using System.IO;

using NReco.Data;

namespace SqliteDemo.DataAdapter
{
	/// <summary>
	/// Example illustrates how to use DbDataAdapter for accessing and updating DB in a schema-less way.
	/// </summary>
    public class Program
    {
        public static void Main(string[] args)
        {
			var sqliteDbPath = Path.Combine( Directory.GetCurrentDirectory(), "northwind.db");

			// configure ADO.NET and NReco.Data components
			var dbFactory = new DbFactory(Microsoft.Data.Sqlite.SqliteFactory.Instance) {
				LastInsertIdSelectText = "SELECT last_insert_rowid()"
			};
			var dbConnection = dbFactory.CreateConnection();
			dbConnection.ConnectionString = String.Format("Data Source={0}", sqliteDbPath);

			var dbCmdBuilder = new DbCommandBuilder(dbFactory);
			var dbAdapter = new DbDataAdapter(dbConnection, dbCmdBuilder);
			
			// note: DbDataAdapter automatically opens (if it is not opened) and closes DB connection
			
			// lets remove all employees with ID>=1000 (cleanup)
			dbAdapter.Delete(new Query("Employees", (QField)"EmployeeID">=(QConst)1000 ));

			// demo for select queries
			SelectDemo(dbAdapter);

			// demo for DbDataAdapter Insert/Update/Delete for one record
			InsertUpdateDeleteForOneRecord(dbAdapter);

			// demo for DbDataAdapter mass Update (record set)
			UpdateForRecordSet(dbAdapter);

        }

		public static void SelectDemo(DbDataAdapter dbAdapter) {
			// select single value
			Console.WriteLine("Records count in 'Employees' table: {0}",
					dbAdapter.Select( new Query("Employees").Select( QField.Count ) ).Single<int>()
				);

			// select data into POCO models (columns are mapped to object properties)
			Console.WriteLine("All names from 'Employees' table:");
			foreach (var employee in dbAdapter.Select( new Query("Employees") ).ToList<Employee>() ) {
				Console.WriteLine("#{0}: {1} {2}", employee.EmployeeID, employee.FirstName, employee.LastName);
			}
			Console.WriteLine();

			// select data into dictionaries (illustrates subquery) 
			Console.WriteLine("Products from 'Seafood' category:");
			var productBySeafoodQuery = new Query("Products", 
					new QConditionNode( (QField)"CategoryID", Conditions.In, 
						new Query("Categories", (QField)"CategoryName"==(QConst)"Seafood" ).Select("CategoryID")
					)
				).Select("ProductName", "UnitPrice");
			foreach (var product in dbAdapter.Select( productBySeafoodQuery ).ToDictionaryList() ) {
				Console.WriteLine("{0} for ${1}", product["ProductName"], product["UnitPrice"]);
			}

			// select data into RecordSet
			Console.WriteLine("Customers from USA:");
			var customersRS = dbAdapter.Select( 
					new Query("Customers", (QField)"Country"==(QConst)"USA").Select("CustomerID","CompanyName","ContactName")
				).ToRecordSet();
			foreach (var row in customersRS) {
				foreach (var col in customersRS.Columns) {
					Console.Write("{0}={1} |", col.Name, row[col]);
				}
				Console.WriteLine();
			}

			Console.WriteLine();
		}

		public static void InsertUpdateDeleteForOneRecord(DbDataAdapter dbAdapter) {

			// add new employee by POCO model
			var newEmployee = new Employee() { EmployeeID = 1000, FirstName = "John", LastName = "Smith" };
			dbAdapter.Insert("Employees", newEmployee );
			Console.WriteLine("Added new employee: John Smith (ID=1000)");

			// add new employee by dictionary
			dbAdapter.Insert("Employees", new Dictionary<string,object>() {
				{"EmployeeID", 1001},
				{"FirstName", "Jim"},
				{"LastName", "Gordon"}
			});
			Console.WriteLine("Added new employee: Jim Gordon (ID=1001)");

			// update employee by poco model
			newEmployee.FirstName = "Bart";
			var newEmployeeByIdQuery = new Query("Employees", (QField)"EmployeeID"==(QConst)newEmployee.EmployeeID );
			dbAdapter.Update( newEmployeeByIdQuery, newEmployee);

			Console.WriteLine("New first name for EmployeeID=1000: {0}", 
				dbAdapter.Select( new Query("Employees", (QField)"EmployeeID"==(QConst)1000).Select("FirstName") ).Single<string>() );

			// update employee by dictionary
			dbAdapter.Update( 
				new Query("Employees", (QField)"EmployeeID"==(QConst)1001 ),
				new Dictionary<string,object>() {
					{"FirstName", "Bruce" },
					{"LastName", "Wayne" }
				}
			);
			var employee_1001_data = dbAdapter.Select( new Query("Employees", (QField)"EmployeeID"==(QConst)1001 )).ToDictionary();
			Console.WriteLine("New name for EmployeeID=1001: {0} {1}", employee_1001_data["FirstName"], employee_1001_data["LastName"]);

			// update only some fields from model
			newEmployee.LastName = "Simpson";
			newEmployee.FirstName = "Homer";

			dbAdapter.Update(newEmployeeByIdQuery, new { LastName = "LastName" } );
			
			var newEmployeeNameFromDb = dbAdapter.Select( new Query(newEmployeeByIdQuery).Select("FirstName","LastName") ).ToDictionary();
			Console.WriteLine("First+Last for EmployeeID=1000 after update: {0} {1}",
				newEmployeeNameFromDb["FirstName"], newEmployeeNameFromDb["LastName"]);			
		}

		public static void UpdateForRecordSet(DbDataAdapter dbAdapter) {
			var customersRS = dbAdapter.Select( 
					new Query("Customers").OrderBy("CustomerID asc")
				).ToRecordSet();			
			Console.WriteLine("Loaded {0} customer records ({1} columns)", customersRS.Count, customersRS.Columns.Count);

			// in most cases primary key should be set explicetly
			customersRS.SetPrimaryKey("CustomerID");

			// lets change USA,Canada to 'North America'
			int updateRows = 0;
			foreach (var row in customersRS)
				if ("USA".Equals(row["Country"]) || "Canada".Equals(row["Country"])) {
					row["Country"] = "North America";
					updateRows++;
				}
			// lets delete some customer
			var deleteRows = 0;
			foreach (var row in customersRS)
				if ("PARIS".Equals(row["CustomerID"])) {
					row.Delete();
					deleteRows++;
				}
			// lets add one customer from Ukraine
			var uaCustomer = customersRS.Add();
			uaCustomer["CompanyName"] = "MegaSuperAwsome Inc";
			uaCustomer["CustomerID"] = "MEGAUA";
			uaCustomer["Country"] = "Ukraine";
			
			Console.WriteLine("RecordSet rows: update={0} delete={1} insert={2}", updateRows, deleteRows, 1);

			dbAdapter.Connection.Open();
			using (var tr = dbAdapter.Connection.BeginTransaction()) {
				dbAdapter.Transaction = tr; // associate transaction for adapter commands
				try {
					
					dbAdapter.Update("Customers", customersRS);		
					
					Console.WriteLine("Customers count={0}", dbAdapter.Select(new Query("Customers").Select(QField.Count) ).Single<int>() );

					// lets throw an exception
					throw new Exception("Rollback Test!");

					tr.Commit();
				} catch (Exception ex) {
					Console.WriteLine("Exception is thrown: {0}", ex.ToString() );
					tr.Rollback();
				} finally {
					dbAdapter.Transaction = null;
					dbAdapter.Connection.Close();
				}
			}
		}

		public class Employee {

			[Key]
			public int EmployeeID { get; set; }
			public string FirstName { get; set; }
			public string LastName { get; set; }
			public DateTime? BirthDate { get; set; }

			[NotMapped]
			public string FullName {
				get { return $"{FirstName} {LastName}"; }
			}
		}
    }
}


================================================
FILE: examples/SqliteDemo.DataAdapter/SqliteDemo.DataAdapter.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AssemblyName>SqliteDemo.DataAdapter</AssemblyName>
    <OutputType>Exe</OutputType>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.*" />
    <PackageReference Include="NReco.Data" Version="1.2.*" />
  </ItemGroup>

  <ItemGroup>  
    <MySourceFiles Include="$(MSBuildProjectDirectory)/../DemoData/northwind.db"/>  
  </ItemGroup>
  <Target Name="CopySqliteDbFile" BeforeTargets="Build">
	<Copy SourceFiles="@(MySourceFiles)"  
          DestinationFolder="$(MSBuildProjectDirectory)"/>  
  </Target>   
  
</Project>


================================================
FILE: examples/SqliteDemo.GraphQLApi/Controllers/GraphQLController.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Net;
using System.Net.Http;
using System.Text;

using Microsoft.AspNetCore.Mvc;

using SqliteDemo.GraphQLApi.Db.GraphQL;

using GraphQL;
using GraphQL.Http;
using GraphQL.Instrumentation;
using GraphQL.Execution;
using GraphQL.Types;
using GraphQL.Validation;
using GraphQL.Validation.Complexity;

namespace SqliteDemo.GraphQLApi.Controllers {
	[Route("api/[controller]")]
	public class GraphQLController : Controller {
		Schema graphQLSchema;

		public GraphQLController(Schema schema) {
			graphQLSchema = schema;
		}

		[HttpGet("")]
		public async Task<string> Get(string query) {
			//query = @"{ Customers(CustomerID: ""ALFKI"") { CustomerID CompanyName } }";
			//query = @"{ Customers_list { CustomerID CompanyName } }";

			var result = await new DocumentExecuter().ExecuteAsync(
				new ExecutionOptions() {
					Schema = graphQLSchema,
					Query = query
				}
			).ConfigureAwait(false);

			var json = new DocumentWriter(indent: true).Write(result.Data);
			return json;
		}

		// POST api/values
		[HttpPost]
		public void Post([FromBody]string value) {
		}

		// PUT api/values/5
		[HttpPut("{id}")]
		public void Put(int id, [FromBody]string value) {
		}

		// DELETE api/values/5
		[HttpDelete("{id}")]
		public void Delete(int id) {
		}
	}
}

================================================
FILE: examples/SqliteDemo.GraphQLApi/Db/GraphQL/GraphQLQuery.cs
================================================
using System.Collections.Generic;

using GraphQL.Types;

using SqliteDemo.GraphQLApi.Db.Models;
using GraphQL.Resolvers;

using NReco.Data;

namespace SqliteDemo.GraphQLApi.Db.GraphQL {
	public class GraphQLQuery : ObjectGraphType<object> {
		private IDatabaseMetadata _dbMetadata;
		private DbDataAdapter _dbAdapter;

		public GraphQLQuery(DbDataAdapter data, IDatabaseMetadata dbMetadata) {
			_dbMetadata = dbMetadata;
			_dbAdapter = data;

			Name = "Query";

			foreach (var metaTable in _dbMetadata.GetMetadataTables()) {
				var tableType = new TableType(metaTable);
				this.AddField(new FieldType() {
					Name = metaTable.TableName,
					Type = tableType.GetType(),
					ResolvedType = tableType,
					Resolver = new MyFieldResolver(metaTable, _dbAdapter),
					Arguments = new QueryArguments(
						tableType.TableArgs
					)
				});
				//lets add key to get list of current table
				var listType = new ListGraphType(tableType);
				this.AddField(new FieldType {
					Name = $"{metaTable.TableName}_list",
					Type = listType.GetType(),
					ResolvedType = listType,
					Resolver = new MyFieldResolver(metaTable, _dbAdapter),
					Arguments = new QueryArguments(
						tableType.TableArgs
					)
				});
			}
		}
	}

	public class MyFieldResolver : IFieldResolver {
		private TableMetadata _tableMetadata;
		private DbDataAdapter _dbAdapter;

		public MyFieldResolver(TableMetadata tableMetadata, DbDataAdapter data) {
			_tableMetadata = tableMetadata;
			_dbAdapter = data;
		}

		public object Resolve(ResolveFieldContext context) {
			var query = new Query(
				$"'{_tableMetadata.TableName}'"
			);
			ApplyArguments(query, context.Arguments);
			if (context.FieldName.Contains("_list")) {
				return _dbAdapter.Select(query).ToDictionaryList();
			} else {
				return _dbAdapter.Select(query).ToDictionary();
			}
		}

		private void ApplyArguments(Query q, IDictionary<string, object> args) {
			var grpAnd = QGroupNode.And();
			var applyConditions = false;
			foreach (var arg in args) {
				if (arg.Value != null) {
					grpAnd.Nodes.Add(
						(QField)arg.Key == new QConst(arg.Value)
					);
					applyConditions = true;
				}
			}

			if (applyConditions)
				q.Condition = grpAnd;
		}
	}
}


================================================
FILE: examples/SqliteDemo.GraphQLApi/Db/GraphQL/TableType.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Reflection;

using GraphQL.Types;
using SqliteDemo.GraphQLApi.Db.Models;
using GraphQL;
using GraphQL.Resolvers;

using Microsoft.Data.Sqlite;

namespace SqliteDemo.GraphQLApi.Db.GraphQL {
	public class TableType : ObjectGraphType<IDictionary<string,object>> {

		public QueryArguments TableArgs {
			get; set;
		}

		private IDictionary<string, Type> _SqliteTypeToSystemType;
		protected IDictionary<string, Type> SqliteTypeToSystemType {
			get {
				if (_SqliteTypeToSystemType == null) {
					_SqliteTypeToSystemType = new Dictionary<string, Type> {
						{ "char", typeof(String) },
						{ "nvarchar", typeof(String) },
						{ "int", typeof(int) },
						{ "decimal", typeof(decimal) },
						{ "bit", typeof(bool) }
					};
				}
				return _SqliteTypeToSystemType;
			}
		}

		public TableType(TableMetadata tableMetadata) {
			Name = tableMetadata.TableName;
			foreach (var tableColumn in tableMetadata.Columns) {
				InitGraphTableColumn(tableColumn);
			}
		}

		private void InitGraphTableColumn(ColumnMetadata columnMetadata) {
			var graphQLType = (ResolveColumnMetaType(columnMetadata.DataType)).GetGraphTypeFromType(true);

			var columnField = this.Field(
				graphQLType, 
				columnMetadata.ColumnName
			);
			columnField.Resolver = new DictionaryNameFieldResolver();
			FillArgs(columnMetadata.ColumnName);
		}

		private void FillArgs(string columnName) {
			if (TableArgs == null) {
				TableArgs = new QueryArguments(
					new QueryArgument<StringGraphType>() {
						Name = columnName
					}
				);
			} else {
				TableArgs.Add(new QueryArgument<StringGraphType> { Name = columnName });
			}
		}

		private Type ResolveColumnMetaType(string dbType) {
			if (SqliteTypeToSystemType.ContainsKey(dbType))
				return SqliteTypeToSystemType[dbType];

			return typeof(String);
		}
	}

	/**/

	public class DictionaryNameFieldResolver : IFieldResolver {
		private BindingFlags _flags = BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance;

		public object Resolve(ResolveFieldContext context) {
			var source = context.Source;

			if (source == null) {
				return null;
			}

			var value = (source as IDictionary<string, object>)[context.FieldAst.Name];

			if (value == null) {
				throw new InvalidOperationException($"Expected to find property {context.FieldAst.Name} on {context.Source.GetType().Name} but it does not exist.");
			}

			return value;
		}
	}


}

================================================
FILE: examples/SqliteDemo.GraphQLApi/Db/Models/ColumnMetadata.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace SqliteDemo.GraphQLApi.Db.Models {

	public class ColumnMetadata {

		[Column("name")]
		public string ColumnName {
			get; set;
		}

		[Column("type")]
		public string DataType {
			get; set;
		}

		[Column("notnull")]
		public string IsNullable {
			get; set;
		}

	}
}


================================================
FILE: examples/SqliteDemo.GraphQLApi/Db/Models/DatabaseMetadata.cs
================================================
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations.Schema;

using NReco.Data;

namespace SqliteDemo.GraphQLApi.Db.Models {
	
	public class DatabaseMetadata : IDatabaseMetadata {

		protected DbDataAdapter _DbNRecoAdapter;

		public DatabaseMetadata(DbDataAdapter dbAdapter) {
			_DbNRecoAdapter = dbAdapter;
			DatabaseName = _DbNRecoAdapter.Connection.Database;
			if (Tables == null)
				LoadMetaData();
		}

		public string DatabaseName { get; set; }

		public List<TableMetadata> Tables { get; set; }

		private void LoadMetaData() {
			var res = new List<TableMetadata>();
			res.Add(
				FetchTableMetaData("Customers")
			);
			Tables = res;
		}

		public void ReloadMetadata() {
			LoadMetaData();
		}

		public List<TableMetadata> GetMetadataTables() {
			if (Tables == null)
				return new List<TableMetadata>();

			return Tables;
		}

		private TableMetadata FetchTableMetaData(string tableName) {
			var metaTable = new TableMetadata { TableName = tableName };
			GetColumnsMetadata(metaTable);
			return metaTable;
		}

		private void GetColumnsMetadata(TableMetadata table) {
			var tableColumns = _DbNRecoAdapter.Select(
				$"PRAGMA table_info('{@table.TableName}');"
			).ToList<ColumnMetadata>();
			table.Columns = tableColumns;
		}
	}

	public interface IDatabaseMetadata {

		void ReloadMetadata();
		List<TableMetadata> GetMetadataTables();
	}
}


================================================
FILE: examples/SqliteDemo.GraphQLApi/Db/Models/TableMetadata.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations.Schema;

using NReco.Data;

namespace SqliteDemo.GraphQLApi.Db.Models {
	
	public class TableMetadata {

		[Column("table_name")]
		public string TableName { get; set; }

		public List<ColumnMetadata> Columns { get; set; }

	}
}


================================================
FILE: examples/SqliteDemo.GraphQLApi/Program.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Builder;

namespace SqliteDemo.GraphQLApi
{
    // Simple grapql API based on Graphql.NET + NReco.Data
    // If you're looking for production-ready Graphql-to-SQL engine try this component:
    // https://www.nrecosite.com/graphql_to_sql_database.aspx
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseIIS()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}


================================================
FILE: examples/SqliteDemo.GraphQLApi/Properties/launchSettings.json
================================================
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:62500/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "index.html",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "SqliteDemo.GraphQLApi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "http://localhost:5000/index.html",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

================================================
FILE: examples/SqliteDemo.GraphQLApi/SqliteDemo.GraphQLAPI.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.*" />
    <PackageReference Include="NReco.Data" Version="1.2.*" />
    <PackageReference Include="GraphQL" Version="2.4.0" />
  </ItemGroup>

  <ItemGroup>  
    <MySourceFiles Include="$(MSBuildProjectDirectory)/../DemoData/northwind.db"/>  
  </ItemGroup>
  <Target Name="CopySqliteDbFile" BeforeTargets="Build">
	<Copy SourceFiles="@(MySourceFiles)"  
          DestinationFolder="$(MSBuildProjectDirectory)"/>  
  </Target>  
  
</Project>


================================================
FILE: examples/SqliteDemo.GraphQLApi/Startup.cs
================================================
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.IO;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

using SqliteDemo.GraphQLApi.Db.Models;

using NReco.Data;
using GraphQL;
using GraphQL.Types;
using SqliteDemo.GraphQLApi.Db.GraphQL;

namespace SqliteDemo.GraphQLApi {

	// Simple grapql API based on Graphql.NET + NReco.Data
	// If you're looking for production-ready Graphql-to-SQL engine try this component:
	// https://www.nrecosite.com/graphql_to_sql_database.aspx
	public class Startup {
		const string dbConnectionFile = "northwind.db";
		protected string ApplicationPath;

		public Startup(IWebHostEnvironment env) {
			var builder = new ConfigurationBuilder()
				.SetBasePath(env.ContentRootPath)
				.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
				.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
				.AddEnvironmentVariables();
			ApplicationPath = env.ContentRootPath;

			Configuration = builder.Build();
		}

		public IConfigurationRoot Configuration {
			get;
		}

		// This method gets called by the runtime. Use this method to add services to the container.
		public void ConfigureServices(IServiceCollection services) {
			services.AddLogging(loggingBuilder => {
				var loggingSection = Configuration.GetSection("Logging");
				loggingBuilder.AddConfiguration(loggingSection);
				loggingBuilder.AddConsole();
			});

			// NReco.Data services
			InjectNRecoDataService(services);
			
			InjectGraphQLSchema(services);
			services.AddScoped<IDatabaseMetadata, DatabaseMetadata>();
			
			// Add framework services.
			services.AddMvc(options => {
				options.EnableEndpointRouting = false;
			});
		}

		protected void InjectGraphQLSchema(IServiceCollection services) {
			services.AddScoped<Schema>((servicePrv) => {
				var dbAdapter = servicePrv.GetRequiredService<DbDataAdapter>();
				var metaDatabase = servicePrv.GetRequiredService<IDatabaseMetadata>();
				var schema = new Schema { Query = new GraphQLQuery(dbAdapter, metaDatabase) };
				schema.Initialize();
				return schema;
			});
		}

		protected void InjectNRecoDataService(IServiceCollection services) {

			services.AddSingleton<IDbFactory, DbFactory>((servicePrv) => {
				// db-provider specific configuration code:
				return new DbFactory(Microsoft.Data.Sqlite.SqliteFactory.Instance) {
					LastInsertIdSelectText = "SELECT last_insert_rowid()"
				};
			});
			services.AddSingleton<IDbCommandBuilder, DbCommandBuilder>((servicePrv) => {
				var dbCmdBuilder = new DbCommandBuilder(servicePrv.GetRequiredService<IDbFactory>());
				// initialize dataviews here:
				//dbCmdBuilder.Views["articles_view"] = ConfigureArticlesView();//new DbDataView(...);
				return dbCmdBuilder;
			});

			services.AddScoped<IDbConnection>((servicePrv) => {
				var dbFactory = servicePrv.GetRequiredService<IDbFactory>();
				var conn = dbFactory.CreateConnection();
				conn.ConnectionString = String.Format("Filename={0}", Path.Combine(ApplicationPath, dbConnectionFile));
				return conn;
			});

			services.AddScoped<DbDataAdapter>();
		}

		// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
		public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) {

			app.UseDefaultFiles();
			app.UseStaticFiles();

			app.UseMvc();
		}

	}
}

================================================
FILE: examples/SqliteDemo.GraphQLApi/appsettings.json
================================================
{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}


================================================
FILE: examples/SqliteDemo.GraphQLApi/web.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->

  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>


================================================
FILE: examples/SqliteDemo.GraphQLApi/wwwroot/index.html
================================================
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta charset="utf-8" />
    <title>NReco.Data GraphQL Example</title>

    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <!-- bootstrap (optional) -->
    <link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
    <script type="text/javascript" src="//code.jquery.com/jquery-2.1.4.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.js"></script>

</head>
<body>

    <div class="container">
        <h1>
            NReco.Data GraphQL Example
            <small>simple GraphQL API to SQLite database (based on table meta-data)</small>
        </h1>

        <h3>Load data by table name</h3>
        <div class="row">
            <div class="col-md-6">
                <textarea class="form-control" id="selectRows" rows="8">
					$.ajax("api/GraphQL", {
						type: "GET",
						data: {
							query : "{ Customers_list { CustomerID CompanyName } }"
						}
					}).success(function (res) {
						$('#selectRowsResult').text( JSON.stringify(res) );
					});
                </textarea>
                <br/>
                <a href="javascript:;" rel="selectRows" class="btn btn-default run">Run</a>
            </div>
            <div class="col-md-6">
                <pre id="selectRowsResult" style="white-space:pre-wrap; max-height:250px;"></pre>
            </div>
        </div>

        <h3>Load one row by using arguments</h3>
        <div class="row">
            <div class="col-md-6">
                <textarea class="form-control" id="selectOneRow" rows="5">
					$.ajax("api/GraphQL", {
						type: "GET",
						data: {
							query: "{ Customers(CustomerID: \"ALFKI\") { CustomerID CompanyName } }"
						}
					}).success(function (res) {
						$('#selectOneRowResult').text( JSON.stringify(res) );
					});
                </textarea>
                <br/>
                <a href="javascript:;" rel="selectOneRow" class="btn btn-default run">Run</a>
            </div>
            <div class="col-md-6">
                <pre id="selectOneRowResult" style="white-space:pre-wrap; max-height:150px;"></pre>
            </div>
        </div>

    </div>

    <script type="text/javascript">
        $(function() {
            $('.run').click(function () {
                var $textarea = $('#' + $(this).attr('rel'));
                eval($textarea.val());
            });
        });
    </script>

</body>
</html>


================================================
FILE: examples/SqliteDemo.MVCApplication/.bowerrc
================================================
{
  "directory": "wwwroot/lib"
}


================================================
FILE: examples/SqliteDemo.MVCApplication/.vscode/launch.json
================================================
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceRoot}\\bin\\Debug\\netcoreapp1.0\\SqliteDemo.MVCApplication.dll",
            "args": [],
            "cwd": "${workspaceRoot}",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart",
            "launchBrowser": {
                "enabled": true,
                "args": "${auto-detect-url}",
                "windows": {
                    "command": "cmd.exe",
                    "args": "/C start ${auto-detect-url}"
                },
                "osx": {
                    "command": "open"
                },
                "linux": {
                    "command": "xdg-open"
                }
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceRoot}/Views"
            }
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command.pickProcess}"
        }
    ]
}

================================================
FILE: examples/SqliteDemo.MVCApplication/.vscode/tasks.json
================================================
{
    "version": "0.1.0",
    "command": "dotnet",
    "isShellCommand": true,
    "args": [],
    "tasks": [
        {
            "taskName": "build",
            "args": [
                "${workspaceRoot}\\project.json"
            ],
            "isBuildCommand": true,
            "problemMatcher": "$msCompile"
        }
    ]
}

================================================
FILE: examples/SqliteDemo.MVCApplication/Controllers/ArticleController.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

using SqliteDemo.MVCApplication.Db.Context;
using SqliteDemo.MVCApplication.Db.Models;
using SqliteDemo.MVCApplication.Db.Interfaces;
using SqliteDemo.MVCApplication.Db.Repositories;

namespace SqliteDemo.MVCApplication.Controllers
{
	public class ArticleController : Controller {
		IArticleRepository db;

		public ArticleController(ArticleRepository articleRepository) {
			db = articleRepository;
		}

		public IActionResult Add() {
			return View(
				new Article(){
					UsersList = db.GetAllAuthors().ToList<User>()
				}
			);
		}

		[HttpPost]
		public IActionResult Add(Article a) {
			TryValidateModel(a);
			if (ModelState.IsValid) {
				db.Add(a);
				return RedirectToAction("List");
			}
			return View(a);
		}

		public IActionResult Edit(int? id) {
			if (id.HasValue) {
				var article = db.FindById(id.Value);
				article.UsersList = db.GetAllAuthors().ToList<User>();
				return View(
					article
				);
			}
			return NotFound();
		}

		[HttpPost]
		[ValidateAntiForgeryToken]
		public async Task<IActionResult> Edit(Article article) {
			if (ModelState.IsValid) {
				await db.Edit(article);
				return RedirectToAction("List");
			} else {
				return View(article);
			}
		}

		public IActionResult ArticleItem(int id = 0) {
			if (id != 0) {
				return View(
					db.FindById(id)
				);
			}

			return View(new Article());
        }

		public IActionResult Delete(int? id) {
			if (id.HasValue) {
				db.Remove(id.Value);
				return RedirectToAction("List");
			}
			return NotFound();
		}

		public IActionResult List() {
			return View(db.GetArticles());
		}
    }
}


================================================
FILE: examples/SqliteDemo.MVCApplication/Db/Context/DbContext.cs
================================================
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

using SqliteDemo.MVCApplication.Db.Models;

namespace SqliteDemo.MVCApplication.Db.Context {
    public class DbCoreContext : DbContext {
		public DbSet<Article> Articles {
			get; set;
		}

		public DbSet<User> Users {
			get; set;
		}

		public DbCoreContext(DbContextOptions<DbCoreContext> options):base(options) {
		}

		protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
			//optionsBuilder.UseSqlite("Filename=./coreApp2.db");
		}
	}
}


================================================
FILE: examples/SqliteDemo.MVCApplication/Db/Interfaces/IArticleRepository.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using SqliteDemo.MVCApplication.Db.Models;
using SqliteDemo.MVCApplication.Db.Views;

namespace SqliteDemo.MVCApplication.Db.Interfaces {
    interface IArticleRepository {
			void Add(Article a);
			Task<int> Edit(Article a);
			void Remove(int id);
			IEnumerable<ArticleView> GetArticles();
			Article FindById(int id);
			IEnumerable<User> GetAllAuthors();
		}
}


================================================
FILE: examples/SqliteDemo.MVCApplication/Db/Models/Article.cs
================================================
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;


namespace SqliteDemo.MVCApplication.Db.Models {
	public class Article {
		public int? Id {
			get; set;
		}

		[Required]
		public string Title {
			get; set;
		}
		[Required]
		public int AuthorId {
			get; set;
		}
		public string Content {
			get; set;
		}

		[NotMapped]
		public List<User> UsersList {get; set; } = new List<User>();
		[NotMapped]
		public string AuthorName {get; set; }
	}
}

================================================
FILE: examples/SqliteDemo.MVCApplication/Db/Models/User.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using System.ComponentModel.DataAnnotations;

namespace SqliteDemo.MVCApplication.Db.Models {
    public class User {
		public int Id {
			get; set;
		}
		public string FirstName {
			get; set;
		}
		public string SecondName {
			get; set;
		}
	}
}


================================================
FILE: examples/SqliteDemo.MVCApplication/Db/Repositories/ArticleRepository.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

using SqliteDemo.MVCApplication.Db.Models;
using SqliteDemo.MVCApplication.Db.Views;
using SqliteDemo.MVCApplication.Db.Interfaces;
using SqliteDemo.MVCApplication.Db.Context;

using NReco.Data;
using NReco.Data.Relex;

namespace SqliteDemo.MVCApplication.Db.Repositories {
    public class ArticleRepository : IArticleRepository {

		protected DbCoreContext dbContext;
		protected DbDataAdapter _DbNRecoAdapter;

		public ArticleRepository(IServiceProvider serviceProvider) {
			dbContext = serviceProvider.GetService<DbCoreContext>();
			_DbNRecoAdapter = serviceProvider.GetService<DbDataAdapter>();
		}

		public async void Add(Article a) {
			//dbContext.Articles.Add(a);
			//await dbContext.SaveChangesAsync();
			await _DbNRecoAdapter.InsertAsync("Articles", a);
		}

		public async Task<int> Edit(Article a) {
			return await _DbNRecoAdapter.UpdateAsync( 
				new Query(
					"Articles", 
					(QField)"Id" == (QConst)a.Id 
				), 
				a
			);
		}

		public Article FindById(int id) {
			var result = _DbNRecoAdapter.Select( 
				new Query(
					"Articles", 
					(QField)"Id" == (QConst)id
				)
			).Single<Article>(); 
			return result;
		}

		public IEnumerable<ArticleView> GetArticles() {
			return _DbNRecoAdapter.Select( new Query("articles_view") ).ToList<ArticleView>(); 
		}

		public void Remove(int id) {
			_DbNRecoAdapter.Delete(
				new Query(
					"Articles", 
					(QField)"Id" == (QConst)id 
				)
			);
		}

		public IEnumerable<User> GetAllAuthors() {
			var relexParser = new RelexParser();
			var relexQuery = "Users[*;Id asc]";
			var q = relexParser.Parse(relexQuery);

			return _DbNRecoAdapter.Select( q ).ToList<User>();
		}
	}
} 


================================================
FILE: examples/SqliteDemo.MVCApplication/Db/Views/ArticleView.cs
================================================
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;


namespace SqliteDemo.MVCApplication.Db.Views {
	public class ArticleView {
		public int? Id {
			get; set;
		}
		public string Title {
			get; set;
		}
		public int AuthorId {
			get; set;
		}
		public string Content {
			get; set;
		}
		public string AuthorFirstName {get; set; }
		public string AuthorLastName {get; set; }
	}
}

================================================
FILE: examples/SqliteDemo.MVCApplication/Program.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;

namespace SqliteDemo.MVCApplication
{
    // CRUD app that uses both EF Core AND NReco.Data
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseIIS()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}


================================================
FILE: examples/SqliteDemo.MVCApplication/Project_Readme.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Welcome to ASP.NET Core</title>
    <style>
        html {
            background: #f1f1f1;
            height: 100%;
        }

        body {
            background: #fff;
            color: #505050;
            font: 14px 'Segoe UI', tahoma, arial, helvetica, sans-serif;
            margin: 1%;
            min-height: 95.5%;
            border: 1px solid silver;
            position: relative;
        }

        #header {
            padding: 0;
        }

            #header h1 {
                font-size: 44px;
                font-weight: normal;
                margin: 0;
                padding: 10px 30px 10px 30px;
            }

            #header span {
                margin: 0;
                padding: 0 30px;
                display: block;
            }

            #header p {
                font-size: 20px;
                color: #fff;
                background: #007acc;
                padding: 0 30px;
                line-height: 50px;
                margin-top: 25px;

            }

                #header p a {
                    color: #fff;
                    text-decoration: underline;
                    font-weight: bold;
                    padding-right: 35px;
                    background: no-repeat right bottom url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAWCAMAAAAcqPc3AAAANlBMVEUAAAAAeswfitI9mthXp91us+KCvuaTx+mjz+2x1u+83PLH4vTR5/ba7Pjj8Pns9fv1+v3////wy3dWAAAAAXRSTlMAQObYZgAAAHxJREFUeNp9kVcSwCAIRMHUYoH7XzaxOxJ9P8oyQ1uIqNPwh3s2aLmIM2YtqrLcQIeQEylhuCeUOlhgve5yoBCfWmlnlgkN4H8ykbpaE7gR03AbUHiwoOxUH9Xp+ubd41p1HF3mBPrfC87BHeTdaB3ceeKL9HGpcvX9zu6+DdMWT9KQPvYAAAAASUVORK5CYII=);
                }

        #main {
            padding: 5px 30px;
            clear: both;
        }

        .section {
            width: 21.7%;
            float: left;
            margin: 0 0 0 4%;
        }

            .section h2 {
                font-size: 13px;
                text-transform: uppercase;
                margin: 0;
                border-bottom: 1px solid silver;
                padding-bottom: 12px;
                margin-bottom: 8px;
            }

            .section.first {
                margin-left: 0;
            }

                .section.first h2 {
                    font-size: 24px;
                    text-transform: none;
                    margin-bottom: 25px;
                    border: none;
                }

                .section.first li {
                    border-top: 1px solid silver;
                    padding: 8px 0;
                }

            .section.last {
                margin-right: 0;
            }

        ul {
            list-style: none;
            padding: 0;
            margin: 0;
            line-height: 20px;
        }

        li {
            padding: 4px 0;
        }

        a {
            color: #267cb2;
            text-decoration: none;
        }

            a:hover {
                text-decoration: underline;
            }

        #footer {
            clear: both;
            padding-top: 50px;
        }

            #footer p {
                position: absolute;
                bottom: 10px;
            }
    </style>
</head>
<body>

    <div id="header">
        <h1>Welcome to ASP.NET Core</h1>
        <span>
            We've made some big updates in this release, so it’s <b>important</b> that you spend
            a few minutes to learn what’s new.
        </span>
        <p>You've created a new ASP.NET Core project. <a href="http://go.microsoft.com/fwlink/?LinkId=518016">Learn what's new</a></p>
    </div>

    <div id="main">
        <div class="section first">
            <h2>This application consists of:</h2>
            <ul>
                <li>Sample pages using ASP.NET Core MVC</li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=518004">Bower</a> for managing client-side libraries</li>
                <li>Theming using <a href="http://go.microsoft.com/fwlink/?LinkID=398939">Bootstrap</a></li>
            </ul>
        </div>
        <div class="section">
            <h2>How to</h2>
            <ul>
                <li><a href="http://go.microsoft.com/fwlink/?LinkID=398600">Add a Controller and View</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkID=699562">Add an appsetting in config and access it in app.</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=699315">Manage User Secrets using Secret Manager.</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=699316">Use logging to log a message.</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=699317">Add packages using NuGet.</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=699318">Add client packages using Bower.</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=699319">Target development, staging or production environment.</a></li>
            </ul>
        </div>
        <div class="section">
            <h2>Overview</h2>
            <ul>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=518008">Conceptual overview of what is ASP.NET Core</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=699320">Fundamentals of ASP.NET Core such as Startup and middleware.</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=398602">Working with Data</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkId=398603">Security</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkID=699321">Client side development</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkID=699322">Develop on different platforms</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkID=699323">Read more on the documentation site</a></li>
            </ul>
        </div>
        <div class="section last">
            <h2>Run & Deploy</h2>
            <ul>
                <li><a href="http://go.microsoft.com/fwlink/?LinkID=517851">Run your app</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkID=517853">Run tools such as EF migrations and more</a></li>
                <li><a href="http://go.microsoft.com/fwlink/?LinkID=398609">Publish to Microsoft Azure Web Apps</a></li>
            </ul>
        </div>

        <div id="footer">
            <p>We would love to hear your <a href="http://go.microsoft.com/fwlink/?LinkId=518015">feedback</a></p>
        </div>
    </div>

</body>
</html>


================================================
FILE: examples/SqliteDemo.MVCApplication/Properties/launchSettings.json
================================================
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:61473/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "SqliteDemo.MVCApplication": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

================================================
FILE: examples/SqliteDemo.MVCApplication/SqliteDemo.MVCApplication.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <None Update="wwwroot\**\*">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </None>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.*" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.*">
      <PrivateAssets>All</PrivateAssets>
    </PackageReference>
	
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.*" />
	
    <PackageReference Include="NReco.Data" Version="1.2.*" />
    <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.*" />
  </ItemGroup>

  <Target Name="PrepublishScript" BeforeTargets="PrepareForPublish">
    <Exec Command="bower install" />
    <Exec Command="dotnet bundle" />
  </Target>

  <ItemGroup>
    <DotNetCliToolReference Include="BundlerMinifier.Core" Version="3.2.*" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />
  </ItemGroup>

</Project>


================================================
FILE: examples/SqliteDemo.MVCApplication/Startup.cs
================================================
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.IO;

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

using Microsoft.EntityFrameworkCore;

using SqliteDemo.MVCApplication.Db.Context;
using SqliteDemo.MVCApplication.Db.Models;
using SqliteDemo.MVCApplication.Db.Interfaces;
using SqliteDemo.MVCApplication.Db.Repositories;

using NReco.Data;

namespace SqliteDemo.MVCApplication
{
	// CRUD app that uses both EF Core AND NReco.Data
    public class Startup
    {
        const string dbConnectionFile = "mvcapp_database.db";
        protected string ApplicationPath;

        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();

            ApplicationPath = env.ContentRootPath;
            Configuration = builder.Build();
        }

        public IConfigurationRoot Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
			services.AddLogging(loggingBuilder => {
				var loggingSection = Configuration.GetSection("Logging");
				loggingBuilder.AddConfiguration(loggingSection);
				loggingBuilder.AddConsole();
			});

			var dbConnectionString = String.Format("Filename={0}", Path.Combine(ApplicationPath, dbConnectionFile));
			// Add EF framework services.
			services.AddDbContext<DbCoreContext>(
                options => options.UseSqlite(
                   dbConnectionString
                )
            );
			// let's inject NReco.Data services (based on EF DBConnection)
            InjectNRecoDataService(services);
			services.AddScoped<ArticleRepository>();

            // Add framework services.
            services.AddMvc(options => {
				options.EnableEndpointRouting = false;
			});
		}

        protected void InjectNRecoDataService(IServiceCollection services) {

            services.AddSingleton<IDbFactory,DbFactory>( (servicePrv) => {
				// db-provider specific configuration code:
				return new DbFactory(Microsoft.Data.Sqlite.SqliteFactory.Instance) {
					LastInsertIdSelectText = "SELECT last_insert_rowid()"
				};
			});
			services.AddSingleton<IDbCommandBuilder,DbCommandBuilder>( (servicePrv) => {
				var dbCmdBuilder = new DbCommandBuilder(servicePrv.GetRequiredService<IDbFactory>() );
				// initialize dataviews here:
				dbCmdBuilder.Views["articles_view"] = ConfigureArticlesView();//new DbDataView(...);
				return dbCmdBuilder;
			} );

            services.AddScoped<IDbConnection>( (servicePrv) => {
                var dbCoreContext = servicePrv.GetRequiredService<DbCoreContext>();
                var conn = dbCoreContext.Database.GetDbConnection();
                return conn;
            } );

			services.AddScoped<DbDataAdapter>();
        }

		protected DbDataView ConfigureArticlesView() {
			return new DbDataView(
				@"SELECT @columns FROM articles a
					LEFT JOIN Users u ON (u.Id=a.AuthorId)
				@where[ WHERE {0}] @orderby[ ORDER BY {0}]"
			) {
				FieldMapping = new Dictionary<string,string>() {
					{"Id", "a.Id"},
					{"*", "a.*, u.FirstName as AuthorFirstName, u.SecondName as AuthorLastName"}
				}
			};
		}

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseDeveloperExceptionPage();

            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
				routes.MapRoute(
					name: "articlelist",
					template: "articles",
					defaults: new {
						controller = "Article",
						action = "List"
					}
				);

				routes.MapRoute(
					name: "addnewarticle",
					template: "article/add/{*id}",
					defaults: new {
						controller = "Article",
						action = "Add"
					}
				);

				routes.MapRoute(
					name: "deletearticle",
					template: "article/delete/{*id}",
					defaults: new {
						controller = "Article",
						action = "Delete"
					}
				);

				routes.MapRoute(
					name: "articleedit",
					template: "article/edit/{*id}",
					defaults: new {
						controller = "Article",
						action = "Edit"
					}
				);

                routes.MapRoute(
                    name: "default",
                    template: "{controller=Article}/{action=List}/{id?}");
            });
        }
    }
}


================================================
FILE: examples/SqliteDemo.MVCApplication/Views/Article/Add.cshtml
================================================
@model SqliteDemo.MVCApplication.Db.Models.Article
@{
	ViewBag.Title = "Add Article";
}






<form class="form-horizontal" asp-action="add" asp-controller="Article">
	<div class="form-horizontal">
		<h4>Add Article</h4>
		<hr />
		<div asp-validation-summary="ModelOnly" class="text-danger"></div>
		<div class="form-group">
			<label asp-for="Title" class="col-md-2 control-label"></label>
			<div class="col-md-10">
				<input asp-for="Title" class="form-control" />
				<span asp-validation-for="Title" class="text-danger"></span>
			</div>
		</div>

		<div class="form-group">
			<label asp-for="Content" class="col-md-2 control-label"></label>
			<div class="col-md-10">
				<input asp-for="Content" class="form-control" />
			</div>
		</div>

		<div class="form-group">
			<label asp-for="AuthorId" class="col-md-2 control-label">Author</label>
			<div class="col-md-10">
				<select class="form-control" asp-for="AuthorId" asp-items="@(new SelectList(Model.UsersList,"Id","FirstName"))">
				</select>
			</div>
		</div>

		<div class="form-group">
			<div class="col-md-offset-2 col-md-10">
				<input type="submit" value="Add" class="btn btn-default" />
			</div>
		</div>
	</div>

</form>

@section scripts{
	<environment names="Development">
		<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
		<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
	</environment>
	<environment names="Staging,Production">
		<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"
				asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
				asp-fallback-test="window.jQuery && window.jQuery.validator">
		</script>
		<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"
				asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
				asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive">
		</script>
	</environment>
}

================================================
FILE: examples/SqliteDemo.MVCApplication/Views/Article/ArticleItem.cshtml
================================================
@model SqliteDemo.MVCApplication.Db.Models.Article

@{
    ViewData["Title"] = "Article";
}
<h2>@ViewData["Title"].</h2>
<h3>@ViewData["Message"]</h3>

@Model.Id

<p>Use this area to provide article information.</p>

@Model.Title

================================================
FILE: examples/SqliteDemo.MVCApplication/Views/Article/Edit.cshtml
================================================
@model SqliteDemo.MVCApplication.Db.Models.Article
@{
	ViewBag.Title = "Edit Article";
}

<form class="form-horizontal" asp-action="edit" asp-controller="article" asp-route-id="@Model.Id">

	<div class="form-horizontal">
		<h4>Edit Article</h4>
		<hr />
		<div asp-validation-summary="ModelOnly" class="text-danger"></div>
		<div class="form-group">
			<label asp-for="Title" class="col-md-2 control-label"></label>
			<div class="col-md-10">
				<input asp-for="Title" class="form-control" />
				<span asp-validation-for="Title" class="text-danger"></span>
			</div>
		</div>

		<div class="form-group">
			<label asp-for="Content" class="col-md-2 control-label"></label>
			<div class="col-md-10">
				<input asp-for="Content" class="form-control" />
			</div>
		</div>

		<div class="form-group">
			<label asp-for="AuthorId" class="col-md-2 control-label">Author</label>
			<div class="col-md-10">
				<select class="form-control" asp-for="AuthorId" asp-items="@(new SelectList(Model.UsersList,"Id","FirstName"))">
				</select>
			</div>
		</div>

		<div class="form-group">
			<div class="col-md-offset-2 col-md-10">
				<input type="submit" value="Submit" class="btn btn-default" />
			</div>
		</div>
	</div>

</form>

<div>
    <a class="btn btn-default" asp-action="List">Back to List</a>
</div>

@section scripts{
	<environment names="Development">
		<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
		<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
	</environment>
	<environment names="Staging,Production">
		<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"
				asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
				asp-fallback-test="window.jQuery && window.jQuery.validator">
		</script>
		<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"
				asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
				asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive">
		</script>
	</environment>
}

================================================
FILE: examples/SqliteDemo.MVCApplication/Views/Article/List.cshtml
================================================
@model IEnumerable<SqliteDemo.MVCApplication.Db.Views.ArticleView>

@{
    ViewData["Title"] = "Articles";
}
<h2>@ViewData["Title"].</h2>
<h3>@ViewData["Message"]</h3>

<p>
    <a asp-action="Add">Add New</a>
</p>
<table class="table">
    <thead>
        <tr>
			<th>
                @Html.DisplayNameFor(model => model.Id)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Title)
            </th>
            <th>
                Author
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Content)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
	@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Id)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.AuthorFirstName)
                @Html.DisplayFor(modelItem => item.AuthorLastName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Content)
            </td>
            @*<snippet_1>*@
            <td>
                <a asp-action="Edit" asp-route-id="@item.Id">Edit</a>
            </td>
            <td>
                <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
            </td>
            @*</snippet_1>*@
        </tr>
	}
    </tbody>
</table>

<script type="text/javascript">
	jQuery(document).ready(function () {

	});
</script>

================================================
FILE: examples/SqliteDemo.MVCApplication/Views/Shared/Error.cshtml
================================================
@{
    ViewData["Title"] = "Error";
}

<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>

<h3>Development Mode</h3>
<p>
    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
    <strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application.
</p>


================================================
FILE: examples/SqliteDemo.MVCApplication/Views/Shared/_Layout.cshtml
================================================
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - MVC NReco.Data Example</title>

    <environment names="Development">
		<script src="~/lib/jquery/dist/jquery.js"></script>

        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        <link rel="stylesheet" href="~/css/site.css" />
    </environment>
    <environment names="Staging,Production">
		<script src="~/lib/jquery/dist/jquery.js"></script>

        <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"
              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">MVC Application</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a asp-area="" asp-controller="Article" asp-action="List">Articles</a></li>
                </ul>
            </div>
        </div>
    </div>
    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year</p>
        </footer>
    </div>

    <environment names="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
    </environment>
    <environment names="Staging,Production">
        <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
                asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
                asp-fallback-test="window.jQuery">
        </script>
        <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js"
                asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
                asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal">
        </script>
        <script src="~/js/site.min.js" asp-append-version="true"></script>
    </environment>

    @RenderSection("scripts", required: false)
</body>
</html>


================================================
FILE: examples/SqliteDemo.MVCApplication/Views/_ViewImports.cshtml
================================================
@using SqliteDemo.MVCApplication
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers


================================================
FILE: examples/SqliteDemo.MVCApplication/Views/_ViewStart.cshtml
================================================
@{
    Layout = "_Layout";
}


================================================
FILE: examples/SqliteDemo.MVCApplication/appsettings.json
================================================
{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}


================================================
FILE: examples/SqliteDemo.MVCApplication/bower.json
================================================
{
  "name": "asp.net",
  "private": true,
  "dependencies": {
    "bootstrap": "3.3.6",
    "jquery": "2.2.0",
    "jquery-validation": "1.14.0",
    "jquery-validation-unobtrusive": "3.2.6"
  }
}


================================================
FILE: examples/SqliteDemo.MVCApplication/bundleconfig.json
================================================
// Configure bundling and minification for the project.
// More info at https://go.microsoft.com/fwlink/?LinkId=808241
[
  {
    "outputFileName": "wwwroot/css/site.min.css",
    // An array of relative input file paths. Globbing patterns supported
    "inputFiles": [
      "wwwroot/css/site.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/site.min.js",
    "inputFiles": [
      "wwwroot/js/site.js"
    ],
    // Optionally specify minification options
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    // Optinally generate .map file
    "sourceMap": false
  }
]


================================================
FILE: examples/SqliteDemo.MVCApplication/web.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->

  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>


================================================
FILE: examples/SqliteDemo.MVCApplication/wwwroot/_references.js
================================================
/// <autosync enabled="true" />
/// <reference path="js/site.js" />
/// <reference path="lib/bootstrap/dist/js/bootstrap.js" />
/// <reference path="lib/jquery/dist/jquery.js" />
/// <reference path="lib/jquery-validation/dist/jquery.validate.js" />
/// <reference path="lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js" />


================================================
FILE: examples/SqliteDemo.MVCApplication/wwwroot/css/site.css
================================================
body {
    padding-top: 50px;
    padding-bottom: 20px;
}

/* Wrapping element */
/* Set some basic padding to keep content from hitting the edges */
.body-content {
    padding-left: 15px;
    padding-right: 15px;
}

/* Set widths on the form inputs since otherwise they're 100% wide */
input,
select,
textarea {
    max-width: 280px;
}

/* Carousel */
.carousel-caption p {
    font-size: 20px;
    line-height: 1.4;
}

/* Make .svg files in the carousel display properly in older browsers */
.carousel-inner .item img[src$=".svg"]
{
    width: 100%;
}

/* Hide/rearrange for smaller screens */
@media screen and (max-width: 767px) {
  /* Hide captions */
  .carousel-caption {
    display: none
  }
}


================================================
FILE: examples/SqliteDemo.MVCApplication/wwwroot/js/site.js
================================================
// Write your Javascript code.


================================================
FILE: examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/.bower.json
================================================
{
  "name": "bootstrap",
  "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
  "keywords": [
    "css",
    "js",
    "less",
    "mobile-first",
    "responsive",
    "front-end",
    "framework",
    "web"
  ],
  "homepage": "http://getbootstrap.com",
  "license": "MIT",
  "moduleType": "globals",
  "main": [
    "less/bootstrap.less",
    "dist/js/bootstrap.js"
  ],
  "ignore": [
    "/.*",
    "_config.yml",
    "CNAME",
    "composer.json",
    "CONTRIBUTING.md",
    "docs",
    "js/tests",
    "test-infra"
  ],
  "dependencies": {
    "jquery": "1.9.1 - 2"
  },
  "version": "3.3.6",
  "_release": "3.3.6",
  "_resolution": {
    "type": "version",
    "tag": "v3.3.6",
    "commit": "81df608a40bf0629a1dc08e584849bb1e43e0b7a"
  },
  "_source": "git://github.com/twbs/bootstrap.git",
  "_target": "3.3.6",
  "_originalSource": "bootstrap"
}

================================================
FILE: examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2011-2015 Twitter, Inc

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css
================================================
/*!
 * Bootstrap v3.3.6 (http://getbootstrap.com)
 * Copyright 2011-2015 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn-default.disabled,
.btn-primary.disabled,
.btn-success.disabled,
.btn-info.disabled,
.btn-warning.disabled,
.btn-danger.disabled,
.btn-default[disabled],
.btn-primary[disabled],
.btn-success[disabled],
.btn-info[disabled],
.btn-warning[disabled],
.btn-danger[disabled],
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-danger {
  -webkit-box-shadow: none;
          box-shadow: none;
}
.btn-default .badge,
.btn-primary .badge,
.btn-success .badge,
.btn-info .badge,
.btn-warning .badge,
.btn-danger .badge {
  text-shadow: none;
}
.btn:active,
.btn.active {
  background-image: none;
}
.btn-default {
  text-shadow: 0 1px 0 #fff;
  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #dbdbdb;
  border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
  background-color: #e0e0e0;
  background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
  background-color: #e0e0e0;
  border-color: #dbdbdb;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
  background-color: #e0e0e0;
  background-image: none;
}
.btn-primary {
  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #245580;
}
.btn-primary:hover,
.btn-primary:focus {
  background-color: #265a88;
  background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
  background-color: #265a88;
  border-color: #245580;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
  background-color: #265a88;
  background-image: none;
}
.btn-success {
  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
  background-color: #419641;
  background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
  background-color: #419641;
  border-color: #3e8f3e;
}
.btn-success.disabled,
.btn-success[disabled],
fieldset[disabled] .btn-success,
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus,
.btn-success.disabled:active,
.btn-success[disabled]:active,
fieldset[disabled] .btn-success:active,
.btn-success.disabled.active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success.active {
  background-color: #419641;
  background-image: none;
}
.btn-info {
  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
  background-color: #2aabd2;
  background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
  background-color: #2aabd2;
  border-color: #28a4c9;
}
.btn-info.disabled,
.btn-info[disabled],
fieldset[disabled] .btn-info,
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus,
.btn-info.disabled:active,
.btn-info[disabled]:active,
fieldset[disabled] .btn-info:active,
.btn-info.disabled.active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info.active {
  background-color: #2aabd2;
  background-image: none;
}
.btn-warning {
  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
  background-color: #eb9316;
  background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
  background-color: #eb9316;
  border-color: #e38d13;
}
.btn-warning.disabled,
.btn-warning[disabled],
fieldset[disabled] .btn-warning,
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus,
.btn-warning.disabled:active,
.btn-warning[disabled]:active,
fieldset[disabled] .btn-warning:active,
.btn-warning.disabled.active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning.active {
  background-color: #eb9316;
  background-image: none;
}
.btn-danger {
  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
  background-color: #c12e2a;
  background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
  background-color: #c12e2a;
  border-color: #b92c28;
}
.btn-danger.disabled,
.btn-danger[disabled],
fieldset[disabled] .btn-danger,
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus,
.btn-danger.disabled:active,
.btn-danger[disabled]:active,
fieldset[disabled] .btn-danger:active,
.btn-danger.disabled.active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger.active {
  background-color: #c12e2a;
  background-image: none;
}
.thumbnail,
.img-thumbnail {
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  background-color: #e8e8e8;
  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
  background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  background-color: #2e6da4;
  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
  background-repeat: repeat-x;
}
.navbar-default {
  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .active > a {
  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
  background-repeat: repeat-x;
  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-radius: 4px;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .active > a {
  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
  background-repeat: repeat-x;
  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
  border-radius: 0;
}
@media (max-width: 767px) {
  .navbar .navbar-nav .open .dropdown-menu > .active > a,
  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #fff;
    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
    background-repeat: repeat-x;
  }
}
.alert {
  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
  background-repeat: repeat-x;
  border-color: #b2dba1;
}
.alert-info {
  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
  background-repeat: repeat-x;
  border-color: #9acfea;
}
.alert-warning {
  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
  background-repeat: repeat-x;
  border-color: #f5e79e;
}
.alert-danger {
  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
  background-repeat: repeat-x;
  border-color: #dca7a7;
}
.progress {
  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar {
  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar-success {
  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar-info {
  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar-warning {
  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar-danger {
  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar-striped {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
.list-group {
  border-radius: 4px;
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  text-shadow: 0 -1px 0 #286090;
  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
  background-repeat: repeat-x;
  border-color: #2b669a;
}
.list-group-item.active .badge,
.list-group-item.active:hover .badge,
.list-group-item.active:focus .badge {
  text-shadow: none;
}
.panel {
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
  background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
  background-repeat: repeat-x;
}
.panel-success > .panel-heading {
  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
  background-repeat: repeat-x;
}
.panel-info > .panel-heading {
  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
  background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
  background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
  background-repeat: repeat-x;
}
.well {
  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
  background-repeat: repeat-x;
  border-color: #dcdcdc;
  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */


================================================
FILE: examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/dist/css/bootstrap.css
================================================
/*!
 * Bootstrap v3.3.6 (http://getbootstrap.com)
 * Copyright 2011-2015 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -webkit-text-size-adjust: 100%;
      -ms-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  margin: .67em 0;
  font-size: 2em;
}
mark {
  color: #000;
  background: #ff0;
}
small {
  font-size: 80%;
}
sub,
sup {
  position: relative;
  font-size: 75%;
  line-height: 0;
  vertical-align: baseline;
}
sup {
  top: -.5em;
}
sub {
  bottom: -.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  height: 0;
  -webkit-box-sizing: content-box;
     -moz-box-sizing: content-box;
          box-sizing: content-box;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  margin: 0;
  font: inherit;
  color: inherit;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  padding: 0;
  border: 0;
}
input {
  line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
  padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
input[type="search"] {
  -webkit-box-sizing: content-box;
     -moz-box-sizing: content-box;
          box-sizing: content-box;
  -webkit-appearance: textfield;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  padding: .35em .625em .75em;
  margin: 0 2px;
  border: 1px solid #c0c0c0;
}
legend {
  padding: 0;
  border: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-spacing: 0;
  border-collapse: collapse;
}
td,
th {
  padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    color: #000 !important;
    text-shadow: none !important;
    background: transparent !important;
    -webkit-box-shadow: none !important;
            box-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;

    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}
@font-face {
  font-family: 'Glyphicons Halflings';

  src: url('../fonts/glyphicons-halflings-regular.eot');
  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: 'Glyphicons Halflings';
  font-style: normal;
  font-weight: normal;
  line-height: 1;

  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
  content: "\002a";
}
.glyphicon-plus:before {
  content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
  content: "\20ac";
}
.glyphicon-minus:before {
  content: "\2212";
}
.glyphicon-cloud:before {
  content: "\2601";
}
.glyphicon-envelope:before {
  content: "\2709";
}
.glyphicon-pencil:before {
  content: "\270f";
}
.glyphicon-glass:before {
  content: "\e001";
}
.glyphicon-music:before {
  content: "\e002";
}
.glyphicon-search:before {
  content: "\e003";
}
.glyphicon-heart:before {
  content: "\e005";
}
.glyphicon-star:before {
  content: "\e006";
}
.glyphicon-star-empty:before {
  content: "\e007";
}
.glyphicon-user:before {
  content: "\e008";
}
.glyphicon-film:before {
  content: "\e009";
}
.glyphicon-th-large:before {
  content: "\e010";
}
.glyphicon-th:before {
  content: "\e011";
}
.glyphicon-th-list:before {
  content: "\e012";
}
.glyphicon-ok:before {
  content: "\e013";
}
.glyphicon-remove:before {
  content: "\e014";
}
.glyphicon-zoom-in:before {
  content: "\e015";
}
.glyphicon-zoom-out:before {
  content: "\e016";
}
.glyphicon-off:before {
  content: "\e017";
}
.glyphicon-signal:before {
  content: "\e018";
}
.glyphicon-cog:before {
  content: "\e019";
}
.glyphicon-trash:before {
  content: "\e020";
}
.glyphicon-home:before {
  content: "\e021";
}
.glyphicon-file:before {
  content: "\e022";
}
.glyphicon-time:before {
  content: "\e023";
}
.glyphicon-road:before {
  content: "\e024";
}
.glyphicon-download-alt:before {
  content: "\e025";
}
.glyphicon-download:before {
  content: "\e026";
}
.glyphicon-upload:before {
  content: "\e027";
}
.glyphicon-inbox:before {
  content: "\e028";
}
.glyphicon-play-circle:before {
  content: "\e029";
}
.glyphicon-repeat:before {
  content: "\e030";
}
.glyphicon-refresh:before {
  content: "\e031";
}
.glyphicon-list-alt:before {
  content: "\e032";
}
.glyphicon-lock:before {
  content: "\e033";
}
.glyphicon-flag:before {
  content: "\e034";
}
.glyphicon-headphones:before {
  content: "\e035";
}
.glyphicon-volume-off:before {
  content: "\e036";
}
.glyphicon-volume-down:before {
  content: "\e037";
}
.glyphicon-volume-up:before {
  content: "\e038";
}
.glyphicon-qrcode:before {
  content: "\e039";
}
.glyphicon-barcode:before {
  content: "\e040";
}
.glyphicon-tag:before {
  content: "\e041";
}
.glyphicon-tags:before {
  content: "\e042";
}
.glyphicon-book:before {
  content: "\e043";
}
.glyphicon-bookmark:before {
  content: "\e044";
}
.glyphicon-print:before {
  content: "\e045";
}
.glyphicon-camera:before {
  content: "\e046";
}
.glyphicon-font:before {
  content: "\e047";
}
.glyphicon-bold:before {
  content: "\e048";
}
.glyphicon-italic:before {
  content: "\e049";
}
.glyphicon-text-height:before {
  content: "\e050";
}
.glyphicon-text-width:before {
  content: "\e051";
}
.glyphicon-align-left:before {
  content: "\e052";
}
.glyphicon-align-center:before {
  content: "\e053";
}
.glyphicon-align-right:before {
  content: "\e054";
}
.glyphicon-align-justify:before {
  content: "\e055";
}
.glyphicon-list:before {
  content: "\e056";
}
.glyphicon-indent-left:before {
  content: "\e057";
}
.glyphicon-indent-right:before {
  content: "\e058";
}
.glyphicon-facetime-video:before {
  content: "\e059";
}
.glyphicon-picture:before {
  content: "\e060";
}
.glyphicon-map-marker:before {
  content: "\e062";
}
.glyphicon-adjust:before {
  content: "\e063";
}
.glyphicon-tint:before {
  content: "\e064";
}
.glyphicon-edit:before {
  content: "\e065";
}
.glyphicon-share:before {
  content: "\e066";
}
.glyphicon-check:before {
  content: "\e067";
}
.glyphicon-move:before {
  content: "\e068";
}
.glyphicon-step-backward:before {
  content: "\e069";
}
.glyphicon-fast-backward:before {
  content: "\e070";
}
.glyphicon-backward:before {
  content: "\e071";
}
.glyphicon-play:before {
  content: "\e072";
}
.glyphicon-pause:before {
  content: "\e073";
}
.glyphicon-stop:before {
  content: "\e074";
}
.glyphicon-forward:before {
  content: "\e075";
}
.glyphicon-fast-forward:before {
  content: "\e076";
}
.glyphicon-step-forward:before {
  content: "\e077";
}
.glyphicon-eject:before {
  content: "\e078";
}
.glyphicon-chevron-left:before {
  content: "\e079";
}
.glyphicon-chevron-right:before {
  content: "\e080";
}
.glyphicon-plus-sign:before {
  content: "\e081";
}
.glyphicon-minus-sign:before {
  content: "\e082";
}
.glyphicon-remove-sign:before {
  content: "\e083";
}
.glyphicon-ok-sign:before {
  content: "\e084";
}
.glyphicon-question-sign:before {
  content: "\e085";
}
.glyphicon-info-sign:before {
  content: "\e086";
}
.glyphicon-screenshot:before {
  content: "\e087";
}
.glyphicon-remove-circle:before {
  content: "\e088";
}
.glyphicon-ok-circle:before {
  content: "\e089";
}
.glyphicon-ban-circle:before {
  content: "\e090";
}
.glyphicon-arrow-left:before {
  content: "\e091";
}
.glyphicon-arrow-right:before {
  content: "\e092";
}
.glyphicon-arrow-up:before {
  content: "\e093";
}
.glyphicon-arrow-down:before {
  content: "\e094";
}
.glyphicon-share-alt:before {
  content: "\e095";
}
.glyphicon-resize-full:before {
  content: "\e096";
}
.glyphicon-resize-small:before {
  content: "\e097";
}
.glyphicon-exclamation-sign:before {
  content: "\e101";
}
.glyphicon-gift:before {
  content: "\e102";
}
.glyphicon-leaf:before {
  content: "\e103";
}
.glyphicon-fire:before {
  content: "\e104";
}
.glyphicon-eye-open:before {
  content: "\e105";
}
.glyphicon-eye-close:before {
  content: "\e106";
}
.glyphicon-warning-sign:before {
  content: "\e107";
}
.glyphicon-plane:before {
  content: "\e108";
}
.glyphicon-calendar:before {
  content: "\e109";
}
.glyphicon-random:before {
  content: "\e110";
}
.glyphicon-comment:before {
  content: "\e111";
}
.glyphicon-magnet:before {
  content: "\e112";
}
.glyphicon-chevron-up:before {
  content: "\e113";
}
.glyphicon-chevron-down:before {
  content: "\e114";
}
.glyphicon-retweet:before {
  content: "\e115";
}
.glyphicon-shopping-cart:before {
  content: "\e116";
}
.glyphicon-folder-close:before {
  content: "\e117";
}
.glyphicon-folder-open:before {
  content: "\e118";
}
.glyphicon-resize-vertical:before {
  content: "\e119";
}
.glyphicon-resize-horizontal:before {
  content: "\e120";
}
.glyphicon-hdd:before {
  content: "\e121";
}
.glyphicon-bullhorn:before {
  content: "\e122";
}
.glyphicon-bell:before {
  content: "\e123";
}
.glyphicon-certificate:before {
  content: "\e124";
}
.glyphicon-thumbs-up:before {
  content: "\e125";
}
.glyphicon-thumbs-down:before {
  content: "\e126";
}
.glyphicon-hand-right:before {
  content: "\e127";
}
.glyphicon-hand-left:before {
  content: "\e128";
}
.glyphicon-hand-up:before {
  content: "\e129";
}
.glyphicon-hand-down:before {
  content: "\e130";
}
.glyphicon-circle-arrow-right:before {
  content: "\e131";
}
.glyphicon-circle-arrow-left:before {
  content: "\e132";
}
.glyphicon-circle-arrow-up:before {
  content: "\e133";
}
.glyphicon-circle-arrow-down:before {
  content: "\e134";
}
.glyphicon-globe:before {
  content: "\e135";
}
.glyphicon-wrench:before {
  content: "\e136";
}
.glyphicon-tasks:before {
  content: "\e137";
}
.glyphicon-filter:before {
  content: "\e138";
}
.glyphicon-briefcase:before {
  content: "\e139";
}
.glyphicon-fullscreen:before {
  content: "\e140";
}
.glyphicon-dashboard:before {
  content: "\e141";
}
.glyphicon-paperclip:before {
  content: "\e142";
}
.glyphicon-heart-empty:before {
  content: "\e143";
}
.glyphicon-link:before {
  content: "\e144";
}
.glyphicon-phone:before {
  content: "\e145";
}
.glyphicon-pushpin:before {
  content: "\e146";
}
.glyphicon-usd:before {
  content: "\e148";
}
.glyphicon-gbp:before {
  content: "\e149";
}
.glyphicon-sort:before {
  content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
  content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
  content: "\e152";
}
.glyphicon-sort-by-order:before {
  content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
  content: "\e154";
}
.glyphicon-sort-by-attributes:before {
  content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
  content: "\e156";
}
.glyphicon-unchecked:before {
  content: "\e157";
}
.glyphicon-expand:before {
  content: "\e158";
}
.glyphicon-collapse-down:before {
  content: "\e159";
}
.glyphicon-collapse-up:before {
  content: "\e160";
}
.glyphicon-log-in:before {
  content: "\e161";
}
.glyphicon-flash:before {
  content: "\e162";
}
.glyphicon-log-out:before {
  content: "\e163";
}
.glyphicon-new-window:before {
  content: "\e164";
}
.glyphicon-record:before {
  content: "\e165";
}
.glyphicon-save:before {
  content: "\e166";
}
.glyphicon-open:before {
  content: "\e167";
}
.glyphicon-saved:before {
  content: "\e168";
}
.glyphicon-import:before {
  content: "\e169";
}
.glyphicon-export:before {
  content: "\e170";
}
.glyphicon-send:before {
  content: "\e171";
}
.glyphicon-floppy-disk:before {
  content: "\e172";
}
.glyphicon-floppy-saved:before {
  content: "\e173";
}
.glyphicon-floppy-remove:before {
  content: "\e174";
}
.glyphicon-floppy-save:before {
  content: "\e175";
}
.glyphicon-floppy-open:before {
  content: "\e176";
}
.glyphicon-credit-card:before {
  content: "\e177";
}
.glyphicon-transfer:before {
  content: "\e178";
}
.glyphicon-cutlery:before {
  content: "\e179";
}
.glyphicon-header:before {
  content: "\e180";
}
.glyphicon-compressed:before {
  content: "\e181";
}
.glyphicon-earphone:before {
  content: "\e182";
}
.glyphicon-phone-alt:before {
  content: "\e183";
}
.glyphicon-tower:before {
  content: "\e184";
}
.glyphicon-stats:before {
  content: "\e185";
}
.glyphicon-sd-video:before {
  content: "\e186";
}
.glyphicon-hd-video:before {
  content: "\e187";
}
.glyphicon-subtitles:before {
  content: "\e188";
}
.glyphicon-sound-stereo:before {
  content: "\e189";
}
.glyphicon-sound-dolby:before {
  content: "\e190";
}
.glyphicon-sound-5-1:before {
  content: "\e191";
}
.glyphicon-sound-6-1:before {
  content: "\e192";
}
.glyphicon-sound-7-1:before {
  content: "\e193";
}
.glyphicon-copyright-mark:before {
  content: "\e194";
}
.glyphicon-registration-mark:before {
  content: "\e195";
}
.glyphicon-cloud-download:before {
  content: "\e197";
}
.glyphicon-cloud-upload:before {
  content: "\e198";
}
.glyphicon-tree-conifer:before {
  content: "\e199";
}
.glyphicon-tree-deciduous:before {
  content: "\e200";
}
.glyphicon-cd:before {
  content: "\e201";
}
.glyphicon-save-file:before {
  content: "\e202";
}
.glyphicon-open-file:before {
  content: "\e203";
}
.glyphicon-level-up:before {
  content: "\e204";
}
.glyphicon-copy:before {
  content: "\e205";
}
.glyphicon-paste:before {
  content: "\e206";
}
.glyphicon-alert:before {
  content: "\e209";
}
.glyphicon-equalizer:before {
  content: "\e210";
}
.glyphicon-king:before {
  content: "\e211";
}
.glyphicon-queen:before {
  content: "\e212";
}
.glyphicon-pawn:before {
  content: "\e213";
}
.glyphicon-bishop:before {
  content: "\e214";
}
.glyphicon-knight:before {
  content: "\e215";
}
.glyphicon-baby-formula:before {
  content: "\e216";
}
.glyphicon-tent:before {
  content: "\26fa";
}
.glyphicon-blackboard:before {
  content: "\e218";
}
.glyphicon-bed:before {
  content: "\e219";
}
.glyphicon-apple:before {
  content: "\f8ff";
}
.glyphicon-erase:before {
  content: "\e221";
}
.glyphicon-hourglass:before {
  content: "\231b";
}
.glyphicon-lamp:before {
  content: "\e223";
}
.glyphicon-duplicate:before {
  content: "\e224";
}
.glyphicon-piggy-bank:before {
  content: "\e225";
}
.glyphicon-scissors:before {
  content: "\e226";
}
.glyphicon-bitcoin:before {
  content: "\e227";
}
.glyphicon-btc:before {
  content: "\e227";
}
.glyphicon-xbt:before {
  content: "\e227";
}
.glyphicon-yen:before {
  content: "\00a5";
}
.glyphicon-jpy:before {
  content: "\00a5";
}
.glyphicon-ruble:before {
  content: "\20bd";
}
.glyphicon-rub:before {
  content: "\20bd";
}
.glyphicon-scale:before {
  content: "\e230";
}
.glyphicon-ice-lolly:before {
  content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
  content: "\e232";
}
.glyphicon-education:before {
  content: "\e233";
}
.glyphicon-option-horizontal:before {
  content: "\e234";
}
.glyphicon-option-vertical:before {
  content: "\e235";
}
.glyphicon-menu-hamburger:before {
  content: "\e236";
}
.glyphicon-modal-window:before {
  content: "\e237";
}
.glyphicon-oil:before {
  content: "\e238";
}
.glyphicon-grain:before {
  content: "\e239";
}
.glyphicon-sunglasses:before {
  content: "\e240";
}
.glyphicon-text-size:before {
  content: "\e241";
}
.glyphicon-text-color:before {
  content: "\e242";
}
.glyphicon-text-background:before {
  content: "\e243";
}
.glyphicon-object-align-top:before {
  content: "\e244";
}
.glyphicon-object-align-bottom:before {
  content: "\e245";
}
.glyphicon-object-align-horizontal:before {
  content: "\e246";
}
.glyphicon-object-align-left:before {
  content: "\e247";
}
.glyphicon-object-align-vertical:before {
  content: "\e248";
}
.glyphicon-object-align-right:before {
  content: "\e249";
}
.glyphicon-triangle-right:before {
  content: "\e250";
}
.glyphicon-triangle-left:before {
  content: "\e251";
}
.glyphicon-triangle-bottom:before {
  content: "\e252";
}
.glyphicon-triangle-top:before {
  content: "\e253";
}
.glyphicon-console:before {
  content: "\e254";
}
.glyphicon-superscript:before {
  content: "\e255";
}
.glyphicon-subscript:before {
  content: "\e256";
}
.glyphicon-menu-left:before {
  content: "\e257";
}
.glyphicon-menu-right:before {
  content: "\e258";
}
.glyphicon-menu-down:before {
  content: "\e259";
}
.glyphicon-menu-up:before {
  content: "\e260";
}
* {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}
html {
  font-size: 10px;

  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 14px;
  line-height: 1.42857143;
  color: #333;
  background-color: #fff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #337ab7;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #23527c;
  text-decoration: underline;
}
a:focus {
  outline: thin dotted;
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 6px;
}
.img-thumbnail {
  display: inline-block;
  max-width: 100%;
  height: auto;
  padding: 4px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 4px;
  -webkit-transition: all .2s ease-in-out;
       -o-transition: all .2s ease-in-out;
          transition: all .2s ease-in-out;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 20px;
  margin-bottom: 20px;
  border: 0;
  border-top: 1px solid #eee;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
[role="button"] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: inherit;
  font-weight: 500;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 20px;
  margin-bottom: 10px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 10px;
  margin-bottom: 10px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 36px;
}
h2,
.h2 {
  font-size: 30px;
}
h3,
.h3 {
  font-size: 24px;
}
h4,
.h4 {
  font-size: 18px;
}
h5,
.h5 {
  font-size: 14px;
}
h6,
.h6 {
  font-size: 12px;
}
p {
  margin: 0 0 10px;
}
.lead {
  margin-bottom: 20px;
  font-size: 16px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 21px;
  }
}
small,
.small {
  font-size: 85%;
}
mark,
.mark {
  padding: .2em;
  background-color: #fcf8e3;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #777;
}
.text-primary {
  color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #286090;
}
.text-success {
  color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
  color: #2b542c;
}
.text-info {
  color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
  color: #245269;
}
.text-warning {
  color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #66512c;
}
.text-danger {
  color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #843534;
}
.bg-primary {
  color: #fff;
  background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #286090;
}
.bg-success {
  background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #c1e2b3;
}
.bg-info {
  background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #afd9ee;
}
.bg-warning {
  background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #f7ecb5;
}
.bg-danger {
  background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #e4b9b9;
}
.page-header {
  padding-bottom: 9px;
  margin: 40px 0 20px;
  border-bottom: 1px solid #eee;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 10px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  margin-left: -5px;
  list-style: none;
}
.list-inline > li {
  display: inline-block;
  padding-right: 5px;
  padding-left: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 20px;
}
dt,
dd {
  line-height: 1.42857143;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
@media (min-width: 768px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    overflow: hidden;
    clear: left;
    text-align: right;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #777;
}
.initialism {
  font-size: 90%;
  text-transform: uppercase;
}
blockquote {
  padding: 10px 20px;
  margin: 0 0 20px;
  font-size: 17.5px;
  border-left: 5px solid #eee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857143;
  color: #777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  text-align: right;
  border-right: 5px solid #eee;
  border-left: 0;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
  content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
  content: '\00A0 \2014';
}
address {
  margin-bottom: 20px;
  font-style: normal;
  line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 4px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #fff;
  background-color: #333;
  border-radius: 3px;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  -webkit-box-shadow: none;
          box-shadow: none;
}
pre {
  display: block;
  padding: 9.5px;
  margin: 0 0 10px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #333;
  word-break: break-all;
  word-wrap: break-word;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 4px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  padding-right: 15px;
  padding-left: 15px;
  margin-right: auto;
  margin-left: auto;
}
@media (min-width: 768px) {
  .container {
    width: 750px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 970px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1170px;
  }
}
.container-fluid {
  padding-right: 15px;
  padding-left: 15px;
  margin-right: auto;
  margin-left: auto;
}
.row {
  margin-right: -15px;
  margin-left: -15px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-right: 15px;
  padding-left: 15px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  float: left;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-11 {
  width: 91.66666667%;
}
.col-xs-10 {
  width: 83.33333333%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-8 {
  width: 66.66666667%;
}
.col-xs-7 {
  width: 58.33333333%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-5 {
  width: 41.66666667%;
}
.col-xs-4 {
  width: 33.33333333%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-2 {
  width: 16.66666667%;
}
.col-xs-1 {
  width: 8.33333333%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-pull-11 {
  right: 91.66666667%;
}
.col-xs-pull-10 {
  right: 83.33333333%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-8 {
  right: 66.66666667%;
}
.col-xs-pull-7 {
  right: 58.33333333%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-5 {
  right: 41.66666667%;
}
.col-xs-pull-4 {
  right: 33.33333333%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-2 {
  right: 16.66666667%;
}
.col-xs-pull-1 {
  right: 8.33333333%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-push-11 {
  left: 91.66666667%;
}
.col-xs-push-10 {
  left: 83.33333333%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-8 {
  left: 66.66666667%;
}
.col-xs-push-7 {
  left: 58.33333333%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-5 {
  left: 41.66666667%;
}
.col-xs-push-4 {
  left: 33.33333333%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-2 {
  left: 16.66666667%;
}
.col-xs-push-1 {
  left: 8.33333333%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
.col-xs-offset-11 {
  margin-left: 91.66666667%;
}
.col-xs-offset-10 {
  margin-left: 83.33333333%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-8 {
  margin-left: 66.66666667%;
}
.col-xs-offset-7 {
  margin-left: 58.33333333%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}
.col-xs-offset-4 {
  margin-left: 33.33333333%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-2 {
  margin-left: 16.66666667%;
}
.col-xs-offset-1 {
  margin-left: 8.33333333%;
}
.col-xs-offset-0 {
  margin-left: 0;
}
@media (min-width: 768px) {
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0;
  }
}
@media (min-width: 992px) {
  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
    float: left;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-11 {
    width: 91.66666667%;
  }
  .col-md-10 {
    width: 83.33333333%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-8 {
    width: 66.66666667%;
  }
  .col-md-7 {
    width: 58.33333333%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-5 {
    width: 41.66666667%;
  }
  .col-md-4 {
    width: 33.33333333%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-2 {
    width: 16.66666667%;
  }
  .col-md-1 {
    width: 8.33333333%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-pull-11 {
    right: 91.66666667%;
  }
  .col-md-pull-10 {
    right: 83.33333333%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-8 {
    right: 66.66666667%;
  }
  .col-md-pull-7 {
    right: 58.33333333%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-5 {
    right: 41.66666667%;
  }
  .col-md-pull-4 {
    right: 33.33333333%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-2 {
    right: 16.66666667%;
  }
  .col-md-pull-1 {
    right: 8.33333333%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-push-11 {
    left: 91.66666667%;
  }
  .col-md-push-10 {
    left: 83.33333333%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-8 {
    left: 66.66666667%;
  }
  .col-md-push-7 {
    left: 58.33333333%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-5 {
    left: 41.66666667%;
  }
  .col-md-push-4 {
    left: 33.33333333%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-2 {
    left: 16.66666667%;
  }
  .col-md-push-1 {
    left: 8.33333333%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
  .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-md-offset-0 {
    margin-left: 0;
  }
}
@media (min-width: 1200px) {
  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
    float: left;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-11 {
    width: 91.66666667%;
  }
  .col-lg-10 {
    width: 83.33333333%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-8 {
    width: 66.66666667%;
  }
  .col-lg-7 {
    width: 58.33333333%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-5 {
    width: 41.66666667%;
  }
  .col-lg-4 {
    width: 33.33333333%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-2 {
    width: 16.66666667%;
  }
  .col-lg-1 {
    width: 8.33333333%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-pull-11 {
    right: 91.66666667%;
  }
  .col-lg-pull-10 {
    right: 83.33333333%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-8 {
    right: 66.66666667%;
  }
  .col-lg-pull-7 {
    right: 58.33333333%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-5 {
    right: 41.66666667%;
  }
  .col-lg-pull-4 {
    right: 33.33333333%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-push-11 {
    left: 91.66666667%;
  }
  .col-lg-push-10 {
    left: 83.33333333%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-8 {
    left: 66.66666667%;
  }
  .col-lg-push-7 {
    left: 58.33333333%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-5 {
    left: 41.66666667%;
  }
  .col-lg-push-4 {
    left: 33.33333333%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-2 {
    left: 16.66666667%;
  }
  .col-lg-push-1 {
    left: 8.33333333%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0;
  }
}
table {
  background-color: transparent;
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 20px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
.table > tbody + tbody {
  border-top: 2px solid #ddd;
}
.table .table {
  background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
  background-color: #f5f5f5;
}
table col[class*="col-"] {
  position: static;
  display: table-column;
  float: none;
}
table td[class*="col-"],
table th[class*="col-"] {
  position: static;
  display: table-cell;
  float: none;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
  background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
  background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
  background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
  background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
  background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
  background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
  background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
  background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
  background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
  background-color: #ebcccc;
}
.table-responsive {
  min-height: .01%;
  overflow-x: auto;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 15px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  .table-responsive > .table {
    margin-bottom: 0;
  }
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > tbody > tr > th,
  .table-responsive > .table > tfoot > tr > th,
  .table-responsive > .table > thead > tr > td,
  .table-responsive > .table > tbody > tr > td,
  .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  .table-responsive > .table-bordered {
    border: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:first-child,
  .table-responsive > .table-bordered > tbody > tr > th:first-child,
  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  .table-responsive > .table-bordered > thead > tr > td:first-child,
  .table-responsive > .table-bordered > tbody > tr > td:first-child,
  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
    border-left: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:last-child,
  .table-responsive > .table-bordered > tbody > tr > th:last-child,
  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  .table-responsive > .table-bordered > thead > tr > td:last-child,
  .table-responsive > .table-bordered > tbody > tr > td:last-child,
  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
    border-right: 0;
  }
  .table-responsive > .table-bordered > tbody > tr:last-child > th,
  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  .table-responsive > .table-bordered > tbody > tr:last-child > td,
  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
    border-bottom: 0;
  }
}
fieldset {
  min-width: 0;
  padding: 0;
  margin: 0;
  border: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 20px;
  font-size: 21px;
  line-height: inherit;
  color: #333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type="search"] {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type="file"] {
  display: block;
}
input[type="range"] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: thin dotted;
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 7px;
  font-size: 14px;
  line-height: 1.42857143;
  color: #555;
}
.form-control {
  display: block;
  width: 100%;
  height: 34px;
  padding: 6px 12px;
  font-size: 14px;
  line-height: 1.42857143;
  color: #555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
}
.form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #999;
}
.form-control::-webkit-input-placeholder {
  color: #999;
}
.form-control::-ms-expand {
  background-color: transparent;
  border: 0;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #eee;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type="date"].form-control,
  input[type="time"].form-control,
  input[type="datetime-local"].form-control,
  input[type="month"].form-control {
    line-height: 34px;
  }
  input[type="date"].input-sm,
  input[type="time"].input-sm,
  input[type="datetime-local"].input-sm,
  input[type="month"].input-sm,
  .input-group-sm input[type="date"],
  .input-group-sm input[type="time"],
  .input-group-sm input[type="datetime-local"],
  .input-group-sm input[type="month"] {
    line-height: 30px;
  }
  input[type="date"].input-lg,
  input[type="time"].input-lg,
  input[type="datetime-local"].input-lg,
  input[type="month"].input-lg,
  .input-group-lg input[type="date"],
  .input-group-lg input[type="time"],
  .input-group-lg input[type="datetime-local"],
  .input-group-lg input[type="month"] {
    line-height: 46px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 20px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-top: 4px \9;
  margin-left: -20px;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  vertical-align: middle;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
  cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  min-height: 34px;
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
  padding-right: 0;
  padding-left: 0;
}
.input-sm {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
select.input-sm {
  height: 30px;
  line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
  height: auto;
}
.form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
.form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 30px;
  min-height: 32px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.input-lg {
  height: 46px;
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.3333333;
  border-radius: 6px;
}
select.input-lg {
  height: 46px;
  line-height: 46px;
}
textarea.input-lg,
select[multiple].input-lg {
  height: auto;
}
.form-group-lg .form-control {
  height: 46px;
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.3333333;
  border-radius: 6px;
}
.form-group-lg select.form-control {
  height: 46px;
  line-height: 46px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 46px;
  min-height: 38px;
  padding: 11px 16px;
  font-size: 18px;
  line-height: 1.3333333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 42.5px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 34px;
  height: 34px;
  line-height: 34px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 46px;
  height: 46px;
  line-height: 46px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #3c763d;
}
.has-success .form-control {
  border-color: #3c763d;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
}
.has-success .form-control:focus {
  border-color: #2b542c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
  color: #3c763d;
  background-color: #dff0d8;
  border-color: #3c763d;
}
.has-success .form-control-feedback {
  color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #8a6d3b;
}
.has-warning .form-control {
  border-color: #8a6d3b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
}
.has-warning .form-control:focus {
  border-color: #66512c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
  color: #8a6d3b;
  background-color: #fcf8e3;
  border-color: #8a6d3b;
}
.has-warning .form-control-feedback {
  color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #a94442;
}
.has-error .form-control {
  border-color: #a94442;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
}
.has-error .form-control:focus {
  border-color: #843534;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
  color: #a94442;
  background-color: #f2dede;
  border-color: #a94442;
}
.has-error .form-control-feedback {
  color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
  top: 25px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #737373;
}
@media (min-width: 768px) {
  .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .form-inline .form-control-static {
    display: inline-block;
  }
  .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .form-inline .input-group .input-group-addon,
  .form-inline .input-group .input-group-btn,
  .form-inline .input-group .form-control {
    width: auto;
  }
  .form-inline .input-group > .form-control {
    width: 100%;
  }
  .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type="radio"],
  .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  padding-top: 7px;
  margin-top: 0;
  margin-bottom: 0;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 27px;
}
.form-horizontal .form-group {
  margin-right: -15px;
  margin-left: -15px;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    padding-top: 7px;
    margin-bottom: 0;
    text-align: right;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 15px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 18px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
.btn {
  display: inline-block;
  padding: 6px 12px;
  margin-bottom: 0;
  font-size: 14px;
  font-weight: normal;
  line-height: 1.42857143;
  text-align: center;
  white-space: nowrap;
  vertical-align: middle;
  -ms-touch-action: manipulation;
      touch-action: manipulation;
  cursor: pointer;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 4px;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
  outline: thin dotted;
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #333;
  text-decoration: none;
}
.btn:active,
.btn.active {
  background-image: none;
  outline: 0;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
          box-shadow: none;
  opacity: .65;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
.btn-default .badge {
  color: #fff;
  background-color: #333;
}
.btn-primary {
  color: #fff;
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #fff;
  background-color: #286090;
  border-color: #122b40;
}
.btn-primary:hover {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
  color: #fff;
  background-color: #204d74;
  border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary .badge {
  color: #337ab7;
  background-color: #fff;
}
.btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.btn-success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.btn-info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.btn-info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.btn-warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
Download .txt
gitextract_w3pu78qw/

├── .github/
│   └── workflows/
│       └── dotnet-test.yml
├── .gitignore
├── LICENSE
├── README.md
├── appveyor.yml
├── examples/
│   ├── DataSetGenericDataAdapter/
│   │   ├── DataSetGenericDataAdapter.csproj
│   │   ├── GenericDataAdapter.cs
│   │   └── Program.cs
│   ├── MySqlDemo.DbMetadata/
│   │   ├── Models/
│   │   │   ├── ColumnMetadata.cs
│   │   │   └── TableMetadata.cs
│   │   ├── MySqlDemo.DbMetadata.csproj
│   │   └── Program.cs
│   ├── NReco.Data.Examples.sln
│   ├── SqliteDemo.CommandBuilder/
│   │   ├── Program.cs
│   │   └── SqliteDemo.CommandBuilder.csproj
│   ├── SqliteDemo.DataAdapter/
│   │   ├── Program.cs
│   │   └── SqliteDemo.DataAdapter.csproj
│   ├── SqliteDemo.GraphQLApi/
│   │   ├── Controllers/
│   │   │   └── GraphQLController.cs
│   │   ├── Db/
│   │   │   ├── GraphQL/
│   │   │   │   ├── GraphQLQuery.cs
│   │   │   │   └── TableType.cs
│   │   │   └── Models/
│   │   │       ├── ColumnMetadata.cs
│   │   │       ├── DatabaseMetadata.cs
│   │   │       └── TableMetadata.cs
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── SqliteDemo.GraphQLAPI.csproj
│   │   ├── Startup.cs
│   │   ├── appsettings.json
│   │   ├── web.config
│   │   └── wwwroot/
│   │       └── index.html
│   ├── SqliteDemo.MVCApplication/
│   │   ├── .bowerrc
│   │   ├── .vscode/
│   │   │   ├── launch.json
│   │   │   └── tasks.json
│   │   ├── Controllers/
│   │   │   └── ArticleController.cs
│   │   ├── Db/
│   │   │   ├── Context/
│   │   │   │   └── DbContext.cs
│   │   │   ├── Interfaces/
│   │   │   │   └── IArticleRepository.cs
│   │   │   ├── Models/
│   │   │   │   ├── Article.cs
│   │   │   │   └── User.cs
│   │   │   ├── Repositories/
│   │   │   │   └── ArticleRepository.cs
│   │   │   └── Views/
│   │   │       └── ArticleView.cs
│   │   ├── Program.cs
│   │   ├── Project_Readme.html
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── SqliteDemo.MVCApplication.csproj
│   │   ├── Startup.cs
│   │   ├── Views/
│   │   │   ├── Article/
│   │   │   │   ├── Add.cshtml
│   │   │   │   ├── ArticleItem.cshtml
│   │   │   │   ├── Edit.cshtml
│   │   │   │   └── List.cshtml
│   │   │   ├── Shared/
│   │   │   │   ├── Error.cshtml
│   │   │   │   └── _Layout.cshtml
│   │   │   ├── _ViewImports.cshtml
│   │   │   └── _ViewStart.cshtml
│   │   ├── appsettings.json
│   │   ├── bower.json
│   │   ├── bundleconfig.json
│   │   ├── web.config
│   │   └── wwwroot/
│   │       ├── _references.js
│   │       ├── css/
│   │       │   └── site.css
│   │       ├── js/
│   │       │   └── site.js
│   │       └── lib/
│   │           ├── bootstrap/
│   │           │   ├── .bower.json
│   │           │   ├── LICENSE
│   │           │   └── dist/
│   │           │       ├── css/
│   │           │       │   ├── bootstrap-theme.css
│   │           │       │   └── bootstrap.css
│   │           │       └── js/
│   │           │           ├── bootstrap.js
│   │           │           └── npm.js
│   │           ├── jquery/
│   │           │   ├── .bower.json
│   │           │   ├── LICENSE.txt
│   │           │   └── dist/
│   │           │       └── jquery.js
│   │           ├── jquery-validation/
│   │           │   ├── .bower.json
│   │           │   ├── LICENSE.md
│   │           │   └── dist/
│   │           │       ├── additional-methods.js
│   │           │       └── jquery.validate.js
│   │           └── jquery-validation-unobtrusive/
│   │               ├── .bower.json
│   │               └── jquery.validate.unobtrusive.js
│   ├── SqliteDemo.SqlLogging/
│   │   ├── LoggingDbFactory.cs
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   └── SqliteDemo.SqlLogging.csproj
│   └── SqliteDemo.WebApi/
│       ├── Controllers/
│       │   └── DataApiController.cs
│       ├── Data/
│       │   └── NRecoDataServiceCollectionsExt.cs
│       ├── Program.cs
│       ├── Properties/
│       │   └── launchSettings.json
│       ├── SqliteDemo.WebApi.csproj
│       ├── Startup.cs
│       ├── appsettings.json
│       ├── web.config
│       └── wwwroot/
│           └── index.html
└── src/
    ├── NReco.Data/
    │   ├── DataHelper.cs
    │   ├── DataMapper.cs
    │   ├── DbBatchCommandBuilder.cs
    │   ├── DbCommandBuilder.cs
    │   ├── DbCommandBuilderExtensions.cs
    │   ├── DbDataAdapter.cs
    │   ├── DbDataView.cs
    │   ├── DbFactory.cs
    │   ├── DbSqlExpressionBuilder.cs
    │   ├── ExecuteDbCommandException.cs
    │   ├── IDbCommandBuilder.cs
    │   ├── IDbFactory.cs
    │   ├── IRecordSetAdapter.cs
    │   ├── ISqlExpressionBuilder.cs
    │   ├── Internal/
    │   │   ├── DataReaderAsyncExt.cs
    │   │   ├── DataReaderResult.cs
    │   │   ├── DbCommandAsyncExt.cs
    │   │   ├── DbConnectionAsyncExt.cs
    │   │   ├── DbDataAdapter.MapperContext.cs
    │   │   ├── DbDataAdapter.RawSqlString.cs
    │   │   ├── DbDataAdapter.SelectQuery.cs
    │   │   ├── OffsetCountDataReaderWrapper.cs
    │   │   └── RecordSetAdapter.cs
    │   ├── NReco.Data.csproj
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── Query/
    │   │   ├── IQueryValue.cs
    │   │   ├── QAggregateField.cs
    │   │   ├── QConditionNode.cs
    │   │   ├── QConst.cs
    │   │   ├── QField.cs
    │   │   ├── QGroupNode.cs
    │   │   ├── QNegationNode.cs
    │   │   ├── QNode.cs
    │   │   ├── QRawSql.cs
    │   │   ├── QRawSqlNode.cs
    │   │   ├── QSort.cs
    │   │   ├── QTable.cs
    │   │   ├── QVar.cs
    │   │   └── Query.cs
    │   ├── RecordSet.cs
    │   ├── RecordSetReader.cs
    │   ├── Relex/
    │   │   ├── RelexBuilder.cs
    │   │   └── RelexParser.cs
    │   ├── Result/
    │   │   ├── DataReaderMapperContext.cs
    │   │   ├── DataReaderResult.cs
    │   │   ├── IQueryDataTableResult.cs
    │   │   ├── IQueryDictionaryResult.cs
    │   │   ├── IQueryModelResult.cs
    │   │   └── IQueryRecordSetResult.cs
    │   ├── SqlExpressionBuilder.cs
    │   └── StringTemplate.cs
    ├── NReco.Data.Tests/
    │   ├── DataReaderResultTests.cs
    │   ├── DbBatchCommandBuilderTests.cs
    │   ├── DbCommandBuilderTests.cs
    │   ├── DbDataAdapterTests.cs
    │   ├── NReco.Data.Tests.csproj
    │   ├── QueryTests.cs
    │   ├── RecordSetTests.cs
    │   ├── RelexTests.cs
    │   ├── SqliteDbFixture.cs
    │   └── StringTemplateTests.cs
    └── NReco.Data.sln
Download .txt
SYMBOL INDEX (830 symbols across 93 files)

FILE: examples/DataSetGenericDataAdapter/GenericDataAdapter.cs
  class GenericDataAdapter (line 16) | public class GenericDataAdapter : System.Data.Common.DbDataAdapter {
    method GenericDataAdapter (line 21) | public GenericDataAdapter(IDbCommandBuilder cmdBuilder, DbCommand sele...
    method GenericDataAdapter (line 26) | public GenericDataAdapter(IDbCommandBuilder cmdBuilder, DbConnection c...
    method GetChangeset (line 31) | IEnumerable<KeyValuePair<string,IQueryValue>> GetChangeset(DataTable t) {
    method InitDbCmd (line 42) | void InitDbCmd(DbCommand cmd, DataTable t) {
    method ComposePkCondition (line 62) | QNode ComposePkCondition(DataTable t) {
    method Update (line 71) | protected override int Update(DataRow[] dataRows, DataTableMapping tab...

FILE: examples/DataSetGenericDataAdapter/Program.cs
  class Program (line 10) | class Program {
    method Main (line 11) | static void Main(string[] args) {
    method GenericDataAdapterForSqlite (line 18) | static void GenericDataAdapterForSqlite() {
    method GenericDataAdapterForMySql (line 65) | static void GenericDataAdapterForMySql() {

FILE: examples/MySqlDemo.DbMetadata/Models/ColumnMetadata.cs
  class ColumnMetadata (line 11) | public class ColumnMetadata {

FILE: examples/MySqlDemo.DbMetadata/Models/TableMetadata.cs
  class TableMetadata (line 9) | public class TableMetadata {

FILE: examples/MySqlDemo.DbMetadata/Program.cs
  class Program (line 23) | public class Program {
    method Main (line 44) | public static void Main(string[] args) {
    method FetchTableMetaData (line 58) | protected static TableMetadata FetchTableMetaData(string tableName) {
    method GetColumnsMetadata (line 68) | protected static void GetColumnsMetadata(TableMetadata table) {

FILE: examples/SqliteDemo.CommandBuilder/Program.cs
  class Program (line 21) | public class Program
    method Main (line 23) | public static void Main(string[] args)
    method RunSelect (line 77) | static void RunSelect(DbContext dbContext) {
    method RunInsert (line 92) | static void RunInsert(DbContext dbContext) {
    method RunUpdate (line 109) | static void RunUpdate(DbContext dbContext) {
    method RunDelete (line 124) | static void RunDelete(DbContext dbContext) {
    method RunBatchInserts (line 136) | static void RunBatchInserts(DbContext dbContext) {
    method RunSelectMultipleResultSet (line 193) | public static void RunSelectMultipleResultSet(DbContext dbContext) {
    class DbContext (line 227) | public class DbContext {
      method InitCommand (line 233) | public void InitCommand(IDbCommand cmd) {

FILE: examples/SqliteDemo.DataAdapter/Program.cs
  class Program (line 17) | public class Program
    method Main (line 19) | public static void Main(string[] args)
    method SelectDemo (line 49) | public static void SelectDemo(DbDataAdapter dbAdapter) {
    method InsertUpdateDeleteForOneRecord (line 88) | public static void InsertUpdateDeleteForOneRecord(DbDataAdapter dbAdap...
    method UpdateForRecordSet (line 133) | public static void UpdateForRecordSet(DbDataAdapter dbAdapter) {
    class Employee (line 187) | public class Employee {

FILE: examples/SqliteDemo.GraphQLApi/Controllers/GraphQLController.cs
  class GraphQLController (line 22) | [Route("api/[controller]")]
    method GraphQLController (line 26) | public GraphQLController(Schema schema) {
    method Get (line 30) | [HttpGet("")]
    method Post (line 47) | [HttpPost]
    method Put (line 52) | [HttpPut("{id}")]
    method Delete (line 57) | [HttpDelete("{id}")]

FILE: examples/SqliteDemo.GraphQLApi/Db/GraphQL/GraphQLQuery.cs
  class GraphQLQuery (line 11) | public class GraphQLQuery : ObjectGraphType<object> {
    method GraphQLQuery (line 15) | public GraphQLQuery(DbDataAdapter data, IDatabaseMetadata dbMetadata) {
  class MyFieldResolver (line 47) | public class MyFieldResolver : IFieldResolver {
    method MyFieldResolver (line 51) | public MyFieldResolver(TableMetadata tableMetadata, DbDataAdapter data) {
    method Resolve (line 56) | public object Resolve(ResolveFieldContext context) {
    method ApplyArguments (line 68) | private void ApplyArguments(Query q, IDictionary<string, object> args) {

FILE: examples/SqliteDemo.GraphQLApi/Db/GraphQL/TableType.cs
  class TableType (line 15) | public class TableType : ObjectGraphType<IDictionary<string,object>> {
    method TableType (line 37) | public TableType(TableMetadata tableMetadata) {
    method InitGraphTableColumn (line 44) | private void InitGraphTableColumn(ColumnMetadata columnMetadata) {
    method FillArgs (line 55) | private void FillArgs(string columnName) {
    method ResolveColumnMetaType (line 67) | private Type ResolveColumnMetaType(string dbType) {
  class DictionaryNameFieldResolver (line 77) | public class DictionaryNameFieldResolver : IFieldResolver {
    method Resolve (line 80) | public object Resolve(ResolveFieldContext context) {

FILE: examples/SqliteDemo.GraphQLApi/Db/Models/ColumnMetadata.cs
  class ColumnMetadata (line 11) | public class ColumnMetadata {

FILE: examples/SqliteDemo.GraphQLApi/Db/Models/DatabaseMetadata.cs
  class DatabaseMetadata (line 12) | public class DatabaseMetadata : IDatabaseMetadata {
    method DatabaseMetadata (line 16) | public DatabaseMetadata(DbDataAdapter dbAdapter) {
    method LoadMetaData (line 27) | private void LoadMetaData() {
    method ReloadMetadata (line 35) | public void ReloadMetadata() {
    method GetMetadataTables (line 39) | public List<TableMetadata> GetMetadataTables() {
    method FetchTableMetaData (line 46) | private TableMetadata FetchTableMetaData(string tableName) {
    method GetColumnsMetadata (line 52) | private void GetColumnsMetadata(TableMetadata table) {
  type IDatabaseMetadata (line 60) | public interface IDatabaseMetadata {
    method ReloadMetadata (line 62) | void ReloadMetadata();
    method GetMetadataTables (line 63) | List<TableMetadata> GetMetadataTables();

FILE: examples/SqliteDemo.GraphQLApi/Db/Models/TableMetadata.cs
  class TableMetadata (line 11) | public class TableMetadata {

FILE: examples/SqliteDemo.GraphQLApi/Program.cs
  class Program (line 14) | public class Program
    method Main (line 16) | public static void Main(string[] args)

FILE: examples/SqliteDemo.GraphQLApi/Startup.cs
  class Startup (line 25) | public class Startup {
    method Startup (line 29) | public Startup(IWebHostEnvironment env) {
    method ConfigureServices (line 45) | public void ConfigureServices(IServiceCollection services) {
    method InjectGraphQLSchema (line 64) | protected void InjectGraphQLSchema(IServiceCollection services) {
    method InjectNRecoDataService (line 74) | protected void InjectNRecoDataService(IServiceCollection services) {
    method Configure (line 100) | public void Configure(IApplicationBuilder app, IWebHostEnvironment env...

FILE: examples/SqliteDemo.MVCApplication/Controllers/ArticleController.cs
  class ArticleController (line 16) | public class ArticleController : Controller {
    method ArticleController (line 19) | public ArticleController(ArticleRepository articleRepository) {
    method Add (line 23) | public IActionResult Add() {
    method Add (line 31) | [HttpPost]
    method Edit (line 41) | public IActionResult Edit(int? id) {
    method Edit (line 52) | [HttpPost]
    method ArticleItem (line 63) | public IActionResult ArticleItem(int id = 0) {
    method Delete (line 73) | public IActionResult Delete(int? id) {
    method List (line 81) | public IActionResult List() {

FILE: examples/SqliteDemo.MVCApplication/Db/Context/DbContext.cs
  class DbCoreContext (line 10) | public class DbCoreContext : DbContext {
    method DbCoreContext (line 19) | public DbCoreContext(DbContextOptions<DbCoreContext> options):base(opt...
    method OnConfiguring (line 22) | protected override void OnConfiguring(DbContextOptionsBuilder optionsB...

FILE: examples/SqliteDemo.MVCApplication/Db/Interfaces/IArticleRepository.cs
  type IArticleRepository (line 11) | interface IArticleRepository {
    method Add (line 12) | void Add(Article a);
    method Edit (line 13) | Task<int> Edit(Article a);
    method Remove (line 14) | void Remove(int id);
    method GetArticles (line 15) | IEnumerable<ArticleView> GetArticles();
    method FindById (line 16) | Article FindById(int id);
    method GetAllAuthors (line 17) | IEnumerable<User> GetAllAuthors();

FILE: examples/SqliteDemo.MVCApplication/Db/Models/Article.cs
  class Article (line 7) | public class Article {

FILE: examples/SqliteDemo.MVCApplication/Db/Models/User.cs
  class User (line 9) | public class User {

FILE: examples/SqliteDemo.MVCApplication/Db/Repositories/ArticleRepository.cs
  class ArticleRepository (line 20) | public class ArticleRepository : IArticleRepository {
    method ArticleRepository (line 25) | public ArticleRepository(IServiceProvider serviceProvider) {
    method Add (line 30) | public async void Add(Article a) {
    method Edit (line 36) | public async Task<int> Edit(Article a) {
    method FindById (line 46) | public Article FindById(int id) {
    method GetArticles (line 56) | public IEnumerable<ArticleView> GetArticles() {
    method Remove (line 60) | public void Remove(int id) {
    method GetAllAuthors (line 69) | public IEnumerable<User> GetAllAuthors() {

FILE: examples/SqliteDemo.MVCApplication/Db/Views/ArticleView.cs
  class ArticleView (line 7) | public class ArticleView {

FILE: examples/SqliteDemo.MVCApplication/Program.cs
  class Program (line 11) | public class Program
    method Main (line 13) | public static void Main(string[] args)

FILE: examples/SqliteDemo.MVCApplication/Startup.cs
  class Startup (line 25) | public class Startup
    method Startup (line 30) | public Startup(IHostingEnvironment env)
    method ConfigureServices (line 45) | public void ConfigureServices(IServiceCollection services)
    method InjectNRecoDataService (line 70) | protected void InjectNRecoDataService(IServiceCollection services) {
    method ConfigureArticlesView (line 94) | protected DbDataView ConfigureArticlesView() {
    method Configure (line 108) | public void Configure(IApplicationBuilder app, IWebHostEnvironment env...

FILE: examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/dist/js/bootstrap.js
  function transitionEnd (line 34) | function transitionEnd() {
  function removeElement (line 126) | function removeElement() {
  function Plugin (line 142) | function Plugin(option) {
  function Plugin (line 251) | function Plugin(option) {
  function Plugin (line 470) | function Plugin(option) {
  function getTargetFromTrigger (line 689) | function getTargetFromTrigger($trigger) {
  function Plugin (line 701) | function Plugin(option) {
  function getParent (line 768) | function getParent($this) {
  function clearMenus (line 781) | function clearMenus(e) {
  function Plugin (line 874) | function Plugin(option) {
  function Plugin (line 1200) | function Plugin(option, _relatedTarget) {
  function complete (line 1566) | function complete() {
  function Plugin (line 1736) | function Plugin(option) {
  function Plugin (line 1845) | function Plugin(option) {
  function ScrollSpy (line 1888) | function ScrollSpy(element, options) {
  function Plugin (line 2008) | function Plugin(option) {
  function next (line 2117) | function next() {
  function Plugin (line 2163) | function Plugin(option) {
  function Plugin (line 2320) | function Plugin(option) {

FILE: examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
  function setValidationValues (line 14) | function setValidationValues(options, ruleName, value) {
  function splitAndTrim (line 21) | function splitAndTrim(value) {
  function escapeAttributeValue (line 25) | function escapeAttributeValue(value) {
  function getModelPrefix (line 30) | function getModelPrefix(fieldName) {
  function appendModelPrefix (line 34) | function appendModelPrefix(value, prefix) {
  function onError (line 41) | function onError(error, inputElement) {  // 'this' is the form element
  function onErrors (line 58) | function onErrors(event, validator) {  // 'this' is the form element
  function onSuccess (line 72) | function onSuccess(error) {  // 'this' is the form element
  function onReset (line 88) | function onReset(event) {  // 'this' is the form element
  function validationInfo (line 113) | function validationInfo(form) {

FILE: examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery-validation/dist/additional-methods.js
  function stripHtml (line 19) | function stripHtml(value) {

FILE: examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery-validation/dist/jquery.validate.js
  function handle (line 65) | function handle() {
  function delegate (line 375) | function delegate( event ) {

FILE: examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery/dist/jquery.js
  function isArrayLike (line 524) | function isArrayLike( obj ) {
  function Sizzle (line 733) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 873) | function createCache() {
  function markFunction (line 891) | function markFunction( fn ) {
  function assert (line 900) | function assert( fn ) {
  function addHandle (line 922) | function addHandle( attrs, handler ) {
  function siblingCheck (line 937) | function siblingCheck( a, b ) {
  function createInputPseudo (line 964) | function createInputPseudo( type ) {
  function createButtonPseudo (line 975) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 986) | function createPositionalPseudo( fn ) {
  function testContext (line 1009) | function testContext( context ) {
  function setFilters (line 2054) | function setFilters() {}
  function toSelector (line 2125) | function toSelector( tokens ) {
  function addCombinator (line 2135) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2193) | function elementMatcher( matchers ) {
  function multipleContexts (line 2207) | function multipleContexts( selector, contexts, results ) {
  function condense (line 2216) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2237) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2330) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2388) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function winnow (line 2726) | function winnow( elements, qualifier, not ) {
  function sibling (line 3033) | function sibling( cur, dir ) {
  function createOptions (line 3109) | function createOptions( options ) {
  function completed (line 3544) | function completed() {
  function Data (line 3655) | function Data() {
  function dataAttr (line 3865) | function dataAttr( elem, key, data ) {
  function adjustCSS (line 4182) | function adjustCSS( elem, prop, valueParts, tween ) {
  function getAll (line 4271) | function getAll( context, tag ) {
  function setGlobalEval (line 4288) | function setGlobalEval( elems, refElements ) {
  function buildFragment (line 4304) | function buildFragment( elems, context, scripts, selection, ignored ) {
  function returnTrue (line 4425) | function returnTrue() {
  function returnFalse (line 4429) | function returnFalse() {
  function safeActiveElement (line 4435) | function safeActiveElement() {
  function on (line 4441) | function on( elem, types, selector, data, fn, one ) {
  function manipulationTarget (line 5131) | function manipulationTarget( elem, content ) {
  function disableScript (line 5142) | function disableScript( elem ) {
  function restoreScript (line 5146) | function restoreScript( elem ) {
  function cloneCopyEvent (line 5158) | function cloneCopyEvent( src, dest ) {
  function fixInput (line 5193) | function fixInput( src, dest ) {
  function domManip (line 5206) | function domManip( collection, args, callback, ignored ) {
  function remove (line 5296) | function remove( elem, selector, keepData ) {
  function actualDisplay (line 5587) | function actualDisplay( name, doc ) {
  function defaultDisplay (line 5603) | function defaultDisplay( nodeName ) {
  function computeStyleTests (line 5699) | function computeStyleTests() {
  function curCSS (line 5789) | function curCSS( elem, name, computed ) {
  function addGetHookIf (line 5836) | function addGetHookIf( conditionFn, hookFn ) {
  function vendorPropName (line 5873) | function vendorPropName( name ) {
  function setPositiveNumber (line 5892) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 5904) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 5948) | function getWidthOrHeight( elem, name, extra ) {
  function showHide (line 6006) | function showHide( elements, show ) {
  function Tween (line 6345) | function Tween( elem, options, prop, end, easing ) {
  function createFxNow (line 6469) | function createFxNow() {
  function genFx (line 6477) | function genFx( type, includeWidth ) {
  function createTween (line 6497) | function createTween( value, prop, animation ) {
  function defaultPrefilter (line 6511) | function defaultPrefilter( elem, props, opts ) {
  function propFilter (line 6647) | function propFilter( props, specialEasing ) {
  function Animation (line 6684) | function Animation( elem, properties, options ) {
  function getClass (line 7357) | function getClass( elem ) {
  function addToPrefiltersOrTransports (line 8022) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 8056) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 8085) | function ajaxExtend( target, src ) {
  function ajaxHandleResponses (line 8105) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8163) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function done (line 8668) | function done( status, nativeStatusText, responses, headers ) {
  function buildParams (line 8921) | function buildParams( prefix, obj, traditional, add ) {
  function getWindow (line 9504) | function getWindow( elem ) {

FILE: examples/SqliteDemo.SqlLogging/LoggingDbFactory.cs
  class LoggingDbFactory (line 18) | public class LoggingDbFactory : DbFactory {
    method LoggingDbFactory (line 20) | public LoggingDbFactory(DbProviderFactory dbPrvFactory) : base(dbPrvFa...
    method DbCommandExecuting (line 24) | protected void DbCommandExecuting(DbCommand cmd) {
    method DbCommandExecuted (line 28) | protected void DbCommandExecuted(DbCommand cmd, TimeSpan execTime) {
    method CreateCommand (line 34) | public override IDbCommand CreateCommand() {
    class LoggingDbCommand (line 39) | public class LoggingDbCommand : DbCommand {
      method LoggingDbCommand (line 43) | internal LoggingDbCommand(DbCommand realCmd, LoggingDbFactory logDbF...
      method Cancel (line 59) | public override void Cancel() {
      method Prepare (line 64) | public override void Prepare() {
      method CreateDbParameter (line 68) | protected override DbParameter CreateDbParameter() {
      method ExecuteWithLogging (line 72) | T ExecuteWithLogging<T>(Func<T> exec) {
      method ExecuteWithLogging (line 82) | async Task<T> ExecuteWithLogging<T>(Func<Task<T>> exec) {
      method ExecuteNonQuery (line 92) | public override int ExecuteNonQuery() {
      method ExecuteNonQueryAsync (line 96) | public override Task<int> ExecuteNonQueryAsync(CancellationToken can...
      method ExecuteScalar (line 100) | public override object ExecuteScalar() {
      method ExecuteScalarAsync (line 104) | public override Task<object> ExecuteScalarAsync(CancellationToken ca...
      method ExecuteDbDataReader (line 108) | protected override DbDataReader ExecuteDbDataReader(CommandBehavior ...
      method ExecuteDbDataReaderAsync (line 112) | protected override Task<DbDataReader> ExecuteDbDataReaderAsync(Comma...

FILE: examples/SqliteDemo.SqlLogging/Program.cs
  class Program (line 6) | class Program {
    method Main (line 8) | static void Main(string[] args) {

FILE: examples/SqliteDemo.WebApi/Controllers/DataApiController.cs
  class DataApiController (line 11) | [Route("api/db")]
    method DataApiController (line 18) | public DataApiController(DbDataAdapter dbAdapter) {
    method CheckTable (line 29) | void CheckTable(string table) {
    method GetQueryByPk (line 33) | Query GetQueryByPk(string table, object idValue) {
    method Get (line 40) | [HttpGet("rows")]
    method Get (line 50) | [HttpGet("{table}/{id}")]
    method Post (line 59) | [HttpPost("{table}")]
    method Put (line 66) | [HttpPut("{table}/{id}")]
    method Delete (line 74) | [HttpDelete("{table}/{id}")]

FILE: examples/SqliteDemo.WebApi/Data/NRecoDataServiceCollectionsExt.cs
  class NRecoDataServiceCollectionsExt (line 13) | public static class NRecoDataServiceCollectionsExt {
    method AddNRecoDataSqlite (line 15) | public static IServiceCollection AddNRecoDataSqlite(this IServiceColle...

FILE: examples/SqliteDemo.WebApi/Program.cs
  class Program (line 11) | public class Program
    method Main (line 13) | public static void Main(string[] args)

FILE: examples/SqliteDemo.WebApi/Startup.cs
  class Startup (line 14) | public class Startup
    method Startup (line 18) | public Startup(IWebHostEnvironment env)
    method ConfigureServices (line 33) | public void ConfigureServices(IServiceCollection services)
    method Configure (line 55) | public void Configure(IApplicationBuilder app, IWebHostEnvironment env...

FILE: src/NReco.Data.Tests/DataReaderResultTests.cs
  class DataReaderResultTests (line 8) | public class DataReaderResultTests
    method ReadToDictionary (line 10) | [Fact]
    method ReadToRecordSet (line 23) | [Fact]
    method ReadToModel (line 36) | [Fact]
    class TestModel (line 51) | public class TestModel {
    method ReadToDataTable (line 58) | [Fact]

FILE: src/NReco.Data.Tests/DbBatchCommandBuilderTests.cs
  class DbBatchCommandBuilderTests (line 14) | public class DbBatchCommandBuilderTests {
    method BatchInsertCommand (line 17) | [Fact]

FILE: src/NReco.Data.Tests/DbCommandBuilderTests.cs
  class DbCommandBuilderTests (line 14) | public class DbCommandBuilderTests : IClassFixture<SqliteDbFixture> {
    method DbCommandBuilderTests (line 18) | public DbCommandBuilderTests(SqliteDbFixture sqliteDb) {
    method Sqlite_Select (line 22) | [Fact]
    method createTestQuery (line 33) | QNode createTestQuery() {
    method Select_Speed (line 52) | [Fact]
    method InsertUpdateDelete_Speed (line 73) | [Fact]
    method BuildCommands (line 100) | [Fact]
    method DataView (line 201) | [Fact]

FILE: src/NReco.Data.Tests/DbDataAdapterTests.cs
  class DbDataAdapterTests (line 16) | public class DbDataAdapterTests : IClassFixture<SqliteDbFixture> {
    method DbDataAdapterTests (line 21) | public DbDataAdapterTests(SqliteDbFixture sqliteDb) {
    method Select (line 39) | [Fact]
    method Select_OffsetCount (line 105) | [Fact]
    method Select_Async (line 131) | [Fact]
    method SelectRawSql (line 154) | [Fact]
    method Select_CustomMapper (line 177) | [Fact]
    method InsertUpdateDelete_Dictionary (line 200) | [Fact]
    method Insert_InTransaction (line 240) | [Fact]
    method InsertUpdateDelete_DictionaryAsync (line 258) | [Fact]
    method InsertUpdateDelete_RecordSet (line 286) | [Fact]
    method InsertUpdateDeleteAsync_RecordSet (line 322) | [Fact]
    method InsertUpdateDelete_PocoModel (line 348) | [Fact]
    method InsertUpdateDelete_PocoModelAsync (line 371) | [Fact]
    method Select_MultipleResultSets (line 393) | [Fact]
    class ContactModel (line 412) | public class ContactModel {
    class CompanyModelAnnotated (line 421) | [Table("companies")]

FILE: src/NReco.Data.Tests/QueryTests.cs
  class QueryTests (line 9) | public class QueryTests
    method QSort (line 11) | [Fact]
    method QField (line 35) | [Fact]
    method QAggregateField (line 73) | [Fact]
    method SetVars (line 85) | [Fact]

FILE: src/NReco.Data.Tests/RecordSetTests.cs
  class RecordSetTests (line 12) | public class RecordSetTests
    method generateRecordSet (line 15) | public static RecordSet generateRecordSet() {
    method CrudOperations (line 30) | [Fact]
    method RecordSetReader (line 103) | [Fact]
    method RecordSet_FromModel (line 158) | [Fact]
    class PersonModel (line 179) | [Table("persons")]

FILE: src/NReco.Data.Tests/RelexTests.cs
  class RelexTests (line 17) | public class RelexTests
    method test_Parse (line 101) | [Fact]
    method test_RelexParseSpeed (line 153) | [Fact]
    method test_RelexVar (line 171) | [Fact]
    method FindNodeByName (line 182) | protected QNode FindNodeByName(QNode node, string name) {
    method test_RelexBuilder (line 212) | [Fact]
    method test_GetLexem (line 220) | [Fact]
    class TestRelExDbFactory (line 259) | public class TestRelExDbFactory : DbFactory {
      method TestRelExDbFactory (line 261) | public TestRelExDbFactory() : base(SqlClientFactory.Instance) {
      method ApplyIdentifierFormat (line 265) | protected override string ApplyIdentifierFormat(string name) {
      method IsSimpleIdentifier (line 271) | bool IsSimpleIdentifier(string s) {
    class TestRelExQueryParser (line 282) | public class TestRelExQueryParser : RelexParser {
      method TestGetLexemType (line 284) | public RelexParser.LexemType TestGetLexemType(string s, int startIdx...

FILE: src/NReco.Data.Tests/SqliteDbFixture.cs
  class SqliteDbFixture (line 14) | public class SqliteDbFixture : IDisposable
    method SqliteDbFixture (line 21) | public SqliteDbFixture() {
    method CreateDb (line 31) | void CreateDb() {
    method Execute (line 57) | void Execute(string sql) {
    method OpenConnection (line 63) | public void OpenConnection( Action a ) {
    method Dispose (line 72) | public void Dispose() {
    class SqlLogDbFactory (line 80) | public class SqlLogDbFactory : DbFactory {
      method SqlLogDbFactory (line 84) | public SqlLogDbFactory(DbProviderFactory dbPrvFactory) : base(dbPrvF...
      method CreateCommand (line 88) | public override IDbCommand CreateCommand() {
      class SqlLogDbCommand (line 93) | public class SqlLogDbCommand : DbCommand {
        method SqlLogDbCommand (line 97) | internal SqlLogDbCommand(DbCommand realCmd, SqlLogDbFactory logDbF...
        method Cancel (line 111) | public override void Cancel() {
        method Prepare (line 115) | public override void Prepare() {
        method CreateDbParameter (line 119) | protected override DbParameter CreateDbParameter() {
        method ExecuteWithLogging (line 123) | T ExecuteWithLogging<T>(Func<T> exec) {
        method ExecuteWithLogging (line 128) | Task<T> ExecuteWithLogging<T>(Func<Task<T>> exec) {
        method ExecuteNonQuery (line 133) | public override int ExecuteNonQuery() {
        method ExecuteNonQueryAsync (line 137) | public override Task<int> ExecuteNonQueryAsync(CancellationToken c...
        method ExecuteScalar (line 141) | public override object ExecuteScalar() {
        method ExecuteScalarAsync (line 145) | public override Task<object> ExecuteScalarAsync(CancellationToken ...
        method ExecuteDbDataReader (line 149) | protected override DbDataReader ExecuteDbDataReader(CommandBehavio...
        method ExecuteDbDataReaderAsync (line 153) | protected override Task<DbDataReader> ExecuteDbDataReaderAsync(Com...

FILE: src/NReco.Data.Tests/StringTemplateTests.cs
  class StringTemplateTests (line 10) | public class StringTemplateTests {
    method FormatTemplate (line 11) | [Fact]
    method NestedTokens (line 115) | [Fact]

FILE: src/NReco.Data/DataHelper.cs
  class DataHelper (line 29) | internal static class DataHelper {
    method IsNullOrDBNull (line 31) | internal static bool IsNullOrDBNull(object v) {
    method EnsureConnectionOpen (line 35) | internal static void EnsureConnectionOpen(IDbConnection connection, Ac...
    method MapQValue (line 49) | internal static QNode MapQValue(QNode qNode, Func<IQueryValue,IQueryVa...
    method GetRecordSetByReader (line 73) | internal static RecordSet GetRecordSetByReader(IDataReader rdr) {
    method EnsureDataTableColumnsByReader (line 110) | internal static void EnsureDataTableColumnsByReader(DataTable tbl, IDa...
    method GetChangeset (line 150) | internal static IEnumerable<KeyValuePair<string, IQueryValue>> GetChan...
    method GetChangeset (line 159) | internal static IEnumerable<KeyValuePair<string, IQueryValue>> GetChan...
    method GetChangeset (line 168) | internal static IEnumerable<KeyValuePair<string, IQueryValue>> GetChan...
    method IsSimpleIdentifier (line 183) | internal static bool IsSimpleIdentifier(string s) {

FILE: src/NReco.Data/DataMapper.cs
  class DataMapper (line 33) | internal class DataMapper {
    method DataMapper (line 39) | internal DataMapper() {
    method InferSchema (line 43) | PocoModelSchema InferSchema(Type t) {
    method GetSchema (line 75) | internal PocoModelSchema GetSchema(Type t) {
    method CheckSchemaAttributes (line 84) | Tuple<string,bool,bool,bool,bool> CheckSchemaAttributes(IEnumerable<At...
    method MapTo (line 109) | internal void MapTo(IDataRecord record, object o, Type type, PocoModel...
    method MapTo (line 127) | internal T MapTo<T>(IDataRecord record) {
    method MapTo (line 131) | internal object MapTo(IDataRecord record, Type type) {
    class PocoModelSchema (line 140) | internal class PocoModelSchema {
      method PocoModelSchema (line 154) | internal PocoModelSchema(string tableName, ColumnMapping[] cols, Col...
      method GetColumnMapping (line 170) | internal ColumnMapping GetColumnMapping(string colName) {
    class ColumnMapping (line 177) | internal class ColumnMapping {
      method ColumnMapping (line 195) | internal ColumnMapping(
      method SetValue (line 242) | internal bool SetValue(object obj, object val) {

FILE: src/NReco.Data/DbBatchCommandBuilder.cs
  class DbBatchCommandBuilder (line 27) | public class DbBatchCommandBuilder : DbCommandBuilder {
    method DbBatchCommandBuilder (line 39) | public DbBatchCommandBuilder(IDbFactory dbFactory) : base(dbFactory) {
    method BeginBatch (line 43) | public void BeginBatch() {
    method EndBatch (line 47) | public IDbCommand EndBatch() {
    method GetCommand (line 55) | protected override IDbCommand GetCommand() {
    method SetCommandText (line 61) | protected override void SetCommandText(IDbCommand cmd, string sqlState...

FILE: src/NReco.Data/DbCommandBuilder.cs
  class DbCommandBuilder (line 27) | public class DbCommandBuilder : IDbCommandBuilder
    method DbCommandBuilder (line 118) | public DbCommandBuilder(IDbFactory dbFactory) {
    method DbCommandBuilder (line 128) | public DbCommandBuilder(IDbFactory dbFactory, Func<string, StringTempl...
    method GetSqlBuilder (line 134) | protected ISqlExpressionBuilder GetSqlBuilder(IDbCommand cmd) {
    method GetCommand (line 140) | protected virtual IDbCommand GetCommand() {
    method SetCommandText (line 144) | protected virtual void SetCommandText(IDbCommand cmd, string sqlStatem...
    method GetSelectCommand (line 153) | public virtual IDbCommand GetSelectCommand(Query query) {
    method BuildSelectInternal (line 162) | internal string BuildSelectInternal(Query query, ISqlExpressionBuilder...
    method GetDeleteCommand (line 179) | public virtual IDbCommand GetDeleteCommand(Query query) {
    method GetUpdateCommand (line 205) | public virtual IDbCommand GetUpdateCommand(Query query, IEnumerable<Ke...
    method GetInsertCommand (line 244) | public virtual IDbCommand GetInsertCommand(string tableName, IEnumerab...
    method CreateStringTemplate (line 278) | StringTemplate CreateStringTemplate(string tpl) {

FILE: src/NReco.Data/DbCommandBuilderExtensions.cs
  class DbCommandBuilderExtensions (line 29) | public static class DbCommandBuilderExtensions {
    method GetUpdateCommand (line 31) | public static IDbCommand GetUpdateCommand(this IDbCommandBuilder cmdBu...
    method GetUpdateCommand (line 34) | public static IDbCommand GetUpdateCommand(this IDbCommandBuilder cmdBu...
    method GetInsertCommand (line 38) | public static IDbCommand GetInsertCommand(this IDbCommandBuilder cmdBu...
    method GetInsertCommand (line 41) | public static IDbCommand GetInsertCommand(this IDbCommandBuilder cmdBu...

FILE: src/NReco.Data/DbDataAdapter.cs
  class DbDataAdapter (line 30) | public partial class DbDataAdapter : IRecordSetAdapter, IDisposable {
    method DbDataAdapter (line 57) | public DbDataAdapter(IDbConnection connection, IDbCommandBuilder cmdBu...
    method SetupCmd (line 62) | private void SetupCmd(IDbCommand cmd) {
    method Select (line 73) | public SelectQuery Select(Query q) {
    method Select (line 90) | public SelectQuery Select(RawSqlString sql, params object[] parameters) {
    method Select (line 105) | public SelectQuery Select(FormattableString sql) {
    method Select (line 116) | public SelectQuery Select(IDbCommand cmd) {
    method InsertInternal (line 120) | int InsertInternal(string tableName, IEnumerable<KeyValuePair<string,I...
    method InsertInternalAsync (line 126) | Task<int> InsertInternalAsync(string tableName, IEnumerable<KeyValuePa...
    method FindAutoIncrementColumn (line 132) | DataMapper.ColumnMapping FindAutoIncrementColumn(object pocoModel) {
    method Insert (line 146) | public int Insert(string tableName, IDictionary<string,object> data) {
    method InsertAsync (line 155) | public Task<int> InsertAsync(string tableName, IDictionary<string,obje...
    method Insert (line 167) | public int Insert(string tableName, object pocoModel) {
    method InsertAsync (line 186) | public async Task<int> InsertAsync(string tableName, object pocoModel) {
    method Insert (line 219) | public int Insert(object pocoModel) {
    method InsertAsync (line 229) | public Task<int> InsertAsync(object pocoModel) {
    method UpdateInternal (line 236) | int UpdateInternal(Query query, IEnumerable<KeyValuePair<string,IQuery...
    method UpdateInternalAsync (line 242) | Task<int> UpdateInternalAsync(Query query, IEnumerable<KeyValuePair<st...
    method Update (line 254) | public int Update(Query query, IDictionary<string,object> data) {
    method UpdateAsync (line 263) | public Task<int> UpdateAsync(Query query, IDictionary<string,object> d...
    method Update (line 275) | public int Update(Query query, object pocoModel) {
    method UpdateAsync (line 284) | public Task<int> UpdateAsync(Query query, object pocoModel) {
    method Update (line 295) | public int Update(object pocoModel) {
    method UpdateAsync (line 304) | public Task<int> UpdateAsync(object pocoModel) {
    method GetQueryByKey (line 310) | Query GetQueryByKey(object pocoModel) {
    method EnsurePrimaryKey (line 325) | void EnsurePrimaryKey(RecordSet recordSet) {
    method Select (line 330) | RecordSet IRecordSetAdapter.Select(Query q) {
    method SelectAsync (line 334) | Task<RecordSet> IRecordSetAdapter.SelectAsync(Query q) {
    method Update (line 349) | public int Update(string tableName, RecordSet recordSet) {
    method UpdateAsync (line 367) | public Task<int> UpdateAsync(string tableName, RecordSet recordSet) {
    method UpdateAsync (line 379) | public async Task<int> UpdateAsync(string tableName, RecordSet recordS...
    method Delete (line 395) | public int Delete(Query q) {
    method Delete (line 404) | public int Delete(object pocoModel) {
    method DeleteAsync (line 413) | public Task<int> DeleteAsync(object pocoModel) {
    method DeleteAsync (line 422) | public Task<int> DeleteAsync(Query q) {
    method DeleteAsync (line 429) | public Task<int> DeleteAsync(Query q, CancellationToken cancel) {
    method ExecuteNonQuery (line 433) | private int ExecuteNonQuery(IDbCommand cmd) {
    method ExecuteNonQueryAsync (line 448) | private async Task<int> ExecuteNonQueryAsync(IDbCommand cmd, Cancellat...
    method Dispose (line 468) | public void Dispose() {
    method Dispose (line 472) | protected virtual void Dispose(bool disposing) {

FILE: src/NReco.Data/DbDataView.cs
  class DbDataView (line 27) | public class DbDataView {
    method DbDataView (line 57) | public DbDataView(string selectTemplate) {
    method DbDataView (line 61) | public DbDataView(string selectTemplate, Func<string, StringTemplate> ...
    method FormatSelectSql (line 72) | public virtual string FormatSelectSql(Query query, ISqlExpressionBuild...
    method BuildWhere (line 98) | string BuildWhere(Query query, ISqlExpressionBuilder sqlBuilder) {
    method ApplyFieldMapping (line 103) | IQueryValue ApplyFieldMapping(IQueryValue qValue) {
    method ApplyFieldMapping (line 113) | string ApplyFieldMapping(string field) {
    method BuildOrderBy (line 119) | string BuildOrderBy(Query query, ISqlExpressionBuilder sqlBuilder) {
    method BuildSelectColumns (line 135) | string BuildSelectColumns(Query query, ISqlExpressionBuilder sqlBuilde...
    method BuildGroupBy (line 160) | string BuildGroupBy(Query query, ISqlExpressionBuilder sqlBuilder) {
    method IsCountQuery (line 186) | bool IsCountQuery(Query q) {

FILE: src/NReco.Data/DbFactory.cs
  class DbFactory (line 32) | public class DbFactory : IDbFactory {
    method DbFactory (line 58) | public DbFactory(DbProviderFactory dbProviderFactory) {
    method CreateCommand (line 63) | public virtual IDbCommand CreateCommand() {
    method CreateConnection (line 70) | public virtual IDbConnection CreateConnection() {
    method AddCommandParameter (line 74) | public virtual CommandParameter AddCommandParameter(IDbCommand cmd, ob...
    method CreateSqlBuilder (line 82) | public virtual ISqlExpressionBuilder CreateSqlBuilder(IDbCommand dbCom...
    method ApplyIdentifierFormat (line 90) | protected virtual string ApplyIdentifierFormat(string name) {
    method GetInsertId (line 94) | public virtual object GetInsertId(IDbConnection connection, IDbTransac...
    method GetInsertIdAsync (line 108) | public async Task<object> GetInsertIdAsync(IDbConnection connection, I...
    method GetCmdParameterName (line 122) | protected virtual string GetCmdParameterName(int paramIndex) {
    method GetCmdParameterPlaceholder (line 126) | protected virtual string GetCmdParameterPlaceholder(string paramName) {

FILE: src/NReco.Data/DbSqlExpressionBuilder.cs
  class DbSqlExpressionBuilder (line 29) | public class DbSqlExpressionBuilder : SqlExpressionBuilder
    method DbSqlExpressionBuilder (line 39) | public DbSqlExpressionBuilder(IDbCommand cmd, IDbFactory dbFactory) {
    method BuildConditionLValue (line 44) | protected override string BuildConditionLValue(QConditionNode node) {
    method BuildConditionRValue (line 49) | protected override string BuildConditionRValue(QConditionNode node) {
    method BuildValue (line 55) | public override string BuildValue(IQueryValue v) {
    method BuildValue (line 65) | protected override string BuildValue(QConst value) {
    method BuildValue (line 80) | protected override string BuildValue(string str) {
    method BuildIdentifier (line 84) | protected override string BuildIdentifier(string name) {

FILE: src/NReco.Data/ExecuteDbCommandException.cs
  class ExecuteDbCommandException (line 14) | public class ExecuteDbCommandException : Exception {
    method ExecuteDbCommandException (line 21) | public ExecuteDbCommandException(IDbCommand dbCmd, Exception innerExce...

FILE: src/NReco.Data/IDbCommandBuilder.cs
  type IDbCommandBuilder (line 27) | public interface IDbCommandBuilder
    method GetSelectCommand (line 29) | IDbCommand GetSelectCommand(Query query);
    method GetInsertCommand (line 31) | IDbCommand GetInsertCommand(string tableName, IEnumerable<KeyValuePair...
    method GetDeleteCommand (line 33) | IDbCommand GetDeleteCommand(Query query);
    method GetUpdateCommand (line 35) | IDbCommand GetUpdateCommand(Query query, IEnumerable<KeyValuePair<stri...

FILE: src/NReco.Data/IDbFactory.cs
  type IDbFactory (line 28) | public interface IDbFactory {
    method CreateCommand (line 33) | IDbCommand CreateCommand();
    method CreateConnection (line 38) | IDbConnection CreateConnection();
    method AddCommandParameter (line 43) | CommandParameter AddCommandParameter(IDbCommand cmd, object value);
    method CreateSqlBuilder (line 48) | ISqlExpressionBuilder CreateSqlBuilder(IDbCommand dbCommand, Func<Quer...
    method GetInsertId (line 53) | object GetInsertId(IDbConnection connection, IDbTransaction transaction);
    method GetInsertIdAsync (line 58) | Task<object> GetInsertIdAsync(IDbConnection connection, IDbTransaction...
  class CommandParameter (line 61) | public sealed class CommandParameter {
    method CommandParameter (line 65) | public CommandParameter(string placeholder, IDbDataParameter dbParam) {

FILE: src/NReco.Data/IRecordSetAdapter.cs
  type IRecordSetAdapter (line 28) | public interface IRecordSetAdapter {
    method Select (line 33) | RecordSet Select(Query q);
    method SelectAsync (line 38) | Task<RecordSet> SelectAsync(Query q);
    method Update (line 43) | int Update(string table, RecordSet rs);
    method UpdateAsync (line 48) | Task<int> UpdateAsync(string table, RecordSet rs);

FILE: src/NReco.Data/ISqlExpressionBuilder.cs
  type ISqlExpressionBuilder (line 22) | public interface ISqlExpressionBuilder
    method BuildTableName (line 27) | string BuildTableName(QTable tbl);
    method BuildValue (line 32) | string BuildValue(IQueryValue v);
    method BuildExpression (line 37) | string BuildExpression(QNode node);

FILE: src/NReco.Data/Internal/DataReaderAsyncExt.cs
  class DataReaderAsyncExt (line 25) | internal static class DataReaderAsyncExt {
    method ReadAsync (line 27) | internal static Task<bool> ReadAsync(this IDataReader rdr, Cancellatio...
    method GetValuesAsync (line 35) | internal static Task<int> GetValuesAsync(this IDataReader rdr, object[...

FILE: src/NReco.Data/Internal/DataReaderResult.cs
  type IDataReaderResult (line 25) | internal interface IDataReaderResult<T> {
    method Init (line 27) | void Init(IDataReader rdr);
    method Read (line 28) | void Read(IDataReader rdr);
    method End (line 29) | void End();
  class SingleDataReaderResult (line 32) | internal class SingleDataReaderResult<T> : IDataReaderResult<T> {
    method SingleDataReaderResult (line 37) | internal SingleDataReaderResult(Func<IDataReader,T> convert) {
    method Init (line 42) | public void Init(IDataReader rdr) { }
    method End (line 43) | public void End() { }
    method Read (line 45) | public void Read(IDataReader rdr) {
  class ListDataReaderResult (line 50) | internal class ListDataReaderResult<T> : IDataReaderResult<List<T>> {
    method ListDataReaderResult (line 55) | internal ListDataReaderResult(Func<IDataReader,T> convert) {
    method Init (line 60) | public void Init(IDataReader rdr) { }
    method End (line 61) | public void End() { }
    method Read (line 63) | public void Read(IDataReader rdr) {
  class RecordSetDataReaderResult (line 68) | internal class RecordSetDataReaderResult : IDataReaderResult<RecordSet> {
    method RecordSetDataReaderResult (line 71) | internal RecordSetDataReaderResult() {
    method Init (line 75) | public void Init(IDataReader rdr) {
    method End (line 80) | public void End() { }
    method Read (line 82) | public void Read(IDataReader rdr) {
  class DataTableDataReaderResult (line 89) | internal class DataTableDataReaderResult : IDataReaderResult<DataTable> {
    method DataTableDataReaderResult (line 95) | internal DataTableDataReaderResult(DataTable res) {
    method Init (line 99) | public void Init(IDataReader rdr) {
    method Read (line 114) | public void Read(IDataReader rdr) {
    method End (line 122) | public void End() {

FILE: src/NReco.Data/Internal/DbCommandAsyncExt.cs
  class DbCommandAsyncExt (line 25) | internal static class DbCommandAsyncExt {
    method ExecuteNonQueryAsync (line 27) | internal static Task<int> ExecuteNonQueryAsync(this IDbCommand cmd, Ca...
    method ExecuteScalarAsync (line 35) | internal static Task<object> ExecuteScalarAsync(this IDbCommand cmd, C...

FILE: src/NReco.Data/Internal/DbConnectionAsyncExt.cs
  class DbConnectionAsyncExt (line 25) | internal static class DbConnectionAsyncExt {
    method OpenAsync (line 27) | internal static Task OpenAsync(this IDbConnection conn, CancellationTo...

FILE: src/NReco.Data/Internal/DbDataAdapter.MapperContext.cs
  class DbDataAdapter (line 24) | public partial class DbDataAdapter {
    type IMapperContext (line 29) | public interface IMapperContext {
      method MapTo (line 44) | void MapTo(object o);
      method MapTo (line 49) | object MapTo(Type t);
    class MapperContext (line 52) | internal sealed class MapperContext : IMapperContext {
      method MapperContext (line 60) | internal MapperContext(DataMapper mapper, IDataReader rdr, Type toTy...
      method MapTo (line 66) | public void MapTo(object o) {
      method MapTo (line 72) | public object MapTo(Type t) {

FILE: src/NReco.Data/Internal/DbDataAdapter.RawSqlString.cs
  class DbDataAdapter (line 27) | public partial class DbDataAdapter {
    type RawSqlString (line 33) | public struct RawSqlString {
      method RawSqlString (line 35) | public RawSqlString(string s) {

FILE: src/NReco.Data/Internal/DbDataAdapter.SelectQuery.cs
  class DbDataAdapter (line 26) | public partial class DbDataAdapter {
    class SelectQuery (line 31) | public abstract class SelectQuery : IQueryModelResult, IQueryDictionar...
      method SelectQuery (line 38) | internal SelectQuery(DbDataAdapter adapter) {
      method GetSelectCmd (line 54) | internal abstract IDbCommand GetSelectCmd();
      method SetMapper (line 63) | public SelectQuery SetMapper(Func<IDataReaderMapperContext,object> h...
      method SetApplyOffset (line 72) | public SelectQuery SetApplyOffset(bool applyOffset) {
      method Single (line 81) | public T Single<T>() {
      method SingleAsync (line 94) | public Task<T> SingleAsync<T>(CancellationToken cancel = default(Can...
      method ToList (line 108) | public List<T> ToList<T>() {
      method ToListAsync (line 119) | public Task<List<T>> ToListAsync<T>(CancellationToken cancel = defau...
      method ToDictionary (line 133) | public Dictionary<string,object> ToDictionary() {
      method ToDictionaryAsync (line 144) | public Task<Dictionary<string,object>> ToDictionaryAsync(Cancellatio...
      method ToDictionaryList (line 157) | public List<Dictionary<string,object>> ToDictionaryList() {
      method ToDictionaryListAsync (line 164) | public Task<List<Dictionary<string, object>>> ToDictionaryListAsync(...
      method ToRecordSet (line 177) | public RecordSet ToRecordSet() {
      method ToRecordSetAsync (line 188) | public Task<RecordSet> ToRecordSetAsync(CancellationToken cancel = d...
      method ToDataTable (line 201) | public DataTable ToDataTable() => ToDataTable(TableName!=null ? new ...
      method ToDataTable (line 206) | public DataTable ToDataTable(DataTable tbl) {
      method ToDataTableAsync (line 217) | public Task<DataTable> ToDataTableAsync(CancellationToken cancel = d...
      method ToDataTableAsync (line 223) | public Task<DataTable> ToDataTableAsync(DataTable tbl, CancellationT...
      method ExecuteReader (line 236) | public T ExecuteReader<T>(Func<IDataReader,T> readHandler) {
      method ExecuteReaderAsync (line 249) | public Task<T> ExecuteReaderAsync<T>(Func<IDataReader, CancellationT...
      method ExecuteCommand (line 259) | internal T ExecuteCommand<T>(IDbCommand cmd, CommandBehavior cmdBeha...
      method ExecuteCommandAsync (line 273) | internal async Task<T> ExecuteCommandAsync<T>(
    class SelectQueryByQuery (line 304) | internal class SelectQueryByQuery : SelectQuery {
      method SelectQueryByQuery (line 308) | internal SelectQueryByQuery(DbDataAdapter adapter, Query q)
      method GetSelectCmd (line 313) | internal override IDbCommand GetSelectCmd() {
    class SelectQueryBySql (line 336) | internal class SelectQueryBySql : SelectQuery {
      method SelectQueryBySql (line 341) | internal SelectQueryBySql(DbDataAdapter adapter, string sql, object[...
      method GetSelectCmd (line 347) | internal override IDbCommand GetSelectCmd() {
    class SelectQueryByCmd (line 371) | internal class SelectQueryByCmd : SelectQuery {
      method SelectQueryByCmd (line 375) | internal SelectQueryByCmd(DbDataAdapter adapter, IDbCommand cmd)
      method GetSelectCmd (line 380) | internal override IDbCommand GetSelectCmd() {

FILE: src/NReco.Data/Internal/OffsetCountDataReaderWrapper.cs
  class OffsetCountDataReaderWrapper (line 25) | internal class OffsetCountDataReaderWrapper : DbDataReader {
    method OffsetCountDataReaderWrapper (line 31) | internal OffsetCountDataReaderWrapper(IDataReader rdr, int offset, int...
    method GetBoolean (line 56) | public override bool GetBoolean(int ordinal) {
    method GetByte (line 60) | public override byte GetByte(int ordinal) {
    method GetBytes (line 64) | public override long GetBytes(int ordinal, long dataOffset, byte[] buf...
    method GetChar (line 68) | public override char GetChar(int ordinal) {
    method GetChars (line 72) | public override long GetChars(int ordinal, long dataOffset, char[] buf...
    method GetDataTypeName (line 76) | public override string GetDataTypeName(int ordinal) {
    method GetDateTime (line 80) | public override DateTime GetDateTime(int ordinal) {
    method GetDecimal (line 84) | public override decimal GetDecimal(int ordinal) {
    method GetDouble (line 88) | public override double GetDouble(int ordinal) {
    method GetEnumerator (line 92) | public override IEnumerator GetEnumerator() {
    method GetFieldType (line 96) | public override Type GetFieldType(int ordinal) => Rdr.GetFieldType(ord...
    method GetFloat (line 98) | public override float GetFloat(int ordinal) => Rdr.GetFloat(ordinal);
    method GetGuid (line 100) | public override Guid GetGuid(int ordinal) => Rdr.GetGuid(ordinal);
    method GetInt16 (line 102) | public override short GetInt16(int ordinal) => Rdr.GetInt16(ordinal);
    method GetInt32 (line 104) | public override int GetInt32(int ordinal) => Rdr.GetInt32(ordinal);
    method GetInt64 (line 106) | public override long GetInt64(int ordinal) => Rdr.GetInt64(ordinal);
    method GetName (line 108) | public override string GetName(int ordinal) => Rdr.GetName(ordinal);
    method GetOrdinal (line 110) | public override int GetOrdinal(string name) => Rdr.GetOrdinal(name);
    method GetString (line 112) | public override string GetString(int ordinal) => Rdr.GetString(ordinal);
    method GetValue (line 114) | public override object GetValue(int ordinal) => Rdr.GetValue(ordinal);
    method GetValues (line 116) | public override int GetValues(object[] values) => Rdr.GetValues(values);
    method IsDBNull (line 118) | public override bool IsDBNull(int ordinal) => Rdr.IsDBNull(ordinal);
    method NextResult (line 120) | public override bool NextResult() => Rdr.NextResult();
    method GetSchemaTable (line 122) | public override DataTable GetSchemaTable() => Rdr.GetSchemaTable();
    method Close (line 124) | public override void Close() => Rdr.Close();
    method Read (line 126) | public override bool Read() {
    method ReadWithOffsetCountAsync (line 141) | async Task<bool> ReadWithOffsetCountAsync(DbDataReader dbRdr, Cancella...
    method ReadAsync (line 155) | public override Task<bool> ReadAsync(CancellationToken cancellationTok...

FILE: src/NReco.Data/Internal/RecordSetAdapter.cs
  class RecordSetAdapter (line 26) | internal class RecordSetAdapter : IDisposable {
    method RecordSetAdapter (line 36) | internal RecordSetAdapter(DbDataAdapter dbAdapter, string tblName, Rec...
    method GetSetColumns (line 44) | IEnumerable<KeyValuePair<string,IQueryValue>> GetSetColumns() {
    method GetPkQuery (line 47) | Query GetPkQuery() {
    method IsBinaryType (line 57) | bool IsBinaryType(Type t) {
    method FillCmdParams (line 62) | void FillCmdParams(IDbCommand cmd, RecordSet.Row row) {
    method PrepareInsertCmd (line 80) | void PrepareInsertCmd(RecordSet.Row row) {
    method ExecuteInsertCmd (line 89) | int ExecuteInsertCmd(RecordSet.Row row) {
    method ExecuteInsertCmdAsync (line 98) | async Task<int> ExecuteInsertCmdAsync(RecordSet.Row row, CancellationT...
    method PrepareUpdateCmd (line 107) | void PrepareUpdateCmd(RecordSet.Row row) {
    method ExecuteUpdateCmd (line 116) | int ExecuteUpdateCmd(RecordSet.Row row) {
    method ExecuteUpdateCmdAsync (line 121) | Task<int> ExecuteUpdateCmdAsync(RecordSet.Row row, CancellationToken c...
    method PrepareDeleteCmd (line 126) | void PrepareDeleteCmd(RecordSet.Row row) {
    method ExecuteDeleteCmd (line 135) | int ExecuteDeleteCmd(RecordSet.Row row) {
    method ExecuteDeleteCmdAsync (line 140) | Task<int> ExecuteDeleteCmdAsync(RecordSet.Row row, CancellationToken c...
    method Update (line 145) | internal int Update() {
    method UpdateAsync (line 162) | internal async Task<int> UpdateAsync(CancellationToken cancel) {
    method Dispose (line 186) | public void Dispose() {

FILE: src/NReco.Data/Query/IQueryValue.cs
  type IQueryValue (line 22) | public interface IQueryValue

FILE: src/NReco.Data/Query/QAggregateField.cs
  class QAggregateField (line 25) | public class QAggregateField : QField
    method QAggregateField (line 43) | public QAggregateField(string fld, string aggregateFunction, params QF...
    method GetAggrExpr (line 51) | internal static string GetAggrExpr(string aggrFunc, string[] args) {
    method ToString (line 70) | public override string ToString() {

FILE: src/NReco.Data/Query/QConditionNode.cs
  class QConditionNode (line 22) | public class QConditionNode : QNode {
    method QConditionNode (line 52) | public QConditionNode(IQueryValue lvalue, Conditions conditions, IQuer...
    method QConditionNode (line 58) | public QConditionNode(string name, IQueryValue lvalue, Conditions cond...
    method QConditionNode (line 63) | public QConditionNode(QConditionNode node) {
  type Conditions (line 72) | [Flags]

FILE: src/NReco.Data/Query/QConst.cs
  class QConst (line 23) | public class QConst : IQueryValue {
    method QConst (line 47) | public QConst(object value) {
    method QConst (line 56) | public QConst(object value, TypeCode type) {

FILE: src/NReco.Data/Query/QField.cs
  class QField (line 23) | public class QField : IQueryValue
    method QField (line 47) | public QField(string fld) {
    method QField (line 61) | public QField(string fld, string expression) {
    method QField (line 72) | public QField(string prefix, string fld, string expression) {
    method SetNameByExpression (line 80) | private void SetNameByExpression() {
    method SetName (line 92) | private void SetName(string nameStr) {
    method ToString (line 106) | public override string ToString() {

FILE: src/NReco.Data/Query/QGroupNode.cs
  class QGroupNode (line 24) | public class QGroupNode : QNode {
    method QGroupNode (line 46) | public QGroupNode(QGroupType type) {
    method QGroupNode (line 55) | public QGroupNode(QGroupNode likeGroup)
    method And (line 96) | public static QGroupNode And(params QNode[] nodes) {
    method Or (line 107) | public static QGroupNode Or(params QNode[] nodes) {
  type QGroupType (line 118) | public enum QGroupType {

FILE: src/NReco.Data/Query/QNegationNode.cs
  class QNegationNode (line 23) | public class QNegationNode : QNode {
    method QNegationNode (line 35) | public QNegationNode(QNode node) {
    method QNegationNode (line 39) | public QNegationNode(QNegationNode copyNode) {

FILE: src/NReco.Data/Query/QNode.cs
  class QNode (line 24) | public abstract class QNode
    method QNode (line 30) | internal QNode() {

FILE: src/NReco.Data/Query/QRawSql.cs
  class QRawSql (line 23) | public class QRawSql : IQueryValue {
    method QRawSql (line 37) | public QRawSql(string sqlText) {
    method QRawSql (line 46) | public QRawSql(string sqlTemplate, object[] args) {
    method GetSqlText (line 54) | public string GetSqlText(Func<object, string> resolveArgValue) {
    method ResolveToSqlConstant (line 63) | string ResolveToSqlConstant(object o) {

FILE: src/NReco.Data/Query/QRawSqlNode.cs
  class QRawSqlNode (line 20) | public class QRawSqlNode : QNode {
    method QRawSqlNode (line 35) | public QRawSqlNode(string sqlText) {
    method QRawSqlNode (line 44) | public QRawSqlNode(string sqlTemplate, object[] args) {
    method GetSqlText (line 48) | public string GetSqlText(Func<object, string> resolveArgValue) => rawS...

FILE: src/NReco.Data/Query/QSort.cs
  class QSort (line 24) | public class QSort
    method QSort (line 43) | public QSort(string sortFld) {
    method QSort (line 68) | public QSort(string fld, ListSortDirection direction) {
    method ToString (line 77) | public override string ToString() {

FILE: src/NReco.Data/Query/QTable.cs
  class QTable (line 25) | public class QTable
    method QTable (line 42) | public QTable(string tableName) {
    method QTable (line 60) | public QTable(string tableName, string alias) {
    method ToString (line 69) | public override string ToString() {

FILE: src/NReco.Data/Query/QVar.cs
  class QVar (line 25) | public class QVar : QConst, IQueryValue {
    method QVar (line 64) | public QVar(string varName) : base(null) {
    method QVar (line 81) | public QVar(string varName, string format) : base(null) {
    method Set (line 92) | public QVar Set(object varValue) {
    method Unset (line 105) | public void Unset() {

FILE: src/NReco.Data/Query/Query.cs
  class Query (line 31) | public class Query : QNode, IQueryValue
    method Query (line 102) | public Query(QTable table) {
    method Query (line 111) | public Query(QTable table, QNode condition) {
    method Query (line 120) | public Query(Query q) {
    method OrderBy (line 135) | public Query OrderBy(params QSort[] sortFields) {
    method Select (line 148) | public Query Select(params QField[] fields) {
    method SetVars (line 166) | public void SetVars(Action<QVar> setVar) {
    method SetVarsInternal (line 170) | private void SetVarsInternal(QNode node, Action<QVar> setVar) {
    method ToString (line 187) | public override string ToString() {

FILE: src/NReco.Data/RecordSet.cs
  class RecordSet (line 29) | public sealed class RecordSet : ICollection<RecordSet.Row> {
    method RecordSet (line 60) | public RecordSet(Column[] columns) : this(columns, 1) {
    method RecordSet (line 68) | public RecordSet(Column[] columns, int rowsCapacity) {
    method Add (line 77) | public Row Add() {
    method Add (line 86) | public Row Add(object[] values) {
    method Add (line 101) | public Row Add(IDictionary<string,object> values) {
    method AcceptChanges (line 116) | public void AcceptChanges() {
    method SetPrimaryKey (line 128) | public void SetPrimaryKey(params string[] columnNames) {
    method Clear (line 139) | public void Clear() {
    method Contains (line 150) | public bool Contains(Row row) {
    method Add (line 158) | void ICollection<Row>.Add(Row r) {
    method Remove (line 175) | public bool Remove(Row r) {
    method CopyTo (line 183) | void ICollection<Row>.CopyTo(Row[] array, int arrayIndex) {
    method GetEnumerator (line 190) | public IEnumerator<Row> GetEnumerator() {
    method GetEnumerator (line 197) | IEnumerator IEnumerable.GetEnumerator() {
    method Load (line 206) | public int Load(IDataReader rdr) {
    method FromReader (line 238) | public static RecordSet FromReader(IDataReader rdr) {
    method FromReader (line 248) | public static RecordSet FromReader(IDataReader rdr, int rowsCount) {
    method FromModel (line 267) | public static RecordSet FromModel<T>() {
    method FromModel (line 278) | public static RecordSet FromModel<T>(T model, RowState rowState) {
    method FromModel (line 289) | public static RecordSet FromModel<T>(IEnumerable<T> models, RowState r...
    method FromReaderAsync (line 323) | public static Task<RecordSet> FromReaderAsync(IDataReader rdr) {
    method FromReaderAsync (line 330) | public static async Task<RecordSet> FromReaderAsync(IDataReader rdr, C...
    class Column (line 347) | public sealed class Column {
      method Column (line 379) | public Column(string name) {
      method Column (line 383) | public Column(string name, Type dataType) {
      method Column (line 389) | internal Column(System.Data.Common.DbColumn dbCol) {
    class Row (line 402) | public sealed class Row {
      method Row (line 424) | internal Row(RecordSet rs, object[] values) {
      method Delete (line 445) | public void Delete() {
      method AcceptChanges (line 460) | public void AcceptChanges() {
      method Detach (line 468) | internal void Detach() {
      method CheckIfDetached (line 473) | void CheckIfDetached() {
      method GetValue (line 478) | object GetValue(int columnIndex) {
      method SetValue (line 481) | void SetValue(int columnIndex, object val) {
      method Field (line 540) | public T Field<T>(string columnName) {
    type RowState (line 554) | [Flags]
    method ColumnCollection (line 578) | internal ColumnCollection(Column[] columns) {
    method GetOrdinal (line 588) | internal int GetOrdinal(Column c) {
    method GetOrdinal (line 595) | public int GetOrdinal(string columnName) {
    method Contains (line 634) | public bool Contains(string columnName) {
    method GetEnumerator (line 638) | public IEnumerator<Column> GetEnumerator() {
    method GetEnumerator (line 642) | IEnumerator IEnumerable.GetEnumerator() {
    method Add (line 653) | void ICollection<Column>.Add(Column item) {
    method Clear (line 657) | void ICollection<Column>.Clear() {
    method Contains (line 661) | bool ICollection<Column>.Contains(Column item) {
    method CopyTo (line 665) | void ICollection<Column>.CopyTo(Column[] array, int arrayIndex) {
    method Remove (line 669) | bool ICollection<Column>.Remove(Column item) {

FILE: src/NReco.Data/RecordSetReader.cs
  class RecordSetReader (line 28) | public class RecordSetReader : DbDataReader {
    method RecordSetReader (line 36) | public RecordSetReader(RecordSet rs) {
    method EnsureOpen (line 40) | void EnsureOpen() {
    method EnsureRow (line 45) | void EnsureRow() {
    method Dispose (line 103) | protected override void Dispose(bool disposing) {

FILE: src/NReco.Data/Relex/RelexBuilder.cs
  class RelexBuilder (line 26) | public class RelexBuilder {
    method BuildRelex (line 28) | public string BuildRelex(QNode node) {
    method BuildRelex (line 33) | public string BuildRelex(Query node) {
    class InternalBuilder (line 38) | class InternalBuilder : SqlExpressionBuilder {
      method BuildExpression (line 40) | public override string BuildExpression(QNode node) {
      method BuildGroup (line 46) | protected override string BuildGroup(QGroupNode node) {
      method BuildQueryString (line 53) | public string BuildQueryString(Query q, bool isNested) {
      method BuildCondition (line 82) | protected override string BuildCondition(QConditionNode node) {
      method BuildValue (line 105) | public override string BuildValue(IQueryValue value) {
      method BuildValue (line 115) | protected override string BuildValue(QConst qConst) {
      method BuildValue (line 135) | protected override string BuildValue(IList list) {
      method BuildValue (line 143) | protected override string BuildValue(string str) {

FILE: src/NReco.Data/Relex/RelexParser.cs
  class RelexParser (line 28) | public class RelexParser
    type LexemType (line 74) | public enum LexemType {
    method RelexParser (line 83) | static RelexParser() {
    method RelexParser (line 93) | public RelexParser() {
    method GetLexemType (line 96) | protected LexemType GetLexemType(string s, int startIdx, out int endId...
    method GetLexem (line 150) | protected string GetLexem(string s, int startIdx, int endIdx, LexemTyp...
    method GetLexem (line 160) | protected string GetLexem(string s, int startIdx, int endIdx) {
    method GetAllDelimiters (line 165) | protected void GetAllDelimiters(string s, int startIdx, out int endIdx) {
    method GetGroupType (line 171) | protected bool GetGroupType(LexemType lexemType, string s, int startId...
    method GetCondition (line 192) | protected bool GetCondition(LexemType lexemType, string s, int startId...
    method Parse (line 229) | public virtual Query Parse(string relEx) {
    method ParseCondition (line 238) | public virtual QNode ParseCondition(string relExCondition) {
    method ParseTypedConstant (line 250) | protected virtual IQueryValue ParseTypedConstant(string typeCodeString...
    method SplitArrayValues (line 293) | protected string[] SplitArrayValues(string str) {
    method ParseInternal (line 301) | protected virtual IQueryValue ParseInternal(string input, int startIdx...
    method ParseNodeName (line 476) | protected string ParseNodeName(string input, int startIdx, out int end...
    method ParseConditionGroup (line 502) | protected QNode ParseConditionGroup(string input, int startIdx, out in...
    method ComposeGroupNode (line 559) | protected QGroupNode ComposeGroupNode(QNode node1, QNode node2, QGroup...
    method ParseCondition (line 590) | protected QNode ParseCondition(string input, int startIdx, out int end...
    method IsNullValue (line 616) | protected bool IsNullValue(IQueryValue value) {
  class RelexParseException (line 625) | public class RelexParseException : Exception {
    method RelexParseException (line 626) | public RelexParseException() : base() {}
    method RelexParseException (line 627) | public RelexParseException(string message) : base(message) {}
    method RelexParseException (line 628) | public RelexParseException(string message, Exception innerException) :...

FILE: src/NReco.Data/Result/DataReaderMapperContext.cs
  type IDataReaderMapperContext (line 27) | public interface IDataReaderMapperContext {
    method MapTo (line 42) | void MapTo(object o);
    method MapTo (line 47) | object MapTo(Type t);
  class DataReaderMapperContext (line 50) | internal sealed class DataReaderMapperContext : IDataReaderMapperContext {
    method DataReaderMapperContext (line 58) | internal DataReaderMapperContext(DataMapper mapper, IDataReader rdr, T...
    method MapTo (line 64) | public void MapTo(object o) {
    method MapTo (line 70) | public object MapTo(Type t) {

FILE: src/NReco.Data/Result/DataReaderResult.cs
  class DataReaderResult (line 30) | public class DataReaderResult : IQueryModelResult, IQueryDictionaryResul...
    method DataReaderResult (line 44) | public DataReaderResult(IDataReader dataReader) : this(dataReader, 0, ...
    method DataReaderResult (line 53) | public DataReaderResult(IDataReader dataReader, int offset, int count) {
    method DataReaderResult (line 60) | internal DataReaderResult(IDataReader dataReader, int offset, int coun...
    method SetMapper (line 67) | public DataReaderResult SetMapper(Func<IDataReaderMapperContext, objec...
    method Single (line 76) | public T Single<T>() {
    method SingleAsync (line 86) | public Task<T> SingleAsync<T>() {
    method SingleAsync (line 94) | public Task<T> SingleAsync<T>(CancellationToken cancel) {
    method ToList (line 104) | public List<T> ToList<T>() {
    method ToListAsync (line 113) | public Task<List<T>> ToListAsync<T>() {
    method ToListAsync (line 120) | public Task<List<T>> ToListAsync<T>(CancellationToken cancel) {
    method ToDictionary (line 130) | public Dictionary<string, object> ToDictionary() {
    method ToDictionaryAsync (line 139) | public Task<Dictionary<string, object>> ToDictionaryAsync() {
    method ToDictionaryAsync (line 146) | public Task<Dictionary<string, object>> ToDictionaryAsync(Cancellation...
    method ToDictionaryList (line 156) | public List<Dictionary<string, object>> ToDictionaryList() {
    method ToDictionaryListAsync (line 163) | public Task<List<Dictionary<string, object>>> ToDictionaryListAsync() {
    method ToDictionaryListAsync (line 170) | public Task<List<Dictionary<string, object>>> ToDictionaryListAsync(Ca...
    method ToRecordSet (line 181) | public RecordSet ToRecordSet() {
    method ToRecordSetAsync (line 190) | public Task<RecordSet> ToRecordSetAsync() {
    method ToRecordSetAsync (line 197) | public Task<RecordSet> ToRecordSetAsync(CancellationToken cancel) {
    method ToDataTable (line 204) | public DataTable ToDataTable() => ToDataTable(null);
    method ToDataTable (line 213) | public DataTable ToDataTable(DataTable tbl) {
    method ToDataTableAsync (line 222) | public Task<DataTable> ToDataTableAsync(CancellationToken cancel = def...
    method ToDataTableAsync (line 228) | public Task<DataTable> ToDataTableAsync(DataTable tbl, CancellationTok...
    method ChangeType (line 232) | private T ChangeType<T>(object o, TypeCode typeCode) {
    method ReadDictionary (line 239) | private Dictionary<string, object> ReadDictionary(IDataReader rdr) {
    method Read (line 246) | private T Read<T>(IDataReader rdr) {
    method ExecuteReader (line 280) | void ExecuteReader<T>(IDataReaderResult<T> result, int recordCount) {
    method ExecuteReaderAsync (line 294) | async Task<T> ExecuteReaderAsync<T>(IDataReaderResult<T> result, int r...

FILE: src/NReco.Data/Result/IQueryDataTableResult.cs
  type IQueryDataTableResult (line 30) | public interface IQueryDataTableResult {
    method ToDataTable (line 35) | DataTable ToDataTable();
    method ToDataTableAsync (line 40) | Task<DataTable> ToDataTableAsync(CancellationToken cancel = default(Ca...
    method ToDataTable (line 45) | DataTable ToDataTable(DataTable tbl);
    method ToDataTableAsync (line 50) | Task<DataTable> ToDataTableAsync(DataTable tbl, CancellationToken canc...

FILE: src/NReco.Data/Result/IQueryDictionaryResult.cs
  type IQueryDictionaryResult (line 27) | public interface IQueryDictionaryResult {
    method ToDictionary (line 33) | Dictionary<string, object> ToDictionary();
    method ToDictionaryAsync (line 38) | Task<Dictionary<string, object>> ToDictionaryAsync(CancellationToken c...
    method ToDictionaryList (line 43) | List<Dictionary<string, object>> ToDictionaryList();
    method ToDictionaryListAsync (line 48) | Task<List<Dictionary<string, object>>> ToDictionaryListAsync(Cancellat...

FILE: src/NReco.Data/Result/IQueryModelResult.cs
  type IQueryModelResult (line 27) | public interface IQueryModelResult {
    method Single (line 33) | T Single<T>();
    method SingleAsync (line 39) | Task<T> SingleAsync<T>(CancellationToken cancel = default(Cancellation...
    method ToList (line 45) | List<T> ToList<T>();
    method ToListAsync (line 50) | Task<List<T>> ToListAsync<T>(CancellationToken cancel = default(Cancel...

FILE: src/NReco.Data/Result/IQueryRecordSetResult.cs
  type IQueryRecordSetResult (line 27) | public interface IQueryRecordSetResult {
    method ToRecordSet (line 32) | RecordSet ToRecordSet();
    method ToRecordSetAsync (line 37) | Task<RecordSet> ToRecordSetAsync(CancellationToken cancel = default(Ca...

FILE: src/NReco.Data/SqlExpressionBuilder.cs
  class SqlExpressionBuilder (line 27) | public class SqlExpressionBuilder : ISqlExpressionBuilder
    method SqlExpressionBuilder (line 30) | public SqlExpressionBuilder()
    method BuildTableName (line 34) | public virtual string BuildTableName(QTable tbl) {
    method BuildExpression (line 41) | public virtual string BuildExpression(QNode node) {
    method BuildGroup (line 57) | protected virtual string BuildGroup(QGroupNode node) {
    method BuildNegation (line 77) | protected virtual string BuildNegation(QNegationNode node) {
    method BuildCondition (line 84) | protected virtual string BuildCondition(QConditionNode node) {
    method BuildConditionLValue (line 130) | protected virtual string BuildConditionLValue(QConditionNode node) {
    method BuildConditionRValue (line 134) | protected virtual string BuildConditionRValue(QConditionNode node) {
    method IsMultivalueConst (line 142) | bool IsMultivalueConst(IQueryValue val) {
    method BuildValue (line 146) | public virtual string BuildValue(IQueryValue value) {
    method BuildValue (line 165) | protected virtual string BuildValue(QConst value) {
    method BuildValue (line 179) | protected virtual string BuildValue(IList list) {
    method BuildValue (line 186) | protected virtual string BuildValue(string str) {
    method BuildValue (line 190) | protected virtual string BuildValue(QField fieldValue) {
    method BuildValue (line 199) | protected virtual string BuildValue(QAggregateField aggrFldValue) {
    method BuildIdentifier (line 204) | protected virtual string BuildIdentifier(string name) {

FILE: src/NReco.Data/StringTemplate.cs
  class StringTemplate (line 48) | public class StringTemplate {
    method StringTemplate (line 69) | public StringTemplate(string tpl) {
    method StringTemplate (line 75) | public StringTemplate(string tpl, int recursionLevel) {
    method FormatTemplate (line 84) | public string FormatTemplate(IDictionary<string,object> props) {
    method FormatTemplate (line 93) | public string FormatTemplate(Func<string,TokenResult> valueHandler) {
    method ReplaceTokens (line 106) | protected int ReplaceTokens(string tpl, Func<string,TokenResult> value...
    method FormatToken (line 177) | protected virtual string FormatToken(string fmt, object firstArg) {
    method isDoubleChar (line 181) | bool isDoubleChar(char c, string s, int pos) {
    method isBackslashEscapedChar (line 187) | bool isBackslashEscapedChar(char c) {
    method escapeFormatBrackets (line 201) | string escapeFormatBrackets(string s) {
    method ReadFormatOptions (line 214) | private string[] ReadFormatOptions(string s, bool nested, int start, o...
    method ReadName (line 271) | protected string ReadName(string s, int start, out int newStart) {
    class TokenResult (line 299) | public sealed class TokenResult {
      method TokenResult (line 320) | public TokenResult(object val) {
Condensed preview — 150 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,133K chars).
[
  {
    "path": ".github/workflows/dotnet-test.yml",
    "chars": 641,
    "preview": "name: .NET\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n\njobs:\n  build:\n\n    runs-"
  },
  {
    "path": ".gitignore",
    "chars": 98,
    "preview": "App_Data/\npackages/\nbin/\nobj/\n*.user\n*.suo\n.vs\n*.nuget.targets\n*.lock.json\nexamples/*/northwind.db"
  },
  {
    "path": "LICENSE",
    "chars": 1086,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016 Vitalii Fedorchenko\n\nPermission is hereby granted, free of charge, to any pers"
  },
  {
    "path": "README.md",
    "chars": 7971,
    "preview": "# NReco.Data\nLightweight high-performance data access components for generating SQL commands, mapping results to strongl"
  },
  {
    "path": "appveyor.yml",
    "chars": 423,
    "preview": "version: 1.0.{build}\nos: Visual Studio 2022\nconfiguration: Release\nplatform: Any CPU\n\nbranches:\n  only:\n  - master\n\nskip"
  },
  {
    "path": "examples/DataSetGenericDataAdapter/DataSetGenericDataAdapter.csproj",
    "chars": 692,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</Targe"
  },
  {
    "path": "examples/DataSetGenericDataAdapter/GenericDataAdapter.cs",
    "chars": 3004,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Data.Common;\nusing System.Data;\n\nusing "
  },
  {
    "path": "examples/DataSetGenericDataAdapter/Program.cs",
    "chars": 3018,
    "preview": "using System;\nusing System.IO;\nusing System.Data;\nusing System.Data.Common;\n\nusing NReco.Data;\n\nnamespace DataSetGeneri"
  },
  {
    "path": "examples/MySqlDemo.DbMetadata/Models/ColumnMetadata.cs",
    "chars": 490,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nusing System.Componen"
  },
  {
    "path": "examples/MySqlDemo.DbMetadata/Models/TableMetadata.cs",
    "chars": 419,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Component"
  },
  {
    "path": "examples/MySqlDemo.DbMetadata/MySqlDemo.DbMetadata.csproj",
    "chars": 456,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n    <Assembly"
  },
  {
    "path": "examples/MySqlDemo.DbMetadata/Program.cs",
    "chars": 2573,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Linq;\nusin"
  },
  {
    "path": "examples/NReco.Data.Examples.sln",
    "chars": 9828,
    "preview": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.26730.16\nMinim"
  },
  {
    "path": "examples/SqliteDemo.CommandBuilder/Program.cs",
    "chars": 8013,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.IO;\n\nusin"
  },
  {
    "path": "examples/SqliteDemo.CommandBuilder/SqliteDemo.CommandBuilder.csproj",
    "chars": 681,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <AssemblyName>Sq"
  },
  {
    "path": "examples/SqliteDemo.DataAdapter/Program.cs",
    "chars": 7277,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Component"
  },
  {
    "path": "examples/SqliteDemo.DataAdapter/SqliteDemo.DataAdapter.csproj",
    "chars": 677,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <AssemblyName>Sq"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/Controllers/GraphQLController.cs",
    "chars": 1369,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Net;\nusing"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/Db/GraphQL/GraphQLQuery.cs",
    "chars": 2220,
    "preview": "using System.Collections.Generic;\n\nusing GraphQL.Types;\n\nusing SqliteDemo.GraphQLApi.Db.Models;\nusing GraphQL.Resolvers;"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/Db/GraphQL/TableType.cs",
    "chars": 2564,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/Db/Models/ColumnMetadata.cs",
    "chars": 477,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nusing System.Component"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/Db/Models/DatabaseMetadata.cs",
    "chars": 1478,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Threading.Tasks;\nusin"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/Db/Models/TableMetadata.cs",
    "chars": 370,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.ComponentM"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/Program.cs",
    "chars": 829,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/Properties/launchSettings.json",
    "chars": 670,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/SqliteDemo.GraphQLAPI.csproj",
    "chars": 650,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n  </PropertyGrou"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/Startup.cs",
    "chars": 3592,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Threading.Tasks;\nusi"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/appsettings.json",
    "chars": 166,
    "preview": "{\n  \"Logging\": {\n    \"IncludeScopes\": false,\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\","
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/web.config",
    "chars": 549,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n\n  <!--\n    Configure your application settings in appsettings.j"
  },
  {
    "path": "examples/SqliteDemo.GraphQLApi/wwwroot/index.html",
    "chars": 2653,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/.bowerrc",
    "chars": 33,
    "preview": "{\n  \"directory\": \"wwwroot/lib\"\n}\n"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/.vscode/launch.json",
    "chars": 1288,
    "preview": "{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \".NET Core Launch (web)\",\n            \"t"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/.vscode/tasks.json",
    "chars": 335,
    "preview": "{\n    \"version\": \"0.1.0\",\n    \"command\": \"dotnet\",\n    \"isShellCommand\": true,\n    \"args\": [],\n    \"tasks\": [\n        {\n"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Controllers/ArticleController.cs",
    "chars": 1809,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetC"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Db/Context/DbContext.cs",
    "chars": 623,
    "preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\nusing "
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Db/Interfaces/IArticleRepository.cs",
    "chars": 492,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tas"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Db/Models/Article.cs",
    "chars": 529,
    "preview": "using System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnotatio"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Db/Models/User.cs",
    "chars": 348,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nusing System.Componen"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Db/Repositories/ArticleRepository.cs",
    "chars": 1911,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tas"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Db/Views/ArticleView.cs",
    "chars": 462,
    "preview": "using System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnotatio"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Program.cs",
    "chars": 642,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Project_Readme.html",
    "chars": 6657,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Welcome to ASP.NET Core</title>\n    <st"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Properties/launchSettings.json",
    "chars": 630,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/SqliteDemo.MVCApplication.csproj",
    "chars": 1143,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n  </PropertyGroup"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Startup.cs",
    "chars": 4878,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.IO;\n\nusing Microsoft"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Views/Article/Add.cshtml",
    "chars": 2073,
    "preview": "@model SqliteDemo.MVCApplication.Db.Models.Article\n@{\n\tViewBag.Title = \"Add Article\";\n}\n\n\n\n\n\n\n<form class=\"form-horizont"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Views/Article/ArticleItem.cshtml",
    "chars": 229,
    "preview": "@model SqliteDemo.MVCApplication.Db.Models.Article\n\n@{\n    ViewData[\"Title\"] = \"Article\";\n}\n<h2>@ViewData[\"Title\"].</h2>"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Views/Article/Edit.cshtml",
    "chars": 2180,
    "preview": "@model SqliteDemo.MVCApplication.Db.Models.Article\n@{\n\tViewBag.Title = \"Edit Article\";\n}\n\n<form class=\"form-horizontal\" "
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Views/Article/List.cshtml",
    "chars": 1541,
    "preview": "@model IEnumerable<SqliteDemo.MVCApplication.Db.Views.ArticleView>\n\n@{\n    ViewData[\"Title\"] = \"Articles\";\n}\n<h2>@ViewDa"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Views/Shared/Error.cshtml",
    "chars": 708,
    "preview": "@{\n    ViewData[\"Title\"] = \"Error\";\n}\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred wh"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Views/Shared/_Layout.cshtml",
    "chars": 2987,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initi"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Views/_ViewImports.cshtml",
    "chars": 87,
    "preview": "@using SqliteDemo.MVCApplication\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\n"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/Views/_ViewStart.cshtml",
    "chars": 30,
    "preview": "@{\n    Layout = \"_Layout\";\n}\n"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/appsettings.json",
    "chars": 166,
    "preview": "{\n  \"Logging\": {\n    \"IncludeScopes\": false,\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\","
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/bower.json",
    "chars": 197,
    "preview": "{\n  \"name\": \"asp.net\",\n  \"private\": true,\n  \"dependencies\": {\n    \"bootstrap\": \"3.3.6\",\n    \"jquery\": \"2.2.0\",\n    \"jque"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/bundleconfig.json",
    "chars": 601,
    "preview": "// Configure bundling and minification for the project.\n// More info at https://go.microsoft.com/fwlink/?LinkId=808241\n"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/web.config",
    "chars": 549,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n\n  <!--\n    Configure your application settings in appsettings.j"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/_references.js",
    "chars": 341,
    "preview": "/// <autosync enabled=\"true\" />\n/// <reference path=\"js/site.js\" />\n/// <reference path=\"lib/bootstrap/dist/js/bootstra"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/css/site.css",
    "chars": 705,
    "preview": "body {\n    padding-top: 50px;\n    padding-bottom: 20px;\n}\n\n/* Wrapping element */\n/* Set some basic padding to keep con"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/js/site.js",
    "chars": 32,
    "preview": "// Write your Javascript code.\n"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/.bower.json",
    "chars": 918,
    "preview": "{\n  \"name\": \"bootstrap\",\n  \"description\": \"The most popular front-end framework for developing responsive, mobile first "
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/LICENSE",
    "chars": 1084,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2011-2015 Twitter, Inc\n\nPermission is hereby granted, free of charge, to any person"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.css",
    "chars": 26132,
    "preview": "/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://gi"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/dist/css/bootstrap.css",
    "chars": 146082,
    "preview": "/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://gi"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/dist/js/bootstrap.js",
    "chars": 68954,
    "preview": "/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under the MIT license"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/bootstrap/dist/js/npm.js",
    "chars": 484,
    "preview": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequ"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery/.bower.json",
    "chars": 523,
    "preview": "{\n  \"name\": \"jquery\",\n  \"main\": \"dist/jquery.js\",\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"package.json\"\n  ],\n  \"keywords\""
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery/LICENSE.txt",
    "chars": 1606,
    "preview": "Copyright jQuery Foundation and other contributors, https://jquery.org/\n\nThis software consists of voluntary contributio"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery/dist/jquery.js",
    "chars": 258388,
    "preview": "/*!\n * jQuery JavaScript Library v2.2.0\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Cop"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery-validation/.bower.json",
    "chars": 885,
    "preview": "{\n  \"name\": \"jquery-validation\",\n  \"homepage\": \"http://jqueryvalidation.org/\",\n  \"repository\": {\n    \"type\": \"git\",\n    "
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery-validation/LICENSE.md",
    "chars": 1094,
    "preview": "The MIT License (MIT)\n=====================\n\nCopyright Jörn Zaefferer\n\nPermission is hereby granted, free of charge, to "
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery-validation/dist/additional-methods.js",
    "chars": 36839,
    "preview": "/*!\n * jQuery Validation Plugin v1.14.0\n *\n * http://jqueryvalidation.org/\n *\n * Copyright (c) 2015 Jörn Zaefferer\n * Re"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery-validation/dist/jquery.validate.js",
    "chars": 42629,
    "preview": "/*!\n * jQuery Validation Plugin v1.14.0\n *\n * http://jqueryvalidation.org/\n *\n * Copyright (c) 2015 Jörn Zaefferer\n * Re"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery-validation-unobtrusive/.bower.json",
    "chars": 1100,
    "preview": "{\n  \"name\": \"jquery-validation-unobtrusive\",\n  \"version\": \"3.2.6\",\n  \"homepage\": \"https://github.com/aspnet/jquery-valid"
  },
  {
    "path": "examples/SqliteDemo.MVCApplication/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js",
    "chars": 18618,
    "preview": "/*!\n** Unobtrusive validation support library for jQuery and jQuery Validate\n** Copyright (C) Microsoft Corporation. All"
  },
  {
    "path": "examples/SqliteDemo.SqlLogging/LoggingDbFactory.cs",
    "chars": 3837,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Data.Common;\nusing System.Data;\nusing S"
  },
  {
    "path": "examples/SqliteDemo.SqlLogging/Program.cs",
    "chars": 1434,
    "preview": "using System;\nusing System.IO;\nusing NReco.Data;\n\nnamespace SqliteDemo.SqlLogging { \n    class Program {\n\n        stati"
  },
  {
    "path": "examples/SqliteDemo.SqlLogging/Properties/launchSettings.json",
    "chars": 134,
    "preview": "{\n  \"profiles\": {\n    \"SqliteDemo.SqlLogging\": {\n      \"commandName\": \"Project\",\n      \"workingDirectory\": \"$(ProjectDir"
  },
  {
    "path": "examples/SqliteDemo.SqlLogging/SqliteDemo.SqlLogging.csproj",
    "chars": 622,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</Targe"
  },
  {
    "path": "examples/SqliteDemo.WebApi/Controllers/DataApiController.cs",
    "chars": 2608,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNet"
  },
  {
    "path": "examples/SqliteDemo.WebApi/Data/NRecoDataServiceCollectionsExt.cs",
    "chars": 1445,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Data;\n\nus"
  },
  {
    "path": "examples/SqliteDemo.WebApi/Program.cs",
    "chars": 616,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing"
  },
  {
    "path": "examples/SqliteDemo.WebApi/Properties/launchSettings.json",
    "chars": 666,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "examples/SqliteDemo.WebApi/SqliteDemo.WebApi.csproj",
    "chars": 682,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n  </PropertyGroup"
  },
  {
    "path": "examples/SqliteDemo.WebApi/Startup.cs",
    "chars": 2396,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.IO;\nusing"
  },
  {
    "path": "examples/SqliteDemo.WebApi/appsettings.json",
    "chars": 166,
    "preview": "{\n  \"Logging\": {\n    \"IncludeScopes\": false,\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\","
  },
  {
    "path": "examples/SqliteDemo.WebApi/web.config",
    "chars": 549,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n\n  <!--\n    Configure your application settings in appsettings.j"
  },
  {
    "path": "examples/SqliteDemo.WebApi/wwwroot/index.html",
    "chars": 4559,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />"
  },
  {
    "path": "src/NReco.Data/DataHelper.cs",
    "chars": 6121,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/DataMapper.cs",
    "chars": 7895,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/DbBatchCommandBuilder.cs",
    "chars": 2069,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/DbCommandBuilder.cs",
    "chars": 10707,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/DbCommandBuilderExtensions.cs",
    "chars": 1647,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/DbDataAdapter.cs",
    "chars": 18832,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/DbDataView.cs",
    "chars": 7579,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/DbFactory.cs",
    "chars": 4364,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/DbSqlExpressionBuilder.cs",
    "chars": 2775,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/ExecuteDbCommandException.cs",
    "chars": 658,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
  },
  {
    "path": "src/NReco.Data/IDbCommandBuilder.cs",
    "chars": 1131,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/IDbFactory.cs",
    "chars": 1917,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/IRecordSetAdapter.cs",
    "chars": 1387,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/ISqlExpressionBuilder.cs",
    "chars": 1069,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Internal/DataReaderAsyncExt.cs",
    "chars": 1240,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Internal/DataReaderResult.cs",
    "chars": 3101,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Internal/DbCommandAsyncExt.cs",
    "chars": 1258,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Internal/DbConnectionAsyncExt.cs",
    "chars": 1049,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Internal/DbDataAdapter.MapperContext.cs",
    "chars": 1970,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016-2017 Vitaliy Fedorchenko\n * Dist"
  },
  {
    "path": "src/NReco.Data/Internal/DbDataAdapter.RawSqlString.cs",
    "chars": 1458,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016-2017 Vitaliy Fedorchenko\n * Dist"
  },
  {
    "path": "src/NReco.Data/Internal/DbDataAdapter.SelectQuery.cs",
    "chars": 12871,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Internal/OffsetCountDataReaderWrapper.cs",
    "chars": 4504,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Internal/RecordSetAdapter.cs",
    "chars": 6410,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/NReco.Data.csproj",
    "chars": 4838,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>Fast lightweight data access library for .NET Cor"
  },
  {
    "path": "src/NReco.Data/Properties/AssemblyInfo.cs",
    "chars": 1381,
    "preview": "using System.Resources;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropSer"
  },
  {
    "path": "src/NReco.Data/Query/IQueryValue.cs",
    "chars": 635,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QAggregateField.cs",
    "chars": 2220,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QConditionNode.cs",
    "chars": 1748,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QConst.cs",
    "chars": 3477,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QField.cs",
    "chars": 5335,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QGroupNode.cs",
    "chars": 3285,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QNegationNode.cs",
    "chars": 1197,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QNode.cs",
    "chars": 1299,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QRawSql.cs",
    "chars": 2124,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QRawSqlNode.cs",
    "chars": 1546,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QSort.cs",
    "chars": 2738,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QTable.cs",
    "chars": 2234,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/QVar.cs",
    "chars": 2921,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Query/Query.cs",
    "chars": 5026,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/RecordSet.cs",
    "chars": 20789,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/RecordSetReader.cs",
    "chars": 8891,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Relex/RelexBuilder.cs",
    "chars": 5537,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Relex/RelexParser.cs",
    "chars": 21893,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/Result/DataReaderMapperContext.cs",
    "chars": 1919,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016-2017 Vitaliy Fedorchenko\n * Dist"
  },
  {
    "path": "src/NReco.Data/Result/DataReaderResult.cs",
    "chars": 10470,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2017 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Result/IQueryDataTableResult.cs",
    "chars": 1597,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2017 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Result/IQueryDictionaryResult.cs",
    "chars": 1597,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2017 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Result/IQueryModelResult.cs",
    "chars": 1606,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2017 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/Result/IQueryRecordSetResult.cs",
    "chars": 1127,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2017 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data/SqlExpressionBuilder.cs",
    "chars": 6484,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribute"
  },
  {
    "path": "src/NReco.Data/StringTemplate.cs",
    "chars": 10662,
    "preview": "#region License\n/*\n * NReco Data library (http://www.nrecosite.com/)\n * Copyright 2016 Vitaliy Fedorchenko\n * Distribut"
  },
  {
    "path": "src/NReco.Data.Tests/DataReaderResultTests.cs",
    "chars": 2663,
    "preview": "using System;\nusing System.Data;\n\nusing Xunit;\nnamespace NReco.Data.Tests\n{\n\n\tpublic class DataReaderResultTests\n\t{\n\t\t[F"
  },
  {
    "path": "src/NReco.Data.Tests/DbBatchCommandBuilderTests.cs",
    "chars": 991,
    "preview": "using System;\nusing System.Data;\nusing System.Data.Common;\nusing System.Collections;\nusing System.Collections.Generic;\nu"
  },
  {
    "path": "src/NReco.Data.Tests/DbCommandBuilderTests.cs",
    "chars": 9003,
    "preview": "using System;\nusing System.Data;\nusing System.Data.Common;\nusing System.Collections;\nusing System.Collections.Generic;\nu"
  },
  {
    "path": "src/NReco.Data.Tests/DbDataAdapterTests.cs",
    "chars": 16183,
    "preview": "using System;\nusing System.Data;\nusing System.Data.Common;\nusing System.Collections;\nusing System.Collections.Generic;\nu"
  },
  {
    "path": "src/NReco.Data.Tests/NReco.Data.Tests.csproj",
    "chars": 650,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <IsPackable>fals"
  },
  {
    "path": "src/NReco.Data.Tests/QueryTests.cs",
    "chars": 3050,
    "preview": "using System;\nusing System.ComponentModel;\nusing Xunit;\nusing NReco.Data;\n\nnamespace NReco.Data.Tests\n{\n\n\tpublic class Q"
  },
  {
    "path": "src/NReco.Data.Tests/RecordSetTests.cs",
    "chars": 5652,
    "preview": "using System;\nusing System.Collections.Generic;\n\nusing Xunit;\nusing NReco.Data;\nusing System.ComponentModel.DataAnnotati"
  },
  {
    "path": "src/NReco.Data.Tests/RelexTests.cs",
    "chars": 11568,
    "preview": "using System;\nusing System.Collections;\nusing System.Diagnostics;\nusing System.Reflection;\nusing System.IO;\nusing System"
  },
  {
    "path": "src/NReco.Data.Tests/SqliteDbFixture.cs",
    "chars": 5273,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.IO;\n\nusin"
  },
  {
    "path": "src/NReco.Data.Tests/StringTemplateTests.cs",
    "chars": 5388,
    "preview": "using System;\nusing System.ComponentModel;\nusing System.Collections.Generic;\n\nusing Xunit;\n\nnamespace NReco.Data.Tests\n{"
  },
  {
    "path": "src/NReco.Data.sln",
    "chars": 1796,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.26114.2\nMinim"
  }
]

About this extraction

This page contains the full source code of the nreco/data GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 150 files (999.0 KB), approximately 287.8k tokens, and a symbol index with 830 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!