Skip to content

Commit

Permalink
Fix if statements and add test data
Browse files Browse the repository at this point in the history
  • Loading branch information
irwin-chequer committed Apr 20, 2024
1 parent e900ff3 commit d4297f9
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 5 deletions.
3 changes: 2 additions & 1 deletion Qsi.PostgreSql/Analyzers/PgActionAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using Qsi.Engines;
using Qsi.PostgreSql.Tree.Nodes;
using Qsi.Tree;
using Qsi.Utilities;

namespace Qsi.PostgreSql.Analyzers;

Expand All @@ -20,7 +21,7 @@ public PgActionAnalyzer(QsiEngine engine) : base(engine)

protected override async ValueTask<ColumnTarget[]> ResolveColumnTargetsFromDataInsertActionAsync(IAnalyzerContext context, QsiTableStructure table, IQsiDataInsertActionNode action)
{
if (action.Columns.Length == 0 && action.ValueTable is PgDerivedTableNode pgDerivedTableNode)
if (ListUtility.IsNullOrEmpty(action.Columns) && action.ValueTable is PgDerivedTableNode pgDerivedTableNode)
{
var tableAnalyzer = context.Engine.GetAnalyzer<QsiTableAnalyzer>();
using var tableContext = new TableCompileContext(context);
Expand Down
4 changes: 3 additions & 1 deletion Qsi.Tests/Vendor/MySql/Driver/MySqlRepositoryProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ from information_schema.TABLES
}

sql = @$"
select COLUMN_NAME
select COLUMN_NAME, IS_NULLABLE, COLUMN_DEFAULT
from information_schema.COLUMNS
where TABLE_SCHEMA = '{names[0]}' and TABLE_NAME = '{names[1]}'
order by ORDINAL_POSITION";
Expand All @@ -70,6 +70,8 @@ from information_schema.COLUMNS
{
var column = table.NewColumn();
column.Name = new QsiIdentifier(reader.GetString(0), false);
column.IsNullable = reader.GetString(1) == "YES";
column.Default = reader.IsDBNull(2) ? null : reader.GetString(2);
}
}

Expand Down
34 changes: 34 additions & 0 deletions Qsi.Tests/Vendor/MySql/MySqlTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,40 @@ public async Task Test_UPDATE(string sql, string[] expectedSqls, int expectedRes
Assert.AreEqual(result.Length, expectedResultCount);
}

/// <summary>
/// Insert Action 시 Not Null 제약조건 있는 테이블에 값 대입하는 상황에 관한 에러 처리를 확인하는 테스트를 수행합니다.
/// </summary>
[Test]
public async Task Test_InsertNotNull()
{
const string CreateTableQuery = @"create table if not exists test_not_null (
col1 VARCHAR(255) NOT NULL,
col2 VARCHAR(255)
)";

var command = Connection.CreateCommand();
command.CommandText = CreateTableQuery;
await command.ExecuteNonQueryAsync();

string[] queries =
{
"INSERT INTO test_not_null VALUES (null, 'test')",
"INSERT INTO test_not_null (col2) VALUES ('test')",
"INSERT INTO test_not_null SELECT null, 'test'",
"INSERT INTO test_not_null (col2) SELECT 'test'"
};

const string errorMessage = "QSI-0021: The column 'col1' has a Not Null constraint.";

foreach (var query in queries)
{
Assert.ThrowsAsync<QsiException>(async () =>
{
await Engine.Execute(new QsiScript(query, QsiScriptType.Insert), null);
}, errorMessage);
}
}

[TestCase("SELECT * FROM x.y", ExpectedResult = "QSI-0006: Unable to resolve table 'x.y'")]
[TestCase("SELECT a.* FROM actor", ExpectedResult = "QSI-0008: Unknown table 'a'")]
[TestCase("INSERT INTO actor VALUES (1, 2, 3, 4), (5, 6, 7)", ExpectedResult = "QSI-001B: Column count doesn't match value count at row 2")]
Expand Down
4 changes: 3 additions & 1 deletion Qsi.Tests/Vendor/PostgreSql/PostgreSqlTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,9 @@ col2 VARCHAR
string[] queries =
{
"INSERT INTO test_not_null VALUES (null, 'test')",
"INSERT INTO test_not_null (col2) VALUES ('test')"
"INSERT INTO test_not_null (col2) VALUES ('test')",
"INSERT INTO test_not_null SELECT null, 'test'",
"INSERT INTO test_not_null (col2) SELECT 'test'"
};

const string errorMessage = "QSI-0021: The column 'col1' has a Not Null constraint.";
Expand Down
4 changes: 2 additions & 2 deletions Qsi/Analyzers/Action/QsiActionAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -516,11 +516,11 @@ protected virtual ValueTask<ColumnTarget[]> ResolveColumnTargetsFromDataInsertAc

switch (action)
{
case { Columns.Length: > 0 }:
case { Columns: not null, Columns.Length: > 0 }:
columnTargets = ResolveColumnTargetsFromIdentifiers(context, table, action.Columns);
break;

case { SetValues.Length: > 0 }:
case { SetValues: not null, SetValues.Length: > 0 }:
columnTargets = ResolveSetColumnTargets(context, table, action.SetValues).ToArray<ColumnTarget>();
break;

Expand Down

0 comments on commit d4297f9

Please sign in to comment.