Nexttag.Data.Sql 1.0.0

dotnet add package Nexttag.Data.Sql --version 1.0.0
                    
NuGet\Install-Package Nexttag.Data.Sql -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Nexttag.Data.Sql" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Nexttag.Data.Sql" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Nexttag.Data.Sql" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Nexttag.Data.Sql --version 1.0.0
                    
#r "nuget: Nexttag.Data.Sql, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Nexttag.Data.Sql@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Nexttag.Data.Sql&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Nexttag.Data.Sql&version=1.0.0
                    
Install as a Cake Tool

Nexttag.Data.Sql

Transforma perguntas em linguagem natural em consultas SQL seguras (NL→SQL via LLM) com guarda de segurança multicamadas e abstrações read-only agnósticas de engine.

Instalar

dotnet add package Nexttag.Data.Sql

Requer .NET 10.

Registrar (Program.cs)

Esta lib não tem extensão de DI própria — instancie NlToSql e use SqlGuard diretamente. A implementação de engine (Nexttag.Data.Sql.Postgres) provê as implementações de ISqlSchemaReader e ISqlExecutor.

// Registro manual (sem provider de banco ainda)
builder.Services.AddSingleton<NlToSql>(sp =>
    new NlToSql(sp.GetRequiredService<IChatClient>()));

Configurar

Sem configuração obrigatória na lib base. O IChatClient (Microsoft.Extensions.AI) deve apontar para o LiteLLM ou qualquer gateway OpenAI-compatível.

// appsettings.json — configuração do LLM (ex.: litellm)
{
  "LiteLlm": {
    "Endpoint": "http://localhost:4000/v1",
    "ApiKey": "<sua-virtual-key>",
    "AnalystModel": "qwen3:32b"
  }
}

Usar

Peças principais

Tipo Papel
NlToSql Pergunta + schema → SQL proposto (via LLM). Não executa nada.
SqlGuard Valida: 1 comando, só SELECT/CTE, sem DDL/DML, allowlist de tabelas, injeta LIMIT
ISqlSchemaReader Introspecta colunas das tabelas liberadas (impl por engine)
ISqlExecutor Executa somente-leitura com limite e timeout (impl por engine)
TableRef record(Schema, Name) — referência de tabela para a allowlist
TableInfo Schema de uma tabela (colunas) retornado pelo ISqlSchemaReader
QueryResult Resultado tabular: Columns + Rows + RowCount
GuardResult Veredito do guard: Allowed, Reason, Sql (já com LIMIT)
NlToSqlResult SQL proposto + Explanation em texto

Fluxo completo (propor → validar → executar)

// 1. Define a allowlist (tabelas que o bot pode ler)
var allow = new[] {
    new TableRef("public", "pedidos"),
    new TableRef("public", "clientes")
};

// 2. Lê o schema das tabelas liberadas (impl: PgSqlSchemaReader)
var schema = await schemaReader.ReadAsync(allow, ct);

// 3. LLM propõe a consulta — NÃO executa
var proposta = await nlToSql.GenerateAsync(
    "quanto faturamos em maio?", schema, dialect: "PostgreSQL", ct);
// proposta.Sql — SELECT gerado; proposta.Explanation — texto explicativo

// 4. Guard valida (+ revisão humana antes de aprovar)
var veredito = SqlGuard.Validate(proposta.Sql, allow, maxRows: 1000);
if (!veredito.Allowed)
    throw new InvalidOperationException(veredito.Reason);

// 5. Executa read-only (impl: PgSqlExecutor)
var resultado = await executor.ExecuteAsync(veredito.Sql, maxRows: 1000, timeoutSeconds: 15, ct);
// resultado.Columns — nomes das colunas
// resultado.Rows    — List<IReadOnlyList<object?>>
// resultado.RowCount

Formatar schema para prompt manual

string textoSchema = SqlSchemaFormatter.Format(schema);

Receitas

Testar a conexão antes de expor ao usuário

await executor.TestConnectionAsync(ct); // lança se falhar

Bloquear e relatar SQL inválido

var r = SqlGuard.Validate(sqlDoUsuario, allow);
if (!r.Allowed)
    return Results.Problem(r.Reason, statusCode: 422);
var resultado = await executor.ExecuteAsync(r.Sql);

Limitar tabelas visíveis por tenant

// Cada tenant tem sua própria allowlist carregada do banco
var allow = await db.DatasourceTables
    .Where(t => t.DatasourceId == tenantId && t.Enabled)
    .Select(t => new TableRef(t.SchemaName, t.TableName))
    .ToListAsync(ct);

Notas

  • NlToSqlpropõe — o host é responsável por revisar antes de executar.
  • SqlGuard bloqueia DDL/DML, multi-statement, tabelas fora da allowlist e injeta LIMIT. Mesmo assim, use sempre usuário read-only no banco.
  • CTEs (WITH x AS (...)) são reconhecidas como tabelas virtuais — não precisam estar na allowlist.
  • O guard recusa SQL vazio, sem SELECT/WITH no início, ou com palavras como insert, update, drop, set, etc.
  • Provider de banco obrigatório: Nexttag.Data.Sql.Postgres.
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Nexttag.Data.Sql:

Package Downloads
Nexttag.Data.Sql.Postgres

Implementacao PostgreSQL de Nexttag.Data.Sql: introspeccao de schema (information_schema) e execucao SOMENTE-LEITURA (transacao read only + statement_timeout) via Npgsql. Recomenda-se um usuario read-only no banco do cliente.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 151 6/17/2026