test: cover updateSetToDefaultParsesTheAssignmentValueAsNull

This commit is contained in:
dualfroz committed 2026-09-09 15:41:54 +02:00
1 parent 1e0560573b
commit e8d6bf0db5
1 file changed
+67
+67
View File
@@ -286,6 +286,73 @@ class ParserTest {
assertEquals(Assignment("a", intLit(1)), update.assignments[0]) 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 @Test
fun multipleStatementsAreSeparatedBySemicolons() { fun multipleStatementsAreSeparatedBySemicolons() {
val statements = parse("CREATE TABLE t (a INTEGER); DROP TABLE t;") val statements = parse("CREATE TABLE t (a INTEGER); DROP TABLE t;")