From e8d6bf0db53290625fedaeba8e1f21ff5b460bd7 Mon Sep 17 00:00:00 2001 From: DualFroz Date: Wed, 9 Sep 2026 15:41:54 +0200 Subject: [PATCH] test: cover updateSetToDefaultParsesTheAssignmentValueAsNull --- src/test/kotlin/kestrel/ParserTest.kt | 67 +++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/test/kotlin/kestrel/ParserTest.kt b/src/test/kotlin/kestrel/ParserTest.kt index d0cc5cb..1c27d7d 100644 --- a/src/test/kotlin/kestrel/ParserTest.kt +++ b/src/test/kotlin/kestrel/ParserTest.kt @@ -286,6 +286,73 @@ class ParserTest { assertEquals(Assignment("a", intLit(1)), update.assignments[0]) } + @Test + fun updateSetToDefaultParsesTheAssignmentValueAsNull() { + val update = parseOne("UPDATE t SET a = DEFAULT, b = 2 WHERE id = 3") as UpdateStatement + assertEquals(Assignment("a", null), update.assignments[0]) + assertEquals(Assignment("b", intLit(2)), update.assignments[1]) + } + + @Test + fun insertWithoutReturningLeavesItNull() { + val statement = parseOne("INSERT INTO t VALUES (1)") as InsertStatement + assertNull(statement.returning) + } + + @Test + fun insertReturningStarParsesAsStarProjection() { + val statement = parseOne("INSERT INTO t VALUES (1) RETURNING *") as InsertStatement + assertEquals(StarProjection, statement.returning) + } + + @Test + fun insertReturningExpressionListWithAliasParsesLikeASelectProjection() { + val statement = parseOne("INSERT INTO t (a, b) VALUES (1, 2) RETURNING a, b + 1 AS bplus") as InsertStatement + val projection = statement.returning as ExpressionProjection + assertEquals(2, projection.items.size) + assertEquals("a", (projection.items[0].expression as ColumnExpression).name) + assertNull(projection.items[0].alias) + assertEquals("bplus", projection.items[1].alias) + } + + @Test + fun insertOnConflictReturningParsesReturningAfterTheConflictClause() { + val statement = parseOne( + "INSERT INTO t (id) VALUES (1) ON CONFLICT (id) DO NOTHING RETURNING id" + ) as InsertStatement + assertNotNull(statement.onConflict) + val projection = statement.returning as ExpressionProjection + assertEquals("id", (projection.items.single().expression as ColumnExpression).name) + } + + @Test + fun updateReturningParsesAfterWhere() { + val statement = parseOne("UPDATE t SET a = 1 WHERE id = 3 RETURNING id, a") as UpdateStatement + val projection = statement.returning as ExpressionProjection + assertEquals(2, projection.items.size) + } + + @Test + fun updateReturningWithoutWhereStillParses() { + val statement = parseOne("UPDATE t SET a = 1 RETURNING *") as UpdateStatement + assertNull(statement.where) + assertEquals(StarProjection, statement.returning) + } + + @Test + fun deleteReturningParsesAfterWhere() { + val statement = parseOne("DELETE FROM t WHERE id = 3 RETURNING id") as DeleteStatement + val projection = statement.returning as ExpressionProjection + assertEquals("id", (projection.items.single().expression as ColumnExpression).name) + } + + @Test + fun deleteReturningWithoutWhereStillParses() { + val statement = parseOne("DELETE FROM t RETURNING *") as DeleteStatement + assertNull(statement.where) + assertEquals(StarProjection, statement.returning) + } + @Test fun multipleStatementsAreSeparatedBySemicolons() { val statements = parse("CREATE TABLE t (a INTEGER); DROP TABLE t;")