Christopher Jolly
185e3ef4d8
ODBC Fixes ( #220 )
...
* Fix parameter config for decimal and long when using odbc
* DateTime.Date needs its output type mapping to be a datetime
* use decimal as base for currency
* update tests
* Fix DateTime.Date null checking
2 years ago
Christopher Jolly
4e0e0d743c
Map the Zero DateTime in C# to the zero equivalent in Office Ole Automation ( #214 )
...
* Map the Zero DateTime in C# to the zero equivalent in Office Ole Automation
2 years ago
Christopher Jolly
c963aa4800
Improve the de duplication in the ORDER BY clause ( #211 )
2 years ago
Christopher Jolly
f14e552abf
Fix NULL value returned on parameter in a projection when the parameter is used in a subquery projection and parent references it in a group by
2 years ago
Christopher Jolly
e4770f4f04
There is no function to create a new guid in MS Access. Translate Guid.NewGuid client side while generating the SQL
2 years ago
Christopher Jolly
70942d7562
Don't throw error on translating ElementAtOrDefault. This is just operating on the standard rows and not any json. Effectivbely translates at Skip(x) Take(1)
2 years ago
Christopher Jolly
0cdd3066e1
Fix the DateTime Member translator. It wasn't translating the static Today member (as it was a static and not instance member)
2 years ago
Christopher Jolly
e797aa7b94
Optimization to throw on a split query with offset but no order by ( #209 )
2 years ago
Christopher Jolly
7fb522e90f
Move the SkipTake to its own processor ( #206 )
...
* Move the SkipTake to its own processor
This handles the queries with Offset and Limit better as there are other linq methods that manage to set the Limit (e.g. First)
2 years ago
Christopher Jolly
32911aff2d
Turn off the OnAdd value generated strategy when the TPC mapping strategy is set ( #204 )
...
* Turn off the OnAdd value generated strategy when the TPC mapping strategy is set
2 years ago
Christopher Jolly
dcca36386c
Make NULL a variant in the case the type is an enum. This is in addition to when it is a numeric type
2 years ago
Christopher Jolly
3f6cc90f8f
Handle another Jet UNION quirk with NULL values. A string value could be returned when the store and expected type is a byte
2 years ago
Christopher Jolly
88b3cba005
RetryingExecutionStrategy: Look at the HResult from the actual exception. When trying to create our own pseudo exception for test purposes. We are unable to get an IErrorRecords object, so that we can set the error data and add it to the list of errors. May need to look at a CoCreateInstance method to do it properly or just leave it as is
2 years ago
Christopher Jolly
9cd87c05e0
We need to mark the query getting the affected number of rows as returning a result set that contains a row with the number of affected rows from the previous operation. Without it, the result would be read from the row count of the current SELECT
2 years ago
Christopher Jolly
580b3c5cde
Fix Any,All,Contains with Many to Many relationships within a Where clause ( #202 )
...
* Fix Any,All,Contains with Many to Many relationships within a Where clause
2 years ago
Christopher Jolly
12bbf0470f
Reintroduce the SkipTakeCollapsingExpressionVisitor ( #200 )
2 years ago
Christopher Jolly
99c266297e
Fix up some datetimeoffset tests ( #199 )
2 years ago
Christopher Jolly
a074e5cac4
Assert Translation Failed for certain primitive collection tests ( #198 )
2 years ago
Christopher Jolly
2afe8f05ba
Ensure strings with length greater than 255 are converted to long text/memo ( #197 )
...
When the option to use the short text (aka varchar) as the default for System.String, if we have a attribute or fluent api that sets its max length to greater than 255 it would stay as varchar, which is invalid with a length greater than 255.
Fix this to upgrade this instance to an unbounded string. This will use the long text/memo data type in Jet (longchar)
2 years ago
Christopher Jolly
df7b86ac96
Misc test fixes ( #196 )
2 years ago
Christopher Jolly
7b6ee168e2
Properly read and write UTC values for DateTimeOffset ( #188 )
...
MS Access does not have a DateTimeOffset data type so the value should be converted to UTC and saved as a normal date/time
This fixes 2 things
Regression in 7.0 series where the DateTimeOffset was being written as Local time and not UTC.
When reading the value and converting from a DateTime, the Offset value ended up being implicitly set to the systems local time zone offset. A DateTimeOffset from a UTC value should actually have an offset of 0. This has been wrong since the 2.2 series
2 years ago
Christopher Jolly
73875b9832
Revert the behaviour of DateTimeOffset to how it was in the 7.0 series ( #184 )
...
* Revert the behaviour of DateTimeOffset back to how it was in the 7.0 series
2 years ago
Christopher Jolly
ee8cfdb21f
Add option to configure the manner of mapping DateTimeOffset ( #180 )
...
* Add option to configure how to save/map a datetimeoffset i.e. as string or as a datetime
2 years ago
Christopher Jolly
1c29984574
Improve handling of scalar subqueries in order by clause ( #177 )
...
* Add expression visitor to locate a scalar subquery. Handles finding deeper subqueries better than original code.
Also handle the case where the expression can be regarded as scalar (i.e. has a TOP 1 and projects only one field). In that case we rewrite the projections so that we take out any previously added projections as it is clear we are not needing it higher up in the SQL
2 years ago
Christopher Jolly
0bfa24998f
Fix string methods related to LastOrDefault and Contains ( #175 )
...
* Fix string methods related to LastOrDefault and Contains
2 years ago
Christopher Jolly
dbe3bf7e89
The DELETE statement in Jet doesn't take the TOP clause like SQL server. Limit the valid select expressions to those that do not use TOP. EF Core will then rewrite it into a WHERE EXISTS clause to use in the DELETE. Valid select expressions are able to be used directly in the DELETE/UPDATE
2 years ago
Christopher Jolly
2f69290f44
Generate proper SQL for UPDATE and DELETE when we have multiple tables, select expression, joins
2 years ago
Christopher Jolly
21b07705ce
Return empty list for state indices when having parsed an empty string
2 years ago
Christopher Jolly
559cdc6d3c
Some updates to the migration/update sql. Main change is if we are doing an INSERT, if there is no values to be read back we don't have to follow it up with a 'SELECT @@ROWCOUNT'
2 years ago
Christopher Jolly
c73f4a3013
Add the onDelete convention so that we match the behaviour of sql server when configuring self-referencing skip navigations. Ends up configured as ClientCascade instead of Cascade
2 years ago
Christopher Jolly
6fe74929cf
Remove tag lines/comments from the sql to be executed
2 years ago
Christopher Jolly
4bdd001eda
Add the default warning config in. Some of the defaults set warnings to throw instead of Log
2 years ago
Christopher Jolly
caeb6db77b
Lift subqueries from the ORDER BY clause into their own projection ( #173 )
...
* Lift scalar subqueries out of order by and into a projection
* Add back in missed verifier for skip without order by in split query
* [GitHub Actions] Update green tests.
* Scalar expressions within a function or case expression, within the ORDER BY also need to be lifted
* [GitHub Actions] Update green tests.
---------
Co-authored-by: github-actions <github-actions@github.com>
2 years ago
Christopher Jolly
7caea4dcdb
Provide a valid count argument to LEFT,RIGHT,MID ( #172 )
...
* Coalesce the result of LEN on a string to 0 when within a LEFT/RIGHT/MID function as it cannot take NULL for the count of characters
2 years ago
Christopher Jolly
d9f2c8eb2c
Interception tests ( #171 )
...
* Allow unconfigured dataaccessproviderfactory and null connection string
* [GitHub Actions] Update green tests.
---------
2 years ago
Christopher Jolly
b389b88705
Further built in types fixes ( #170 )
2 years ago
Christopher Jolly
6ccebae028
Db model factory updates ( #166 )
2 years ago
Laurents Meyer
a95017e38b
Auto skip statements that are not supported by Jet. Track unsupported statements in log files. ( #169 )
2 years ago
Christopher Jolly
e70f682c0c
Fix BuiltInDataTypes tests ( #163 )
...
* Update the BuiltInDataTypes set of tests
* Update JetTypeMappingSource.cs
Add back `alphanumeric` as its line somehow got deleted
* Add Element Type Mapping check back in
2 years ago
Laurents Meyer
2e23e60dad
Remove duplicate string entry.
2 years ago
Christopher Jolly
fcb97a4e63
Improve support for primitive collections and Json Types ( #159 )
2 years ago
Laurents Meyer
d32eae0867
Update project in regards to new organization and CI. ( #160 )
2 years ago
Laurents Meyer
9babf78263
Revert "Type MApping: a long gets mapped to integer in Jet" ( #151 )
...
This reverts commit 05b10ea856 .
2 years ago
Christopher Jolly
0d5676a4e5
Merge pull request #158 from ChrisJollyAU/fixdecint64param
...
Fix using decimal and Int64 in parameters
2 years ago
Christopher Jolly
d359492662
Use reflection so we don't have to reference Odbc or OleDb in main package
2 years ago
Christopher Jolly
8c64a29730
Fix using decimal and Int64 in parameters
2 years ago
Laurents Meyer
43d0002123
Fix automatic test skipping.
2 years ago
Laurents Meyer
ca8472c96e
Fix ExecuteNonQuery() return value logic to be case sensitivity proof.
2 years ago
Christopher Jolly
b4c07a382c
Merge branch 'master' of https://github.com/bubibubi/EntityFrameworkCore.Jet
2 years ago
Christopher Jolly
67f98ee8ac
More test updates
2 years ago
Laurents Meyer
7bc7ee3708
Revert pull-in of GearsOfWar related classes and remove constraint ( #145 )
...
* Revert pull-in of GearsOfWar related classes.
* Clean-up GearsOfWar fixtures.
* Drop constraint to workaround Jet limitation regarding compound foreign keys and NULL.
* Fix SQL assertions.
* Revert "Add code to add a "MatchSimple" annotation to a foreign key", because it doesn't do anything at the moment.
This reverts commit 76408338e0 .
2 years ago
Christopher Jolly
0ddfe1ce3b
Update to .Net 8 RC2
2 years ago
Christopher Jolly
331da3810e
Forgot the case of the parameter having NullTypeMapping. In that case go with adding the conversion
2 years ago
Christopher Jolly
6f31403f13
Merge branch 'master' of https://github.com/bubibubi/EntityFrameworkCore.Jet
2 years ago
Christopher Jolly
a16569f65b
Add some further testbases
2 years ago
Christopher Jolly
ed50bb0dfa
Only add the date conversion if the type mapping is also a datetime
2 years ago
Laurents Meyer
f086526d02
Fix and update dependencies and project files. ( #144 )
2 years ago
Christopher Jolly
01775d1b2f
Implement Degrees to Radians and Radians to Degrees by first principal as there is no inbulilt function. Thankfully it is not a difficult calculation
2 years ago
Christopher Jolly
bb90784c11
If we can get a numeric out of the ComputedColumnSql string then we know it is a numeric constant. We can transfer that to DefaultValue in this case
2 years ago
Christopher Jolly
a6d9058c05
Some date and time updates
...
- Don't derive Timespan and DateTimeOffset type mapping from our JetDateTimeTypeMapping. We can derive from the normal base class for those types
- DateTimeOffset is now mapped to a string. This allows us to round-trip all the details, however any calculations or queries for any components do not work
2 years ago
Christopher Jolly
0d4f61e3fd
The dateAdd function can not take null for the amount to add. Coalesce to 0
2 years ago
Christopher Jolly
80973bb3c8
When generating the SELECT, to select the values of the newly inserted row we only are able to use the first key column with @@identity
2 years ago
Christopher Jolly
08718b8165
Convert a null constant in a projection to a variant. We only do this if the type is meant to be a numeric. This is because NULL on its own has some issues when unioning with int values. Some joins with this issue were fixed in an earlier commit
2 years ago
Christopher Jolly
4fc2cb55b7
Extract column expression from UnaryExpression as well
2 years ago
Christopher Jolly
ab3449349f
No need to wrap an expression in a CaseExpression (generating IIF...) if the expression we are meant to be checking is a non-null constant expression
2 years ago
Christopher Jolly
c1d263aedc
Initial support for DateOnly/TimeOnly
2 years ago
Christopher Jolly
ba913012ce
The default value for DateTime in Jet is 30/12/1899 . When we save if we get a 1/1/001 we translate to this value. When reading we need to do the reverse translation
2 years ago
Christopher Jolly
76408338e0
Add code to add a "MatchSimple" annotation to a foreign key
2 years ago
Christopher Jolly
5b591b73fd
UNIONing projection with a numeric column to another projection that specifically projects NULL the the same name as a numeric field, the JOINING that to another table can leave that numeric field as another data type (NULL is not a numeric data type). Hence when using that supposedly numeric field in the join predicat against another numeric field we get a data type mismatch.
...
We try to detect this and when visiting the column (but only if we are within a binary expression and not a projection) we quickly wrap it in a convert function to make it properly numeric
The top/outer projection of this field can still be in a non numeric format, but JetDataReader is able to handle that. Would be better to produce the correctly converted data output anyway
2 years ago
Christopher Jolly
cae7f8372b
Add Check_all_tests_overridden to more test classes and ensure that it passes
2 years ago
Christopher Jolly
3191ca6851
Fix some conversion errors when getting a numeric value. See detailed notes in the GetInt32 function
2 years ago
Christopher Jolly
a594e2f81f
DISTINCT AND TOP can't be in the same stateement with Jet. Push DISTINCT into a subquery
2 years ago
Christopher Jolly
2281916b88
Fix generating sets (union, intersect). The code was originally executing and returning before it could handle adding the SQL for the Alias in (including wrapping the section in brackets). This realigns with how the parent VisitSelect works
2 years ago
Christopher Jolly
a2dc62d12d
Fix the formatting for a string literal of a byte
2 years ago
Christopher Jolly
1090ee3b8f
Make sure the start index for Instr is set. Normally is optional but it seems some sections seem to prefer it to be defined
2 years ago
Christopher Jolly
34f124c0f8
Update to .Net 8
2 years ago
Christopher Jolly
db7a513b64
Remove the DeepSkip tag on FirstOrDefault. When generating the sql it was preventing the TOP expression from being generated
2 years ago
Christopher Jolly
fbf0f794a7
use .GetMAppStoreObjects to try get the correct table (this is especially needed for properties in split tables). Default to the original storeObject if can't find anything
2 years ago
Christopher Jolly
2dbd0fde32
Rewrite some INNER JOIN's. According to the docs Jet doesn't support an INNER JOIN being nested under a LEFT JOIN. We try to figure out which one's they are and rewrite it. As an INNER JOIN is a join where both sides have a value, we can rewrite it as a LEFT JOIN and then filter out the rows where the columns the join is on is not NULL
2 years ago
Christopher Jolly
c46f980c09
Start work on some support for sequence value generation. Still under investigation if possible
2 years ago
Christopher Jolly
944843bfad
Some datetime parameters don't work unless they have been properly converted
2 years ago
Christopher Jolly
3ef1503bb9
Translate the Atan2 function
2 years ago
Christopher Jolly
5e32650f6d
Dispose of any new JetCommands created when splitting commands properly. This were not being disposed of and still holding a link to the database thereby preventing some file access e.g. Deleting a file
2 years ago
Christopher Jolly
3f5c1b6005
Make sure a DateTime in a constant has a DateTime Type Mapping
2 years ago
Christopher Jolly
429c67ca3a
Some skip...take optimization and fix using multiple take after a skip
3 years ago
Christopher Jolly
8c9dff5d36
Initial support for Skip....Take. Take...Skip and Skip currently do not work properly
3 years ago
Christopher Jolly
fd57f4a3bd
Rename some extension methods so that it doesn't interfere with other providers (namely sql server)
3 years ago
Christopher Jolly
fd6c2aec01
Revert ca0feb49 . Same name extensions when using sql server and jet
3 years ago
Christopher Jolly
84e40f5085
Fix some string resources
3 years ago
Cédric Luthi
cbb3f94440
Remove unnecessary references in `EntityFrameworkCore.Jet.Data`
...
Now that `EntityFrameworkCore.Jet.Data` targets `net6.0` those references are not required anymore.
Note that the `Microsoft.Win32.Registry` package reference was the root cause of the failure to publish the `EntityFrameworkCore.Jet.Data` 7.0.0 package because of [warning NU5104][1] (treated as error):
> A stable release of a package should not have a prerelease dependency. Either modify the version spec of dependency "Microsoft.Win32.Registry [6.0.0-preview.5.21301.5, )" or update the version field in the nuspec.
[1]: https://bubibubi.visualstudio.com/EntityFrameworkCore.Jet/_build/results?buildId=280&view=logs&j=67ea8d94-b5a7-504b-2d4b-07baddfad3f1&t=1e07b7f6-b7a1-55f6-9cca-c04683790a41&l=37
3 years ago
Christopher Jolly
a9c2f36da5
Jet conversion functions like Cdbl/Csng/CLng don't accept or propogate null values. Normally we can just use an IIF to check if the expression is null or not. That does work fine but here we also check if the base expression is nullable. If the base expression will never return null we can simplify and just use the base expression rather than test for null
3 years ago
Christopher Jolly
6963a165e5
The result of the Round function is never null
3 years ago
Christopher Jolly
c8e109fb94
Jet can't candle a left join straight after a cross join. We have to push the cross join specifically down into its own subquery and then do a left join on that
3 years ago
Cédric Luthi
83c29e4c43
Introduce a new typed JetConnectionStringBuilder
...
This makes it easier to use than the extensions (EntityFrameworkCore.Jet.Data.DbConnectionStringBuilderExtensions) with Get/Set methods.
With the new `JetConnectionStringBuilder` class:
```csharp
var csb = new JetConnectionStringBuilder(DataAccessProviderType.OleDb)
{
Provider = "Microsoft.ACE.OLEDB.12.0",
DataSource = @"C:\myFolder\myAccessFile.accdb",
DatabasePassword = "hunter2",
};
var connectionString = csb.ConnectionString;
```
Without the new `JetConnectionStringBuilder` class:
```csharp
var csb = new OleDbConnectionStringBuilder();
csb.SetProvider("Microsoft.ACE.OLEDB.12.0");
csb.SetDataSource(@"C:\myFolder\myAccessFile.accdb");
csb.SetDatabasePassword("hunter2");
var connectionString = csb.ConnectionString;
```
3 years ago
Cédric Luthi
c795ce6228
Make EntityFrameworkCore.Jet available on `net6.0`
...
By using `[SupportedOSPlatform("windows")]` at assembly level instead of targeting `net6.0-windows`.
This will enable taking a dependency on the EntityFrameworkCore.Jet* NuGet packages on Linux and macOS. The consumer of EntityFrameworkCore.Jet can then decide how to handle [CA1416][1] either by adding `[SupportedOSPlatform("windows")]`, by targeting `net6.0-windows` or by testing `OperatingSystem.IsWindows()` at runtime.
[1]: https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1416
3 years ago
Christopher Jolly
12aca42198
Add option to use the normal short text type when mapping against an unbounded System.String instead of long text/memo. Jet has limitations when using memo (e.g. joins are not supported)
3 years ago
Christopher Jolly
950089a113
Set the precision to be maximum of 28 (Jet limit).
...
When using property.HasConversion<decimal>() the default for EF Core is with precision 38 and scale 17 which is passed Jet's limit
3 years ago
Christopher Jolly
acc3fd5223
Revert "Set the precision to be maximum of 28 (Jet limit)."
...
This reverts commit a1904bf113 .
3 years ago
Christopher Jolly
a1904bf113
Set the precision to be maximum of 28 (Jet limit).
...
When using property.HasConversion<decimal>() the default for EF Core is with precision 38 and scale 17 which is passed Jet's limit
3 years ago
Christopher Jolly
dc049d804d
Do the same clr type check when mapping "text" as what we do for other store type mappings. This allows conversions do work better (e.g. originally a mappingInfo with a System.Char type was passed in with store type of "text" and a variable length or unbounded string type was returned but with clr type of System.String. Going with the extra checked returns null and gets EF Core to find a converter and then do the mapping again on the converted type
3 years ago