summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sql/SqlGenerator.java13
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());