- Missed CreateNullableStringColumn in DerivedTableBase.
- Table descriptor generation Unknown default value type: Bool (When a boolean column has a default value).
- Dynamic table metadata creation/modification with
SqTable
class
- It adds conversion from float to double when reading from column with real type.
- varbinary column explicit length now limited with 8000. Leave the length unspecified to get max length
- Retrieving of database tables metadata + comparison
- MERGE expression builder
- Table Value Functions
- All aggregate functions now can be used with
OVER(...)
- SqDatabase can query IAsyncEnumerable<ISqRecord> (for .Net 6)
- SqDatabase supports async version for all I/O operation (for .Net 6)
expr.SyntaxTree().ModifyDescendants(modifier)
new method that returns object of the same type.- arguments of OR and AND operators now can be nullable (for .Net 6)
- DateDiff function + polyfills for Postgresql and MySql
GetParentTables()
for TableBase()
- Values Constructor in MYSQL now is implemented through UNION ALL
- .Net Framework is not supported anymore, however, .Net Standard 2.0 is still supported
- .Net less than 6 now use .Net Standard 2.0 which does not have some functions
- SyntaxTreeActions structure now has a generic parameter
- Bitwise operators (Warning! C# operator precedence is used)
- Infinite loop when creating tables with foreign keys from multiple threads
- CTE (see readme.md)
SqQueryBuilder.ValueQuery(...)
- It allows using a sub-query as a value (e.g. in boolean expressions or a column)- Powershell commandlets Gen-Tables and Gen-Models in Package Manager Console
- Syntax Tree WalkThrough method has a new overload with a link to parent node
- SqModels now have new methods: GetColumnsWithPrefix, ReadWithPrefix, IsNull, IsNullWithPrefix
- Concat helper was renamed to Combine (to avoid a conflict with Linq)
- Support of DateTimeOffset
InsertInto(t, c1, c2, ...).Values(v1,v2,..).Values(v1,v2,..)...DoneWithValues()
- StackOverflow on recursive foreign keys
- Cancellation Token for all db calls
- Code-gen can be used with .Net 5 and 6 runtimes
- the DTO code-generator now has a parameter that allows generating C# records:
--model-type ImmutableClass|Record
or<SqModelGenType>ImmutableClass|Record</SqModelGenType>
; - "CheckExistenceBy" in the Insert data builder what adds WHERE EXISTS(...) to a Insert source to avoid duplicates inserting;
- ExistsIn<TTable>(..predicate..) ... - Helper that returns boolean expression
EXISTS(SELECT 1 FROM TTable WHERE ..Predicate..)
- QueryPage extension for OffsetFetch queries.
- When some column(s) in values constructor contains only nulls, sqexpress now adds an explicit type cast for the first cell e.g.
CAST(NULL as int)
- MergeDataInto now allows only keys mapping unless WhenMatchThenUpdate is defined (without additional updates)
- Derived tables now can have 0 declared columns
- "ReadAsString(recordReader:ISqDataRecordReader): string" and "FromString(value: string?): ExprLiteral" are added to TableColumn. They allow performing mass export/import of database data.
- Lt Gt operators overload between columns
- ColumnMeta is public now
- Identity Insert
- SqModelSelectBuilder - Fluent API that allows quickly get a tuple of DTO SqModels from tables join
- Column method "Read" now has an overload that receives an ordinal index
- "ReadOrdinal" was added to ISqModelReader
- ThenBy for ExprOrderItem andExprOrderBy
- ISqDatabase has a new overload for Query which receives an asynchronous record handler
- Build targets to run model code-generation
- new option "--clean-output" for the model code-generation tool
- ISqModelDerivedReaderReader was removed. ISqModelReader was slightly changed;
- CodeGenUtil - typo fixed in parameter "-v quiet"
- "MERGE" polyfill for PostgreSql and MYSQL
- ISqModelReader;ISqModelUpdater (--rw-classes key in the code-generation utility)
- SqModel for temporary and derived tables
- Keep class modifiers in the code generation
- New expression modifiers: AddOrderBy, AddOffsetFetch, JoinAsAnd, JoinAsOr
- New query extension: QueryDictionary
- ISqDatabase.BeginTransactionOrUseExisting(out bool isNewTransaction);
- SyntaxTree().Descendants(); SyntaxTree().DescendantsAndSelf();
- UpdateData builder
- ISqDatabase.BeginTransaction now does not throw an exception if connection was not opened (it is automatically opened on the first request)
- Duplicates in model code-generation when one model is used for several tables
- Some new methods were added in some public interfaces, so if you have own implementations then they need to be extended.
- Code-generation utility
- Table descriptors scaffolding
- DTO models generation
- .Net Framework 4.5
- Binary Column Type
- Fixed Size String Column Type
- Xml Column Type
- Export/Import to JSON (for .Net Core 3.1+)
- ISqDatabase.BeginTransaction()
- Several Foreign Keys for one table column
- Some public interfaces have new methods to be implemented
- ValueTuples are not used anymore (replaced with explicit structures to compatibility with .Net Framework 4.5)
- Cast does not require "Literal" for literals.
- Explicit database name for tables in MySql
- My SQL
- All Columns .*
- Values Constructor as Sub-query
- Modulo operator
- Query Handler
- Analytic Functions
- Sub-queries without derived tables
- Post "Done" modifications### Bugfix
- Explicit database name for tables in MySql
- '+' instead of '-' in arithmetic expressions
- Double “LIMIT” with “ORDER BY”
- Table descriptors support indexes declarations
- Table descriptors support default values for columns
- Unsafe value expression
- “Where” now accepts nulls
- expr.SyntaxTree().WalkThrough()
- expr.SyntaxTree().Find()
- expr.SyntaxTree().Modify
- ExprDeserializer.Deserialize()
- Database name can be specified in table names
- Temp Tables
- Top -> Limit in PostgreSQL
- DateAdd
- Export/Import to/from PlainList
- Export/Import to/from Xml
- Custom scalar functions
- SqlBuilderBase is now internal
- IExprVisitor changed