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.java20
1 files changed, 14 insertions, 6 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 624b3fe..456ffd8 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
@@ -1,5 +1,6 @@
package org.zwobble.hobgoblin.compiler.output.generators.sql;
+import org.zwobble.hobgoblin.compiler.ast.typed.Relation;
import org.zwobble.hobgoblin.compiler.ast.typed.RelationTable;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedQueryDefinitionNode;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedTableDefinitionNode;
@@ -56,7 +57,11 @@ public class SqlGenerator {
TypedQueryDefinitionNode queryDefinition,
TypesInfo typesInfo
) {
- switch (queryDefinition.relation()) {
+ return generateRelation(queryDefinition.relation(), typesInfo);
+ }
+
+ SqlSelectStatement generateRelation(Relation relation, TypesInfo typesInfo) {
+ switch (relation) {
case RelationTable relationTable -> {
var table = relationTable.table();
var schemaInfo = typesInfo.databaseSchemaInfo(table.databaseSchema());
@@ -73,14 +78,17 @@ public class SqlGenerator {
})
.toList();
+ // Order by the primary key to ensure stable ordering.
+ var orderBy = List.of(
+ new SqlOrderingTerm(new SqlRef(
+ generateColumnName(tableInfo.primaryKey().name())
+ ))
+ );
+
return new SqlSelectStatement(
columns,
generateTableName(table.name()),
- List.of(
- new SqlOrderingTerm(new SqlRef(
- generateColumnName(tableInfo.primaryKey().name())
- ))
- )
+ orderBy
);
}
}