Skip to content

Commit ff8668a

Browse files
committed
Support for MERGE statement (DNET-815)
1 parent 9994749 commit ff8668a

File tree

4 files changed

+21
-2
lines changed

4 files changed

+21
-2
lines changed

Provider/src/FirebirdSql.Data.FirebirdClient.Tests/FbScriptTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,17 @@ public void RecreatePackageBody()
267267
Assert.AreEqual(SqlStatementType.RecreatePackageBody, script.Results[0].StatementType);
268268
}
269269

270+
[Test]
271+
public void Merge()
272+
{
273+
const string text =
274+
@"merge into table t using foo f on f.id = t.id when ";
275+
FbScript script = new FbScript(text);
276+
script.Parse();
277+
Assert.AreEqual(1, script.Results.Count());
278+
Assert.AreEqual(SqlStatementType.Merge, script.Results[0].StatementType);
279+
}
280+
270281
#endregion
271282
}
272283
}

Provider/src/FirebirdSql.Data.FirebirdClient/Isql/FbBatchExecution.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ public void Execute(bool autoCommit = true)
178178
case SqlStatementType.Grant:
179179
case SqlStatementType.Insert:
180180
case SqlStatementType.InsertCursor:
181+
case SqlStatementType.Merge:
181182
case SqlStatementType.Open:
182183
case SqlStatementType.Prepare:
183184
case SqlStatementType.Revoke:

Provider/src/FirebirdSql.Data.FirebirdClient/Isql/FbScript.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,6 @@ static bool IsSetTermStatement(string statement, out string newTerm)
238238
{
239239
return SqlStatementType.CreateIndex;
240240
}
241-
// this needs to be before CREATE PACKAGE to properly match
242241
if (sqlStatement.StartsWith("CREATE PACKAGE BODY", StringComparison.OrdinalIgnoreCase))
243242
{
244243
return SqlStatementType.CreatePackageBody;
@@ -450,6 +449,14 @@ static bool IsSetTermStatement(string statement, out string newTerm)
450449
}
451450
break;
452451

452+
case 'M':
453+
case 'm':
454+
if (sqlStatement.StartsWith("MERGE", StringComparison.OrdinalIgnoreCase))
455+
{
456+
return SqlStatementType.Merge;
457+
}
458+
break;
459+
453460
case 'O':
454461
case 'o':
455462
if (sqlStatement.StartsWith("OPEN", StringComparison.OrdinalIgnoreCase))
@@ -476,7 +483,6 @@ static bool IsSetTermStatement(string statement, out string newTerm)
476483
{
477484
return SqlStatementType.RecreateFunction;
478485
}
479-
// this needs to be before RECREATE PACKAGE to properly match
480486
if (sqlStatement.StartsWith("RECREATE PACKAGE BODY", StringComparison.OrdinalIgnoreCase))
481487
{
482488
return SqlStatementType.RecreatePackageBody;

Provider/src/FirebirdSql.Data.FirebirdClient/Isql/SqlStatementType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public enum SqlStatementType
9090
Grant,
9191
Insert,
9292
InsertCursor,
93+
Merge,
9394
Open,
9495
Prepare,
9596
RecreateFunction,

0 commit comments

Comments
 (0)