diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-10-25 12:27:02 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-10-25 12:27:02 +0000 |
| commit | ed546c3f79ffe43e849134843645461580aa41f4 (patch) | |
| tree | 7b8a9528a2a42e363b58974a62e16d4d42ae5c3a /src/main/java | |
| parent | 6d211928a40953bbebbee574fa5e8928a3ea687b (diff) | |
Declare database schema
Diffstat (limited to 'src/main/java')
4 files changed, 30 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java index 345c78c..e00ffb6 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -94,8 +94,11 @@ public class TypeChecker { TypeCheckerNamespaceContext context ) { return switch (untyped) { - case UntypedDatabaseSchemaDefinitionNode _ -> - Optional.empty(); + case UntypedDatabaseSchemaDefinitionNode untypedDatabaseSchemaDefinition -> + Optional.of(declareDatabaseSchemaDefinition( + untypedDatabaseSchemaDefinition, + context + )); case UntypedEnumDefinitionNode untypedEnumDefinitionNode -> Optional.of(declareEnumDefinitionNode(untyped, context)); @@ -139,6 +142,18 @@ public class TypeChecker { }; } + private static Type declareDatabaseSchemaDefinition( + UntypedDatabaseSchemaDefinitionNode untyped, + TypeCheckerNamespaceContext context + ) { + var databaseSchema = new DatabaseSchema(context.namespaceName(), untyped.name()); + var type = Types.databaseSchema(databaseSchema); + + context.declare(untyped.name(), type, untyped.source()); + + return type; + } + private static TypedNamespaceStatementNode defineDatabaseSchemaDefinition( UntypedDatabaseSchemaDefinitionNode untyped, TypeCheckerNamespaceContext context diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/DatabaseSchema.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/DatabaseSchema.java new file mode 100644 index 0000000..e57d587 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/DatabaseSchema.java @@ -0,0 +1,8 @@ +package org.zwobble.hobgoblin.compiler.types; + +public record DatabaseSchema(NamespaceName namespaceName, String name) implements TypeLevelValue { + @Override + public String describe() { + return namespaceName.toString() + "." + name; + } +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java index cf62eb1..8208521 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeLevelValue.java @@ -1,5 +1,5 @@ package org.zwobble.hobgoblin.compiler.types; -public sealed interface TypeLevelValue permits Type, TypeConstructor { +public sealed interface TypeLevelValue permits DatabaseSchema, Type, TypeConstructor { String describe(); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/Types.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/Types.java index cfbb5ba..a914081 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/types/Types.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/Types.java @@ -26,4 +26,8 @@ public class Types { public static Type metaType(TypeConstructor<?> constructor) { return new TypeLevelValueType(constructor); } + + public static Type databaseSchema(DatabaseSchema databaseSchema) { + return new TypeLevelValueType(databaseSchema); + } } |
