{"id":9010503,"name":"sqlom","ecosystem":"nuget","description":"SqlOM is a software component which allows you to programmatically create SQL queries at runtime using a convenient .NET Object Model, thus creating an abstraction layer over SQL. Supports SQL Server, Oracle, MySQL, MariaDB, SQLite, and PostgreSQL with modern C# features including fluent API, Common Table Expressions, and first-class parameterized query output.","homepage":"https://github.com/onnop/SqlOM","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/onnop/SqlOM","keywords_array":["SQL","SQL-Generator","Query-Builder","Dynamic-SQL","Database","ORM","SQL-Server","Oracle","MySQL","MariaDB","SQLite","PostgreSQL","CTE","Fluent-API","LINQ","Modern-CSharp"],"namespace":null,"versions_count":10,"first_release_published_at":"2023-09-07T14:12:55.403Z","latest_release_published_at":"2026-04-20T21:25:21.950Z","latest_release_number":"2.0.0","last_synced_at":"2026-05-26T05:17:25.560Z","created_at":"2024-02-27T01:53:32.135Z","updated_at":"2026-05-26T05:17:32.446Z","registry_url":"https://www.nuget.org/packages/sqlom/","install_command":"Install-Package sqlom","documentation_url":null,"metadata":{"copyright":"Copyright © onnop","license_info":{"type":"file","text":"License.txt","version":null},"license_url":"https://aka.ms/deprecateLicenseUrl","require_license_acceptance":false,"icon":"Logo_initials.png","readme":"README.md","repository":{"type":"git","url":"https://github.com/onnop/SqlOM","branch":null,"commit":"436e12128d6b16c2d4487ef9d2e0273896a8c9be"},"development_dependency":false,"serviceable":false,"framework_assemblies":[],"package_types":[],"release_notes":"Version 2.0.0 - Modernised collections and parameterised rendering\n\n      BREAKING:\n      • All built-in collection types now derive from System.Collections.ObjectModel.Collection\u003cT\u003e instead of the legacy CollectionBase. The strongly-typed methods (Add, Contains, IndexOf, Insert, Remove, indexer, foreach) keep working, but Add(T) now returns void instead of int, the typed nested Enumerator classes were removed (use foreach), and the constructor that took the same collection type now accepts IEnumerable\u003cT\u003e. AddRange now accepts IEnumerable\u003cT\u003e (covers both arrays and other collections of the same element type).\n      • Target framework is now net9.0 only (netstandard2.1 and net8.0 dropped). Consumers must target .NET 9 or higher.\n      • Recompilation against the 2.0 assembly is required. Source code that uses the typical patterns (Add, foreach, [], Count, Clear) compiles unchanged.\n\n      New:\n      • RenderedCommand / RenderedParameter and RenderSelectCommand / RenderInsertCommand / RenderUpdateCommand / RenderDeleteCommand / RenderBulkInsertCommand on every renderer. These return SQL with parameter placeholders (@p0, @p1, ...) plus the captured constant values, so query output can be safely bound through ADO.NET / Dapper / Npgsql / etc. instead of inlining literals.\n      • Oracle uses :p0 placeholders; SQL Server / MySQL / SQLite / PostgreSQL use @p0. Override SqlOmRenderer.FormatParameterName(int) to customise.\n      • SqlOMExtensions.BeginAliasScope() now reliably isolates auto-generated aliases for nested or parallel query construction; sub-query constructors no longer wipe the parent scope's alias counter.\n      • CommonTableExpressionCollection.Clone() now preserves CommonTableExpression.IsRecursive (previously silently dropped).\n\n      Version 1.2.0 - Nullability, SQLite parity, and identifier hardening\n\n      New:\n      • Full C# nullable-reference-type annotations across public API (FromTerm, SelectColumn, OrderByTerm, GroupByTerm, UpdateTerm, WhereTerm, SqlExpression, DeleteQuery, InsertQuery, UpdateQuery, BulkInsertQuery)\n      • SqlOMExtensions.BeginAliasScope() - IDisposable scope for nested/parallel query building without cross-contaminating auto-generated aliases\n      • SQLiteRenderer rewritten: supports CTEs, LIMIT/OFFSET paging, RenderPage, and ifnull(); rejects WITH CUBE/ROLLUP with a clear exception instead of emitting invalid SQL\n\n      Fixed:\n      • Identifier() now escapes the closing-quote character (] \" `) inside identifier bodies (defense-in-depth against identifier injection)\n      • SQLiteRenderer.Constant() now uses InvariantCulture, applies SqlEncode, and has the missing 'else' guard that the base had before 1.1.0\n      • Various APIs that accepted null by convention are now correctly typed as nullable (e.g. SelectColumn ctor table parameter, FromTerm.Table overloads, OrderByTerm/GroupByTerm table parameter)\n\n      Version 1.1.0 - Correctness, performance, and security release\n\n      New:\n      • Recursive CTE support (WITH RECURSIVE) via CommonTableExpression.IsRecursive\n      • SQL Server OFFSET-FETCH paging mode (SqlServerRenderer.UseOffsetFetchPaging)\n      • netstandard2.1 target added alongside net8.0 / net9.0\n      • Source Link, deterministic builds, and symbol packages (.snupkg) for better debugging\n\n      Fixed:\n      • PostgreSQL renderer no longer emits T-SQL \"top N\" or \"with cube / with rollup\"\n      • SelectQuery.Clone() now clones the HAVING phrase (was silently dropped)\n      • ReadUncommitted no longer leaks \"with (nolock)\" to Oracle / PostgreSQL / MySQL / SQLite\n      • Constant rendering: added missing else before Number, invariant culture, SqlEncode applied to string/guid literals for defense-in-depth\n      • Identifier casing is now culture-invariant (ToUpperInvariant)\n      • IS NULL / IS NOT NULL / WHERE no longer produce double spaces\n\n      Performance / cleanup:\n      • ByteArrayToHexString uses Convert.ToHexString on .NET 5+\n      • AppendFormat-with-no-args calls replaced with direct Append\n      • Index-based iteration replaces \"if (item != collection[0])\" anti-pattern\n      • Removed dead commented-out code blocks","dependency_summary":{"total_dependency_groups":1,"target_frameworks":["net9.0"],"total_dependencies":0}},"repo_metadata":{},"repo_metadata_updated_at":"2026-05-26T05:17:32.410Z","dependent_packages_count":0,"downloads":2202,"downloads_period":"total","dependent_repos_count":0,"rankings":{"downloads":54.201385513263986,"dependent_repos_count":13.819348826338206,"dependent_packages_count":18.835372714592,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":28.9520356847314},"purl":"pkg:nuget/sqlom","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nuget/sqlom","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nuget/sqlom","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nuget/sqlom/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/sqlom/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/sqlom/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/sqlom/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/sqlom/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/sqlom/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/sqlom/codemeta","maintainers":[{"uuid":"OnnoP","login":"OnnoP","name":null,"email":null,"url":null,"packages_count":2,"html_url":"https://www.nuget.org/profiles/OnnoP","role":null,"created_at":"2024-02-27T02:01:47.572Z","updated_at":"2024-02-27T02:01:47.572Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/maintainers/OnnoP/packages"}]}