@@ -470,54 +470,51 @@ protected override ShapedQueryExpression TransformJsonQueryToTable(JsonQueryExpr
470470 Expression index ,
471471 bool returnDefault )
472472 {
473- if ( ! returnDefault
474- && source . QueryExpression is SelectExpression
473+ if ( ! returnDefault )
474+ {
475+ switch ( source . QueryExpression )
475476 {
476- Tables : [ ValuesExpression { ValuesParameter : { } valuesParameter } ] ,
477- Predicate : null ,
478- GroupBy : [ ] ,
479- Having : null ,
480- IsDistinct : false ,
477+ // index on parameter using a column
478+ // translate via JSON because SQLite can't use columns in OFFSET
479+ case SelectExpression
480+ {
481+ Tables : [ ValuesExpression { ValuesParameter : { } valuesParameter } ] ,
482+ Predicate : null ,
483+ GroupBy : [ ] ,
484+ Having : null ,
485+ IsDistinct : false ,
481486#pragma warning disable EF1001
482- Orderings : [ { Expression : ColumnExpression { Name : ValuesOrderingColumnName } , IsAscending : true } ] ,
487+ Orderings : [ { Expression : ColumnExpression { Name : ValuesOrderingColumnName } , IsAscending : true } ] ,
483488#pragma warning restore EF1001
484- Limit : null ,
485- Offset : null
486- } selectExpression1
487- && TranslateExpression ( index ) is { } translatedIndex1 )
488- {
489- // index on parameter using a column
490- // translate via JSON because SQLite can't use columns in OFFSET
491- if ( TryTranslate ( selectExpression1 , valuesParameter , translatedIndex1 , out var result ) )
492- {
493- return result ;
494- }
495- }
496- else if ( ! returnDefault
497- && source . QueryExpression is SelectExpression
498- {
499- Tables :
489+ Limit : null ,
490+ Offset : null
491+ } selectExpression
492+ when TranslateExpression ( index ) is { } translatedIndex
493+ && TryTranslate ( selectExpression , valuesParameter , translatedIndex , out var result ) :
494+ return result ;
495+
496+ // Index on JSON array
497+ case SelectExpression
498+ {
499+ Tables :
500500 [
501501 TableValuedFunctionExpression
502502 {
503503 Name : "json_each" , Schema : null , IsBuiltIn : true , Arguments : [ var jsonArrayColumn ]
504504 } jsonEachExpression
505505 ] ,
506- Predicate : null ,
507- GroupBy : [ ] ,
508- Having : null ,
509- IsDistinct : false ,
510- Orderings : [ { Expression : ColumnExpression { Name : JsonEachKeyColumnName } orderingColumn , IsAscending : true } ] ,
511- Limit : null ,
512- Offset : null
513- } selectExpression2
514- && orderingColumn . TableAlias == jsonEachExpression . Alias
515- && TranslateExpression ( index ) is { } translatedIndex2 )
516- {
517- // Index on JSON array
518- if ( TryTranslate ( selectExpression2 , jsonArrayColumn , translatedIndex2 , out var result ) )
519- {
520- return result ;
506+ Predicate : null ,
507+ GroupBy : [ ] ,
508+ Having : null ,
509+ IsDistinct : false ,
510+ Orderings : [ { Expression : ColumnExpression { Name : JsonEachKeyColumnName } orderingColumn , IsAscending : true } ] ,
511+ Limit : null ,
512+ Offset : null
513+ } selectExpression
514+ when orderingColumn . TableAlias == jsonEachExpression . Alias
515+ && TranslateExpression ( index ) is { } translatedIndex
516+ && TryTranslate ( selectExpression , jsonArrayColumn , translatedIndex , out var result ) :
517+ return result ;
521518 }
522519 }
523520
0 commit comments