Version History
1.0.91.0 - February XX, 2014 (release scheduled)
-
+
- Add support for Entity Framework 6. +
- Modify the namespace used for all internal classes in the System.Data.SQLite.Linq assembly. ** Potentially Incompatible Change **
- Add SQLiteCompileOptions and InteropCompileOptions properties to the SQLiteConnection class to return the compile-time options for the SQLite core library and interop assembly, respectively.
- Add BindInvariantText and ConvertInvariantText connection flags to force the invariant culture to be used when converting parameter values to/from strings.
- Modify handling of the design-time components installer to run Visual Studio devenv.exe /setup after installing the package. This appears to be necessary in some circumstances for Visual Studio 2013. Pursuant to [a47eff2c71].
- Modify the native library pre-loader to support reading settings from an XML configuration file and to be capable of checking more than one directory. Persuant to [f0246d1817].
- Change the default behavior for the native library pre-loader so it first searches the executing (i.e. System.Data.SQLite) assembly directory and then the application domain directory. Pursuant to [f0246d1817]. ** Potentially Incompatible Change ** Index: Externals/Eagle/lib/Eagle1.0/vendor.eagle ================================================================== --- Externals/Eagle/lib/Eagle1.0/vendor.eagle +++ Externals/Eagle/lib/Eagle1.0/vendor.eagle @@ -183,12 +183,12 @@ # checkForTestOverrides stdout [expr {[info exists test_overrides] ? \ $test_overrides : [list binary_directory build_base_directory \ build_directory common_directory connection_flags database_directory \ datetime_format release_version scratch_directory temporary_directory \ - test_configuration test_configurations test_constraints \ - test_machine test_overrides test_platform test_suite test_year \ + test_configuration test_configurations test_constraints test_machine \ + test_net_fx test_overrides test_platform test_suite test_year \ test_years test_year_clr_v2 test_year_clr_v4 vendor_directory]}] false # # NOTE: Set the name of the running test suite, if necessary. # ADDED Externals/EntityFramework/lib/net40/EntityFramework.SqlServer.dll Index: Externals/EntityFramework/lib/net40/EntityFramework.SqlServer.dll ================================================================== --- /dev/null +++ Externals/EntityFramework/lib/net40/EntityFramework.SqlServer.dll cannot compute difference between binary files ADDED Externals/EntityFramework/lib/net40/EntityFramework.SqlServer.xml Index: Externals/EntityFramework/lib/net40/EntityFramework.SqlServer.xml ================================================================== --- /dev/null +++ Externals/EntityFramework/lib/net40/EntityFramework.SqlServer.xml @@ -0,0 +1,4666 @@ + +
- A select statement. +
- A reference to an extent. (symbol) +
- A raw string. +
-
+ ColumnList for the list of columns in the select clause if this
+ symbol represents a sql select statement. This is set by
+
+ . +
+ - ExtentList is the list of extents in the select clause. +
-
+ FlattenedExtentList - if the Join has multiple extents flattened at the
+ top level, we need this information to ensure that extent aliases are renamed
+ correctly in
+
+
+ -
+ NameToExtent has all the extents in ExtentList as a dictionary.
+ This is used by
+
+ to flatten + record accesses. +
+ - + IsNestedJoin - is used to determine whether a JoinSymbol is an + ordinary join symbol, or one that has a corresponding SqlSelectStatement. + +
-
+
+
+ -
+
+
+ -
+
+
+ -
+ The tree contains
+
+
+ -
+ The tree contains
+
+ with property Limit of type + +
+ -
+ The tree contains
+
+ with property Count of type + +
+ -
+
+
+ -
+
+
+ -
+
+
+ - + Select statement minimization. Multiple nodes in the query tree + that can be part of a single SQL select statement are merged. e.g. a + Filter node that is the input of a Project node can typically share the + same SQL statement. + +
-
+ Alpha-renaming. As a result of the statement minimization above, there
+ could be name collisions when using correlated subqueries
+
+ +Filter( + b = Project( c.x + c = Extent(foo) + ) + exists ( + Filter( + c = Extent(foo) + b.x = c.x + ) + ) + )
+ The first Filter, Project and Extent will share the same SQL select statement. + The alias for the Project i.e. b, will be replaced with c. + If the alias c for the Filter within the exists clause is not renamed, + we will getc.x = c.x , which is incorrect. + Instead, the alias c within the second filter should be renamed to c1, to give +c.x = c1.x i.e. b is renamed to c, and c is renamed to c1. +
+ -
+ Join flattening. In the query tree, a list of join nodes is typically
+ represented as a tree of Join nodes, each with 2 children. e.g.
+
+ +a = Join(InnerJoin + b = Join(CrossJoin + c = Extent(foo) + d = Extent(foo) + ) + e = Extent(foo) + on b.c.x = e.x + )
+ If translated directly, this will be translated to +FROM ( SELECT c.*, d.* + FROM foo as c + CROSS JOIN foo as d) as b + INNER JOIN foo as e on b.x' = e.x
+ It would be better to translate this as +FROM foo as c + CROSS JOIN foo as d + INNER JOIN foo as e on c.x = e.x
+ This allows the optimizer to choose an appropriate join ordering for evaluation. +
+ -
+ Select * and column renaming. In the example above, we noticed that
+ in some cases we add
+
SELECT * FROM ... + to complete the SQL + statement. i.e. there is no explicit PROJECT list. + In this case, we enumerate all the columns available in the FROM clause + This is particularly problematic in the case of Join trees, since the columns + from the extents joined might have the same name - this is illegal. To solve + this problem, we will have to rename columns if they are part of a SELECT * + for a JOIN node - we do not need renaming in any other situation. ++ . +
+ -
+ Traverse the tree, producing a sql builder
+
+
+ - + Write the SqlBuilder into a string, renaming the aliases and columns + as needed. + +
- The WHERE clause has to be visited before the from clause. +
- + extent aliases and column aliases need to be renamed. To minimize + renaming collisions, all the names used must be known, before any renaming + choice is made. + +
-
+ A stack for the current SQL select statement. This is needed by
+
+ to create a + list of free variables used by a select statement. This is needed for + alias renaming. +
+ - + A stack for the join context. When visiting an extent, + we need to know whether we are inside a join or not. If we are inside + a join, we do not create a new SELECT statement. + +
- The set of all extent aliases used. +
- The set of all parameter names. +
- The set of all column names that may need to be renamed. +
- Project +
- Filter +
- GroupBy +
- Sort/OrderBy +
- Visit the input expression +
- + Determine if the input's SQL statement can be reused, or a new + one must be created. + +
- Create a new symbol table scope +
- + Push the Sql statement onto a stack, so that children can + update the free variable list. + +
- Visit the non-input expression. +
- Cleanup +
- Canonical Functions - We recognize these by their dataspace, it is DataSpace.CSpace +
- Store Functions - We recognize these by the BuiltInAttribute and not being Canonical +
- User-defined Functions - All the rest +
- + If an expression being aggregated contains an outer reference, then that outer + reference must be the only column referenced in the expression (SQLBUDT #488741) + +
- + Sql Server cannot perform an aggregate function on an expression containing + an aggregate or a subquery. (SQLBUDT #504600) + +
- + Sql Server requries each GROUP BY expression (key) to contain at least one column + that is not an outer reference. (SQLBUDT #616523) + +
- + Aggregates on the right side of an APPLY cannot reference columns from the left side. + (SQLBUDT #617683) + +
-
+
+ NOT(Not(x)) becomes x +
+ -
+
+ NOT EXISTS becomes EXISTS +
+ -
+
+ IS NULL becomes IS NOT NULL +
+ -
+
+ = becomes <> +
+ - + If the input is not a SqlSelectStatement, it assumes that the input + is a collection expression, and creates a new SqlSelectStatement + +
- The same as the parent's - this is treated specially. +
- A sql select statement, which may need to be completed +
- An extent - just copy it to the from clause +
- + Anything else (from a collection-valued expression) - + unnest and copy it. + +
- Add the SQL string for each column to the SELECT clause +
- + Add the column to the list of columns - so that it can + become part of the "type" of a JoinSymbol + +
- + Check if the column name collides with a previous column added + to the same select statement. Flag both the columns for renaming if true. + +
- Add the column to a name lookup dictionary for collision detection. +
- + The fromSymbol is new i.e. the select statement has just been + created, or a join extent has been added. + +
- The fromSymbol is old i.e. we are reusing a select statement. +
- The set operation expressions - union all, intersect, except +
- TVFs, which are conceptually similar to tables +
- + If an expression being aggregated contains an outer reference, then that outer + reference must be the only column referenced in the expression (SQLBUDT #488741) + +
- + Sql Server cannot perform an aggregate function on an expression containing + an aggregate or a subquery. (SQLBUDT #504600) + +
- SELECT +
- FROM +
- WHERE +
- GROUP BY +
- ORDER BY +
- + Check whether the aliases extents we use in this statement have + to be renamed. + We first create a list of all the aliases used by the outer extents. + For each of the FromExtents( or AllJoinExtents if it is non-null), + rename it if it collides with the previous list. + +
- Write each of the clauses (if it exists) as a string +
-
+
+ represents tables (extents/nested selects/unnests) +
+ -
+
+ represents Join nodes +
+ -
+
+ columns. +
+ - Equality expression +
- Constant expression +
- IsNull expression +
- Property expression +
- Reference expression to the target +
- And expression +
- Or expression +
- Not expression +
-
+ Translation from eSQL text commands to valid
+
+ s +
+ -
+ Translation from eSQL text commands to valid
+
+ s +
+ -
+
+
+ -
+
+
+ -
+
+
+ - Projection +
- Selection (filter) +
- Union all +
- Inner equijoin +
- Left outer equijoin +
- Only conjunctions of equality predicates are supported +
- + Each equality predicate is of the form (left property == right property). The order + is important. + +
- Keys in non-insert operations (keys are only set for inserts). +
- Values flagged 'preserve' (these are values the propagator claims are untouched). +
- Server generated values. +
- They are keys for the table +
- They are concurrency values +
- Extract changes from the entity state manager +
- Group changes by C-Space extent +
- For each affected S-Space table, perform propagation (get changes in S-Space terms) +
- Merge S-Space inserts and deletes into updates where appropriate +
- Produce S-Space commands implementing the modifications (insert, delete and update SQL statements) +
- A select statement. +
- A reference to an extent. (symbol) +
- A raw string. +
-
+ ColumnList for the list of columns in the select clause if this
+ symbol represents a sql select statement. This is set by
+
+ . +
+ - ExtentList is the list of extents in the select clause. +
-
+ FlattenedExtentList - if the Join has multiple extents flattened at the
+ top level, we need this information to ensure that extent aliases are renamed
+ correctly in
+
+
+ -
+ NameToExtent has all the extents in ExtentList as a dictionary.
+ This is used by
+
+ to flatten + record accesses. +
+ - + IsNestedJoin - is used to determine whether a JoinSymbol is an + ordinary join symbol, or one that has a corresponding SqlSelectStatement. + +
-
+
+
+ -
+
+
+ -
+
+
+ -
+ The tree contains
+
+
+ -
+ The tree contains
+
+ with property Limit of type + +
+ -
+ The tree contains
+
+ with property Count of type + +
+ -
+
+
+ -
+
+
+ -
+
+
+ - + Select statement minimization. Multiple nodes in the query tree + that can be part of a single SQL select statement are merged. e.g. a + Filter node that is the input of a Project node can typically share the + same SQL statement. + +
-
+ Alpha-renaming. As a result of the statement minimization above, there
+ could be name collisions when using correlated subqueries
+
+ +Filter( + b = Project( c.x + c = Extent(foo) + ) + exists ( + Filter( + c = Extent(foo) + b.x = c.x + ) + ) + )
+ The first Filter, Project and Extent will share the same SQL select statement. + The alias for the Project i.e. b, will be replaced with c. + If the alias c for the Filter within the exists clause is not renamed, + we will getc.x = c.x , which is incorrect. + Instead, the alias c within the second filter should be renamed to c1, to give +c.x = c1.x i.e. b is renamed to c, and c is renamed to c1. +
+ -
+ Join flattening. In the query tree, a list of join nodes is typically
+ represented as a tree of Join nodes, each with 2 children. e.g.
+
+ +a = Join(InnerJoin + b = Join(CrossJoin + c = Extent(foo) + d = Extent(foo) + ) + e = Extent(foo) + on b.c.x = e.x + )
+ If translated directly, this will be translated to +FROM ( SELECT c.*, d.* + FROM foo as c + CROSS JOIN foo as d) as b + INNER JOIN foo as e on b.x' = e.x
+ It would be better to translate this as +FROM foo as c + CROSS JOIN foo as d + INNER JOIN foo as e on c.x = e.x
+ This allows the optimizer to choose an appropriate join ordering for evaluation. +
+ -
+ Select * and column renaming. In the example above, we noticed that
+ in some cases we add
+
SELECT * FROM ... + to complete the SQL + statement. i.e. there is no explicit PROJECT list. + In this case, we enumerate all the columns available in the FROM clause + This is particularly problematic in the case of Join trees, since the columns + from the extents joined might have the same name - this is illegal. To solve + this problem, we will have to rename columns if they are part of a SELECT * + for a JOIN node - we do not need renaming in any other situation. ++ . +
+ -
+ Traverse the tree, producing a sql builder
+
+
+ - + Write the SqlBuilder into a string, renaming the aliases and columns + as needed. + +
- The WHERE clause has to be visited before the from clause. +
- + extent aliases and column aliases need to be renamed. To minimize + renaming collisions, all the names used must be known, before any renaming + choice is made. + +
-
+ A stack for the current SQL select statement. This is needed by
+
+ to create a + list of free variables used by a select statement. This is needed for + alias renaming. +
+ - + A stack for the join context. When visiting an extent, + we need to know whether we are inside a join or not. If we are inside + a join, we do not create a new SELECT statement. + +
- The set of all extent aliases used. +
- The set of all parameter names. +
- The set of all column names that may need to be renamed. +
- Project +
- Filter +
- GroupBy +
- Sort/OrderBy +
- Visit the input expression +
- + Determine if the input's SQL statement can be reused, or a new + one must be created. + +
- Create a new symbol table scope +
- + Push the Sql statement onto a stack, so that children can + update the free variable list. + +
- Visit the non-input expression. +
- Cleanup +
- Canonical Functions - We recognize these by their dataspace, it is DataSpace.CSpace +
- Store Functions - We recognize these by the BuiltInAttribute and not being Canonical +
- User-defined Functions - All the rest +
- + If an expression being aggregated contains an outer reference, then that outer + reference must be the only column referenced in the expression (SQLBUDT #488741) + +
- + Sql Server cannot perform an aggregate function on an expression containing + an aggregate or a subquery. (SQLBUDT #504600) + +
- + Sql Server requries each GROUP BY expression (key) to contain at least one column + that is not an outer reference. (SQLBUDT #616523) + +
- + Aggregates on the right side of an APPLY cannot reference columns from the left side. + (SQLBUDT #617683) + +
-
+
+ NOT(Not(x)) becomes x +
+ -
+
+ NOT EXISTS becomes EXISTS +
+ -
+
+ IS NULL becomes IS NOT NULL +
+ -
+
+ = becomes <> +
+ - + If the input is not a SqlSelectStatement, it assumes that the input + is a collection expression, and creates a new SqlSelectStatement + +
- The same as the parent's - this is treated specially. +
- A sql select statement, which may need to be completed +
- An extent - just copy it to the from clause +
- + Anything else (from a collection-valued expression) - + unnest and copy it. + +
- Add the SQL string for each column to the SELECT clause +
- + Add the column to the list of columns - so that it can + become part of the "type" of a JoinSymbol + +
- + Check if the column name collides with a previous column added + to the same select statement. Flag both the columns for renaming if true. + +
- Add the column to a name lookup dictionary for collision detection. +
- + The fromSymbol is new i.e. the select statement has just been + created, or a join extent has been added. + +
- The fromSymbol is old i.e. we are reusing a select statement. +
- The set operation expressions - union all, intersect, except +
- TVFs, which are conceptually similar to tables +
- + If an expression being aggregated contains an outer reference, then that outer + reference must be the only column referenced in the expression (SQLBUDT #488741) + +
- + Sql Server cannot perform an aggregate function on an expression containing + an aggregate or a subquery. (SQLBUDT #504600) + +
- SELECT +
- FROM +
- WHERE +
- GROUP BY +
- ORDER BY +
- + Check whether the aliases extents we use in this statement have + to be renamed. + We first create a list of all the aliases used by the outer extents. + For each of the FromExtents( or AllJoinExtents if it is non-null), + rename it if it collides with the previous list. + +
- Write each of the clauses (if it exists) as a string +
-
+
+ represents tables (extents/nested selects/unnests) +
+ -
+
+ represents Join nodes +
+ -
+
+ columns. +
+ - Equality expression +
- Constant expression +
- IsNull expression +
- Property expression +
- Reference expression to the target +
- And expression +
- Or expression +
- Not expression +
-
+ Translation from eSQL text commands to valid
+
+ s +
+ -
+ Translation from eSQL text commands to valid
+
+ s +
+ -
+
+
+ -
+
+
+ -
+
+
+ - Projection +
- Selection (filter) +
- Union all +
- Inner equijoin +
- Left outer equijoin +
- Only conjunctions of equality predicates are supported +
- + Each equality predicate is of the form (left property == right property). The order + is important. + +
- Keys in non-insert operations (keys are only set for inserts). +
- Values flagged 'preserve' (these are values the propagator claims are untouched). +
- Server generated values. +
- They are keys for the table +
- They are concurrency values +
- Extract changes from the entity state manager +
- Group changes by C-Space extent +
- For each affected S-Space table, perform propagation (get changes in S-Space terms) +
- Merge S-Space inserts and deletes into updates where appropriate +
- Produce S-Space commands implementing the modifications (insert, delete and update SQL statements) +
- Add support for Entity Framework 6. +
- Modify the namespace used for all internal classes in the System.Data.SQLite.Linq assembly. ** Potentially Incompatible Change **
- Add SQLiteCompileOptions and InteropCompileOptions properties to the SQLiteConnection class to return the compile-time options for the SQLite core library and interop assembly, respectively.
- Add BindInvariantText and ConvertInvariantText connection flags to force the invariant culture to be used when converting parameter values to/from strings.
- Modify handling of the design-time components installer to run Visual Studio devenv.exe /setup after installing the package. This appears to be necessary in some circumstances for Visual Studio 2013. Pursuant to [a47eff2c71].
- Modify the native library pre-loader to support reading settings from an XML configuration file and to be capable of checking more than one directory. Persuant to [f0246d1817].
- Change the default behavior for the native library pre-loader so it first searches the executing (i.e. System.Data.SQLite) assembly directory and then the application domain directory. Pursuant to [f0246d1817]. ** Potentially Incompatible Change ** DELETED testlinq/2008/App.config Index: testlinq/2008/App.config ================================================================== --- testlinq/2008/App.config +++ /dev/null @@ -1,12 +0,0 @@ - -
Sample SQL:
+
+ select IdentityValue
+ from dbo.MyTable
+ where @@ROWCOUNT > 0 and IdentityValue = scope_identity()
+
+ or
+
+ select TimestampValue
+ from dbo.MyTable
+ where @@ROWCOUNT > 0 and Id = 1
+
+ Note that we filter on rowcount to ensure no rows are returned if no rows were modified.
+
+ On SQL Server 2005 and up, we have an additional syntax used for non integer return types:
+
+ declare @generatedValues table(ID uniqueidentifier)
+ insert dbo.MyTable
+ output ID into @generated_values
+ values (...);
+ select ID
+ from @generatedValues as g join dbo.MyTable as t on g.ID = t.ID
+ where @@ROWCOUNT > 0;
+ -
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
Project(b.x
+ b = Filter(
+ c = Extent(foo)
+ c.x = 5)
+ )
+ The Extent node creates a new SqlSelectStatement. This is added to the
+ symbol table by the Filter as {c, Symbol(c)}. Thus, -
+
-
+
-
+
[NOT] EXISTS( ... )
+ IS [NOT] NULL
+ -
+
-
+
-
+
-
+
-
+
-- if the input was an extent
+ FROM = [SchemaName].[TableName]
+ -- if the input was a Project
+ FROM = (SELECT ... FROM ... WHERE ...)
+ These become
+ -- if the input was an extent
+ FROM = [SchemaName].[TableName] AS alias
+ -- if the input was a Project
+ FROM = (SELECT ... FROM ... WHERE ...) AS alias
+ and look like valid FROM clauses.
+ Finally, we have to add the alias to the global list of aliases used,
+ and also to the current symbol table.
+ -- originally {expression}
+ -- change that to
+ SELECT *
+ FROM {expression} as c
+ DbLimitExpression needs to start the statement but not add the default columns
+ -
+
-
+
-
+
-
+
-
+
-
+
update Foo
+ set ComplexTypeColumn.Bar()
+ where Id = 2
+ -
+
-
+
min(random(1, 1.1) * (2 ^ retryCount - 1), maxDelay)
+ The -
+
-
+
a = b AND c = d AND e = f
+ then the output is as follows:
+ leftProperties = {a, c, e}
+ rightProperties = {b, d, f}
+ See Walker class for an explanation of this coding pattern.
+ -
+
-
+
-
+
BindingContext context = ...;
+
+ // translate a "Where" lamba expression input.Where(i => i.X > 2);
+ LambdaExpression whereLambda = ...;
+ CqtExpression inputCqt = Translate(whereLambda.Arguments[1]);
+ CqtExpression inputBinding = CreateExpressionBinding(inputCqt).Var;
+
+ // push the scope defined by the parameter
+ context.PushBindingScope(new KeyValuePair{ParameterExpression, CqtExpression}(whereLambda.Parameters[0], inputBinding));
+
+ // translate the expression in this context
+ CqtExpression result = Translate(whereLambda.Expression);
+
+ // pop the scope
+ context.PopBindingScope();
+ true
which means that EF will continue with the assumption
+ that the provider has the necessary types/resources rather than failing fast.
+ Sample SQL:
+
+ select IdentityValue
+ from dbo.MyTable
+ where @@ROWCOUNT > 0 and IdentityValue = scope_identity()
+
+ or
+
+ select TimestampValue
+ from dbo.MyTable
+ where @@ROWCOUNT > 0 and Id = 1
+
+ Note that we filter on rowcount to ensure no rows are returned if no rows were modified.
+
+ On SQL Server 2005 and up, we have an additional syntax used for non integer return types:
+
+ declare @generatedValues table(ID uniqueidentifier)
+ insert dbo.MyTable
+ output ID into @generated_values
+ values (...);
+ select ID
+ from @generatedValues as g join dbo.MyTable as t on g.ID = t.ID
+ where @@ROWCOUNT > 0;
+ -
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
Project(b.x
+ b = Filter(
+ c = Extent(foo)
+ c.x = 5)
+ )
+ The Extent node creates a new SqlSelectStatement. This is added to the
+ symbol table by the Filter as {c, Symbol(c)}. Thus, -
+
-
+
-
+
[NOT] EXISTS( ... )
+ IS [NOT] NULL
+ -
+
-
+
-
+
-
+
-
+
-- if the input was an extent
+ FROM = [SchemaName].[TableName]
+ -- if the input was a Project
+ FROM = (SELECT ... FROM ... WHERE ...)
+ These become
+ -- if the input was an extent
+ FROM = [SchemaName].[TableName] AS alias
+ -- if the input was a Project
+ FROM = (SELECT ... FROM ... WHERE ...) AS alias
+ and look like valid FROM clauses.
+ Finally, we have to add the alias to the global list of aliases used,
+ and also to the current symbol table.
+ -- originally {expression}
+ -- change that to
+ SELECT *
+ FROM {expression} as c
+ DbLimitExpression needs to start the statement but not add the default columns
+ -
+
-
+
-
+
-
+
-
+
-
+
update Foo
+ set ComplexTypeColumn.Bar()
+ where Id = 2
+ -
+
-
+
min(random(1, 1.1) * (2 ^ retryCount - 1), maxDelay)
+ The -
+
-
+
a = b AND c = d AND e = f
+ then the output is as follows:
+ leftProperties = {a, c, e}
+ rightProperties = {b, d, f}
+ See Walker class for an explanation of this coding pattern.
+ -
+
-
+
-
+
BindingContext context = ...;
+
+ // translate a "Where" lamba expression input.Where(i => i.X > 2);
+ LambdaExpression whereLambda = ...;
+ CqtExpression inputCqt = Translate(whereLambda.Arguments[1]);
+ CqtExpression inputBinding = CreateExpressionBinding(inputCqt).Var;
+
+ // push the scope defined by the parameter
+ context.PushBindingScope(new KeyValuePair{ParameterExpression, CqtExpression}(whereLambda.Parameters[0], inputBinding));
+
+ // translate the expression in this context
+ CqtExpression result = Translate(whereLambda.Expression);
+
+ // pop the scope
+ context.PopBindingScope();
+ true
which means that EF will continue with the assumption
+ that the provider has the necessary types/resources rather than failing fast.
+ 1.0.91.0 - February XX, 2014 (release scheduled)
-
+