diff options
| -rw-r--r-- | examples/18-database/hobgoblin.json5 | 8 | ||||
| -rw-r--r-- | examples/18-database/src/data.hob | 17 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java | 19 |
3 files changed, 36 insertions, 8 deletions
diff --git a/examples/18-database/hobgoblin.json5 b/examples/18-database/hobgoblin.json5 new file mode 100644 index 0000000..3b36468 --- /dev/null +++ b/examples/18-database/hobgoblin.json5 @@ -0,0 +1,8 @@ +{ + outputs: { + langs: { + }, + generators: [ + ], + } +} diff --git a/examples/18-database/src/data.hob b/examples/18-database/src/data.hob new file mode 100644 index 0000000..6ee3813 --- /dev/null +++ b/examples/18-database/src/data.hob @@ -0,0 +1,17 @@ +struct StructWithInt32 { + field a: Int32; + field b: Int32; +} + +databaseSchema Data { +// table structs: StructWithInt32; +// +// query fetchAllStructs() { +// select(structs) +// } +// +// query fetchStructsByA(a: Int32) { +// select(structs) +// .where(structs.a = a) +// } +} 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 e1c6854..8178d8d 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -36,8 +36,11 @@ public class TypeChecker { var fields = new ArrayList<Field>(); for (var untypedStatement : untypedNamespace.body()) { var type = declareNamespaceStatement(untypedStatement, namespaceContext); - var field = new Field(untypedStatement.name(), type, untypedStatement.source()); - fields.add(field); + + if (type.isPresent()) { + var field = new Field(untypedStatement.name(), type.get(), untypedStatement.source()); + fields.add(field); + } } context.defineNamespace(untypedNamespace.namespaceName(), fields); } @@ -85,25 +88,25 @@ public class TypeChecker { return typedNamespaceNodes; } - static Type declareNamespaceStatement( + static Optional<Type> declareNamespaceStatement( UntypedNamespaceStatementNode untyped, TypeCheckerNamespaceContext context ) { return switch (untyped) { case UntypedDatabaseSchemaDefinitionNode _ -> - throw new UnsupportedOperationException("TODO"); + Optional.empty(); case UntypedEnumDefinitionNode untypedEnumDefinitionNode -> - declareEnumDefinitionNode(untyped, context); + Optional.of(declareEnumDefinitionNode(untyped, context)); case UntypedNativeTypeDefinitionNode untypedNativeTypeDefinition -> - declareNativeTypeDefinition(untypedNativeTypeDefinition, context); + Optional.of(declareNativeTypeDefinition(untypedNativeTypeDefinition, context)); case UntypedStructDefinitionNode untypedStructDefinition -> - declareStructDefinition(untypedStructDefinition, context); + Optional.of(declareStructDefinition(untypedStructDefinition, context)); case UntypedSumDefinitionNode untypedSumDefinition -> - declareSumDefinition(untypedSumDefinition, context); + Optional.of(declareSumDefinition(untypedSumDefinition, context)); }; } |
