Skip to content

Commit 886992f

Browse files
committed
Cross appy support
1 parent bef0b53 commit 886992f

2 files changed

Lines changed: 44 additions & 6 deletions

File tree

Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v4_0/ServerInfoProvider.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Text;
1+
// Copyright (C) 2021 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
4+
5+
using Xtensive.Sql.Info;
46

57
namespace Xtensive.Sql.Drivers.Firebird.v4_0
68
{
79
internal class ServerInfoProvider : v2_5.ServerInfoProvider
810
{
11+
public override QueryInfo GetQueryInfo()
12+
{
13+
var info = base.GetQueryInfo();
14+
info.Features |= QueryFeatures.CrossApply;
15+
return info;
16+
}
17+
918
public ServerInfoProvider(SqlDriver driver)
1019
: base(driver)
1120
{

Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v4_0/Translator.cs

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,40 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Text;
1+
// Copyright (C) 2021 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
4+
5+
using Xtensive.Sql.Compiler;
6+
using Xtensive.Sql.Dml;
47

58
namespace Xtensive.Sql.Drivers.Firebird.v4_0
69
{
710
internal class Translator : v2_5.Translator
811
{
12+
public override string Translate(SqlCompilerContext context, SqlJoinExpression node, JoinSection section)
13+
{
14+
switch (section) {
15+
case JoinSection.Specification: {
16+
if (node.Expression == null) {
17+
switch (node.JoinType) {
18+
case SqlJoinType.CrossApply:
19+
return "CROSS JOIN LATERAL";
20+
case SqlJoinType.LeftOuterApply:
21+
return "LEFT JOIN LATERAL";
22+
default:
23+
return base.Translate(context, node, section);
24+
}
25+
}
26+
return Translate(node.JoinType) + " JOIN";
27+
}
28+
case JoinSection.Exit: {
29+
if (node.JoinType == SqlJoinType.LeftOuterApply) {
30+
return "ON TRUE";
31+
}
32+
return string.Empty;
33+
}
34+
}
35+
return base.Translate(context, node, section);
36+
}
37+
938
// Constructors
1039

1140
/// <inheritdoc/>

0 commit comments

Comments
 (0)