diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-11-02 18:39:55 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-11-02 18:39:55 +0000 |
| commit | dcb4e42791ed7ce1c366d59377e65d7c1c25df48 (patch) | |
| tree | 213de1e264cda5eb99a78b203bf5b6962e6c2924 /src/main/java | |
| parent | 585728b94ea1037ddb3c009a0ff18ff62a1c3db3 (diff) | |
Handle no fields in SqlGenerator
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sql/SqlGenerator.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sql/SqlGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sql/SqlGenerator.java index 456ffd8..4a23fa1 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sql/SqlGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sql/SqlGenerator.java @@ -5,6 +5,7 @@ import org.zwobble.hobgoblin.compiler.ast.typed.RelationTable; import org.zwobble.hobgoblin.compiler.ast.typed.TypedQueryDefinitionNode; import org.zwobble.hobgoblin.compiler.ast.typed.TypedTableDefinitionNode; import org.zwobble.hobgoblin.compiler.builtins.NativeTypes; +import org.zwobble.hobgoblin.compiler.errors.InternalError; import org.zwobble.hobgoblin.compiler.output.lang.sql.ast.*; import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; import org.zwobble.hobgoblin.compiler.types.SimpleStructType; @@ -66,8 +67,16 @@ public class SqlGenerator { var table = relationTable.table(); var schemaInfo = typesInfo.databaseSchemaInfo(table.databaseSchema()); var tableInfo = schemaInfo.tables().get(table.name()); - // TODO: handle singleton struct. - var fields = typesInfo.fieldsOf(tableInfo.rowType()).orElseThrow(); + + var fields = typesInfo.fieldsOf(tableInfo.rowType()) + .orElse(List.of()); + + // The type-checker should have verified that the row type has + // fields, so don't try to handle gracefully here. + if (fields.isEmpty()) { + throw new InternalError("row type has no fields"); + } + var columns = fields.stream() .map(field -> { var columnName = generateColumnName(field.name()); |
